% Skapad med Modbus Creator % - OBS! Användaren ansvarar själv för att samma TYPID inte används flera gånger i samma apparat. % TYPID 10000-19999 är för användardefinierade enheter DEVICETYPE RegioE22 NAMED "Regio E22 till E21 Samkörning " TYPEID 15525 IS PARAMETER Id : "Adress"; V7 : "(ut) Givarfel, T1" [""]; V8 : "(ut) Värmecirkulationspump i drift" [""]; V9 : "(ut) Tillskottsvärme i drift" [""]; V10 : "(ut) Börvärde värme, T1" ["°C"]DEC1; V11 : "(ut) Ärvärde, värmesystem T1" ["°C"]DEC1; V12 : "(ut) Ärvärde ute, T2" ["°C"]DEC1; PUBLIC V1 : "(in) Givarfel, T1" [""]; V2 : "(in) Värmecirkulationspump i drift" [""]; V3 : "(in) Tillskottsvärme i drift" [""]; V4 : "(in) Börvärde värme, T1" ["°C"]DEC1; V5 : "(in) Ärvärde, värmesystem T1" ["°C"]DEC1; V6 : "(in) Ärvärde ute, T2" ["°C"]DEC1; PRIVATE count5; count6; BAUDRATE 9600; CHRGAPTIMEOUT 32; CHECKSUM MODBUS SWAPPED; TELEGRAM Read1 NAMED "Read 1" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(01); % Modbus kommando för att läsa register kod 01 DATA[2] := RWORD(8); % Start address DATA[4] := RWORD(5); % Antal register att läsa ANSWER SIZE 6 DATA[0] = BYTE(Id); DATA[1] = BYTE(01); DATA[2] = BYTE(1); % Antal Bytes DATA[3] -> BYTE( IF (DATA & 1) THEN V1 := 1; ELSE V1 := 0; ENDIF; IF (DATA & 8) THEN V2 := 1; ELSE V2 := 0; ENDIF; IF (DATA & 16) THEN V3 := 1; ELSE V3 := 0; ENDIF; ); TIMEOUT 1000 END; TELEGRAM WriteCoil NAMED "Write Coil" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(05); % Modbus kommando för att skriva en Coil DATA[2] <- RWORD( IF(count5>2) THEN count5 := 0; ENDIF; IF (count5=0) THEN DATA := 8; ELSIF (count5=1) THEN DATA := 11; ELSIF (count5=2) THEN DATA := 12; ENDIF; ); % Register adress DATA[4] <- RWORD( IF (count5=0) THEN IF (V7 >0) THEN DATA := 65536; ELSE DATA := 0; ENDIF; ELSIF (count5=1) THEN IF (V8 >0) THEN DATA := 65536; ELSE DATA := 0; ENDIF; ELSIF (count5=2) THEN IF (V9 >0) THEN DATA := 65536; ELSE DATA := 0; ENDIF; ENDIF; count5 := count5+1; ); ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = BYTE(05); TIMEOUT 1000 END; TELEGRAM Read3 NAMED "Read 3" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa register kod 03 DATA[2] := RWORD(79); % Start address DATA[4] := RWORD(3); % Antal register att läsa ANSWER SIZE 11 % (Antal register * 2) + 5 DATA[0] = BYTE(Id); DATA[1] = BYTE(03); DATA[2] = BYTE(6); % Antal Bytes DATA[3] -> RWORD(V4 := DATA/10;); DATA[5] -> RWORD(V5 := DATA/10;); DATA[7] -> RWORD(IF (DATA>=32768) THEN V6:=(DATA-65536)/10; ELSE V6:=DATA/10; ENDIF;); TIMEOUT 1000 END; TELEGRAM WriteRegister NAMED "Write Register" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(06); % Modbus kommando för att skriva ett register DATA[2] <- RWORD( IF(count6>2) THEN count6 := 0; ENDIF; IF (count6=0) THEN DATA := 79; ELSIF (count6=1) THEN DATA := 80; ELSIF (count6=2) THEN DATA := 81; ENDIF; ); % Register adress DATA[4] <- RWORD( IF (count6=0) THEN DATA := V10*10; ELSIF (count6=1) THEN DATA := V11*10; ELSIF (count6=2) THEN IF (V12<0) THEN DATA := ROUND(65536+V12*10); ELSE DATA := ROUND(V12*10); ENDIF; ENDIF; count6 := count6+1; ); ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = BYTE(06); TIMEOUT 1000 END; END;