To Siemens Logo!8, σε επικοινωνία με άλλες ModBus TCP συσκευές ενδέχεται να παρουσιάζει πρόβλημα διαφοράς unsinged integer σε signed integer
Το πρόβλημα είναι να διαχειριστείς μόνο θετικές τιμές 0-65535, σε ένα σύστημα που δέχεται αρνητικούς και θετικούς ακέραιους αριθμούς 16-bit, δηλαδή από -32768 έως 32767.
Πρόταση
Για να γίνει αντιληπτή η διαφορά παρουσιάζεται ο παρακάτω πίνακας:
|
Signed Τιμή |
Unsigned Τιμή |
|
-32768 |
65536 |
|
-1 |
32768 |
|
0 |
0 |
|
32767 |
32767 |
Η ενδεχόμενη λύση είναι η μετατόπιση των αρνητικών τιμών, ώστε να χωρέσουν σε ένα εύρος που ξεκινά από το 0.
Πρώτο Βήμα:
Διαιρείς όλες τις τιμές με το 10, ώστε το εύρος να γίνει:
Από -3277 έως 3277 (signed)
Που αντιστοιχεί σε 0 έως 6554 (unsigned)
Ακόμα και έτσι, η ακρίβεια είναι καλύτερη από την τυπική ακρίβεια των αισθητήρων του Logo (0–1000).
Δεύτερο βήμα:
Δύο περιπτώσεις μετατροπής
Αρνητική τιμή εισόδου Εφαρμόζεις τον τύπο: μετατροπή = είσοδος + 6553.5 (ώστε να μετατοπιστεί στο θετικό εύρος)
Θετική ή μηδενική τιμή εισόδου Δεν χρειάζεται μετατροπή.
Τρίτο βήμα
UDF Block και τελική μετατροπή
Η τελική λύση μπορεί να συνταχθεί ως ένα UDF block (User Defined Function) για να εφαρμόζεται στα Analog Network Inputs από τη Modbus/TCP συσκευή (πχ. διευθύνσεις 40001–40008, HR 1–8).
Μετά από αυτό το block, εφαρμόζεται ένας αναλογικός ενισχυτής για να μετατρέπει τις τιμές σε πραγματικές μονάδες μέτρησης όπως:
mA (ρεύμα)
V (τάση)
Bar (πίεση)
Kg (βάρος)
