Je me suis donc rendu aujourd’hui sur site pour la mise en route de l’interfaçage d’un système NetLinx AMX avec une régulation de climatisation fabriquée par Sauter. La clim. Sauter est équipé d’un ordinateur de type PC qui sert de passerelle entre le bus interne du système Sauter et le protocole à la norme Modbus/Jbus.
Modbus est un protocole relativement simple mais son implémentation n’est pas si simple pour trois raisons:
-
- Le protocole utilise un système plutôt complexe de calcul du checksum qui est obligatoire à la fin de chaque message transmis. Mais avec l’aide d’un ami, Jon, et avec l’aide également d’un bout de code fait par Crestron pour leur module Modbus, j’ai réussi à automatiser la construction des trames Modbus dans mon programme NetLinx. Voilà le résultat pour une commande de lecture:
STACK_VAR
CHAR TEMP[6]
CHAR INTERRO_A_ENVOYER[8]
LONG TEMP_1
LONG XFLG
LONG I
LONG J
LONG CRC
{
TEMP = « 1,3,0,((ETAPE-1)*4),0,2 »
CRC = $FFFF
FOR(I=1;I<7;I++)
{
TEMP_1 = TEMP[I]
FOR(J=1;J<9;J++)
{
XFLG = (CRC^TEMP_1) & $0001
CRC = CRC >> 1
IF(XFLG<>0)
{
CRC = CRC ^ $A001
}
TEMP_1 = TEMP_1 / 2
}
}
I = CRC / 256
J = CRC – (I*256)
INTERRO_A_ENVOYER = « TEMP,J,I »
SEND_STRING dvCLIM,INTERRO_A_ENVOYER
}
Ce bout de code calcule automatiquement le checksum pour un message d’interrogation de deux octets 🙂
- Le deuxième problème est la lecture de la réponse obtenue du système de clim car les valeurs sont codées au format IEEE. Je me suis renseigné sur Internet mais ce système a l’air plutôt complexe pour l’encodage, donc pour le moment, j’ai réalisé un test en dur dans mon programme avec des valeurs connues pour savoir par approximation la valeur retournée par la clim. Cela nécessite un traitement un peu fastidieux mais ça fonctionne parfaitement 🙂 Si quelqu’un a déja fait un bout de code en NetLinx pour encoder/décoder des valeurs IEEE, je suis intéressé !
- Le dernier point très inportant avec le protocole Modbus est qu’il ne parle pas par lui-même 🙁 Donc chaque fois que vous voulez savoir quelque chose vous devez émettre une commande de lecture. Donc la meilleure façon de travailler est de faire tourner une timeline en tâche de fond qui périodiquement interroge les valeurs du système de clim afin de garder l’AMX synchrone avec le système de clim 🙂
En espérant que cela vous ait aidé, et n’hésitez pas à poser des questions dans les commentaires si besoin est !
Recent Comments