{"id":663,"date":"2008-03-16T09:44:50","date_gmt":"2008-03-16T08:44:50","guid":{"rendered":"https:\/\/www.domedia.net\/?p=663"},"modified":"2017-07-18T09:47:02","modified_gmt":"2017-07-18T07:47:02","slug":"interfacage-modbus-aise-avec-une-regul-de-clim-sauter","status":"publish","type":"post","link":"https:\/\/www.domedia.net\/?p=663&lang=fr","title":{"rendered":"Interfa\u00e7age Modbus ais\u00e9 avec une r\u00e9gul. de clim Sauter"},"content":{"rendered":"<p>Je me suis donc rendu aujourd&rsquo;hui sur site pour la mise en route de l&rsquo;interfa\u00e7age d&rsquo;un syst\u00e8me NetLinx AMX avec une r\u00e9gulation de climatisation fabriqu\u00e9e par Sauter. La clim. Sauter est \u00e9quip\u00e9 d&rsquo;un ordinateur de type PC qui sert de passerelle entre le bus interne du syst\u00e8me Sauter et le protocole \u00e0 la norme Modbus\/Jbus.<!--more--><\/p>\n<p>Modbus est un protocole relativement simple mais son impl\u00e9mentation n&rsquo;est pas si simple pour trois raisons:<\/p>\n<ol>\n<li style=\"list-style-type: none\">\n<ol>\n<li>Le protocole utilise un syst\u00e8me plut\u00f4t complexe de calcul du checksum qui est obligatoire \u00e0 la fin de chaque message transmis. Mais avec l&rsquo;aide d&rsquo;un ami, Jon, et avec l&rsquo;aide \u00e9galement d&rsquo;un bout de code fait par Crestron pour leur module Modbus, j&rsquo;ai r\u00e9ussi \u00e0 automatiser la construction des trames Modbus dans mon programme NetLinx. Voil\u00e0 le r\u00e9sultat pour une commande de lecture:<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<blockquote><p>STACK_VAR<br \/>\nCHAR TEMP[6]<br \/>\nCHAR INTERRO_A_ENVOYER[8]<br \/>\nLONG TEMP_1<br \/>\nLONG XFLG<br \/>\nLONG I<br \/>\nLONG J<br \/>\nLONG CRC<br \/>\n{<br \/>\nTEMP = \u00ab\u00a01,3,0,((ETAPE-1)*4),0,2\u00a0\u00bb<br \/>\nCRC = $FFFF<br \/>\nFOR(I=1;I&lt;7;I++)<br \/>\n{<br \/>\nTEMP_1 = TEMP[I]<br \/>\nFOR(J=1;J&lt;9;J++)<br \/>\n{<br \/>\nXFLG = (CRC^TEMP_1) &amp; $0001<br \/>\nCRC = CRC &gt;&gt; 1<br \/>\nIF(XFLG&lt;&gt;0)<br \/>\n{<br \/>\nCRC = CRC ^ $A001<br \/>\n}<br \/>\nTEMP_1 = TEMP_1 \/ 2<br \/>\n}<br \/>\n}<br \/>\nI = CRC \/ 256<br \/>\nJ = CRC &#8211; (I*256)<br \/>\nINTERRO_A_ENVOYER = \u00ab\u00a0TEMP,J,I\u00a0\u00bb<br \/>\nSEND_STRING dvCLIM,INTERRO_A_ENVOYER<br \/>\n}<\/p><\/blockquote>\n<p>Ce bout de code calcule automatiquement le checksum pour un message d&rsquo;interrogation de deux octets \ud83d\ude42<\/p>\n<ol>\n<li>Le deuxi\u00e8me probl\u00e8me est la lecture de la r\u00e9ponse obtenue du syst\u00e8me de clim car les valeurs sont cod\u00e9es au format IEEE. Je me suis renseign\u00e9 sur Internet mais ce syst\u00e8me a l&rsquo;air plut\u00f4t complexe pour l&rsquo;encodage, donc pour le moment, j&rsquo;ai r\u00e9alis\u00e9 un test en dur dans mon programme avec des valeurs connues pour savoir par approximation la valeur retourn\u00e9e par la clim. Cela n\u00e9cessite un traitement un peu fastidieux mais \u00e7a fonctionne parfaitement \ud83d\ude42 Si quelqu&rsquo;un a d\u00e9ja fait un bout de code en NetLinx pour encoder\/d\u00e9coder des valeurs IEEE, je suis int\u00e9ress\u00e9 !<\/li>\n<li>Le dernier point tr\u00e8s inportant avec le protocole Modbus est qu&rsquo;il ne parle pas par lui-m\u00eame \ud83d\ude41 Donc chaque fois que vous voulez savoir quelque chose vous devez \u00e9mettre une commande de lecture. Donc la meilleure fa\u00e7on de travailler est de faire tourner une timeline en t\u00e2che de fond qui p\u00e9riodiquement interroge les valeurs du syst\u00e8me de clim afin de garder l&rsquo;AMX synchrone avec le syst\u00e8me de clim \ud83d\ude42<\/li>\n<\/ol>\n<p>En esp\u00e9rant que cela vous ait aid\u00e9, et n&rsquo;h\u00e9sitez pas \u00e0 poser des questions dans les commentaires si besoin est !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je me suis donc rendu aujourd&rsquo;hui sur site pour la mise en route de l&rsquo;interfa\u00e7age d&rsquo;un syst\u00e8me NetLinx AMX avec une r\u00e9gulation de climatisation fabriqu\u00e9e par Sauter. La clim. Sauter est \u00e9quip\u00e9 d&rsquo;un ordinateur de type PC qui sert de passerelle entre le bus interne du syst\u00e8me Sauter et le protocole \u00e0 la norme Modbus\/Jbus.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[30],"tags":[],"class_list":["post-663","post","type-post","status-publish","format-standard","hentry","category-technique"],"_links":{"self":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts\/663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=663"}],"version-history":[{"count":1,"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts\/663\/revisions"}],"predecessor-version":[{"id":664,"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts\/663\/revisions\/664"}],"wp:attachment":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}