Skip to Content

Easy Modbus interface with HVAC system of Sauter

So today I went on site for interfacing a NetLinx AMX system with Sauter HVAC system. The HVAC system is interfaced through a PC that translates internal bus to more regular Modbus/Jbus protocol.

Modbus is a pretty simple protocol but its implementation is not so simple due to three facts:

  • It uses a pretty complex system to calculate a mandatory checksum at end of each message. But with help of a friend Jon, and also piece of code made by Crestron for their Modbus module, I was able to automate creation of Modbus messages in my NetLinx program. Here is result for exemple for a read command:


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

​}

That sample computes automatically checksum for a read message of two bytes :)

  • Second problem is for answer you get back from HVAC as temperature value is coded with IEEE system. I looked at it on internet but it looks pretty complex to encode, so for now I just do a comparison between know values and it allows me to get correct value, at price of extra comparison work but it functions perfect :) If someone already did a piece of code in NetLinx to encode/decode IEEE value, I'm interested in !
  • Last point very important with Modbus protocol is that it doesn't speak by itself :( So each time you want to know something you have to issue a read command. So best way is to use a timeline you run in background that continuously asks values at system so you keep always value up to date :)

Hope it helped you, and feel free to ask questions you might have in comments !

Easy Modbus interface with HVAC system of Sauter
Vincèn March 16, 2008