MODBUS - Valeur négative

Bonjour à tous,
Je me réponds à moi même après un échange avec @Kevin_GCE sur le Help Desk.

En fait, et malgré ce qu’on pourrait penser, l’objet MobBus ne s’adapte pas aux variables qu’il alimente.
Les données binaire reçu par Modbus sont simplement transféré en décimale dans les variables.

Valeur Négative :

Pour une valeur sur 8 bits par exemple :

  • Donnée reçu par Modbus : 11111111
  • Conversion en décimal = 255
  • Transfère dans une variable 8 bits RAW = 255 >> OK
  • Transfère dans une variable 8bits REAL = 128 >> PAS OK, la variable se met a son maximum.

Il me semblerais logique que l’objet ModBus s’adapte à la variable qu’il alimente au moment ou il traite (converti) la donnée binaire qu’il reçoit.
Selon mes recherches, la méthode du complément à 2 est la plus répandu pour transférer des nombre négatif en binaire. Dans mon exemple précédent, si la variable à remplir est paramétré en REAL, l’objet ModBus devrait, à mon avis, la fixer à « -1 ».

La seule méthode que j’ai trouvé est d’utiliser des objets Comparateur et Fonction pour convertir les données. J’avais décrit ma méthode dans ce post :

Précision décimale :

De la même façon, si la variable est paramétré pour avoir une virgule, l’Objet ModBus n’en prend pas compte.
Par exemple, pour une variable 16bits paramétré avec 2 chiffres après la virgule, l’IPX nous informe que la plage disponible est -327,68 <> 327,67.
Si la donnée reçu par ModBus est 0000000110010000, 400 après conversion en décimale, la variable se fixera à 327,67 (son maximum).
Il me semblerait logique, à partir du moment où les donnée reçu en binaire sont forcément entier, que la variable se fixe à 4,00 puisqu’on a paramétré la variable avec 2 chiffre après la virgule.

Tout cela est vrai jusqu’à la version actuelle de l’IPXv5 (5.5.6).
@Kevin_GCE m’informe que la demande est passé aux développeurs.
J’espère que @GCE se penchera sur le sujet. Dans l’état c’est un peu compliqué (mais pas impossible) de gérer les données reçu par ModBus. Cela impose un grand nombre d’objet Formule pour les différente conversion à faire. D’autant qu’actuellement, l’IPX ne sait pas correctement faire une division ni une soustraction.

1 « J'aime »