DEVICETYPE SenecaZDIOUT NAMED "Seneca Z-D-IO" TYPEID 21019 IS % Device definition for Z-6D-IN &-2D-OUT % 6 digital inputs and 2 digital outputs % % History: 2008-03-17 % PARAMETER Id :"Adress"; A_Led :"Larmdiod"; DO_1 :"DU1"; DO_2 :"DU2"; PUBLIC DI_1 :"DI1"; DI_2 :"DI2"; DI_3 :"DI3"; DI_4 :"DI4"; DI_5 :"DI5"; DI_6 :"DI6"; PRIVATE Tmp; BAUDRATE 9600; CHECKSUM MODBUS SWAPPED; TELEGRAM WriteDOut NAMED "Write Output" IS QUESTION DATA[0] := BYTE(Id); % Modbus unit address DATA[1] := HEX(10); % Modbus command "$10" write multiple registers DATA[2] := RWORD(1); % start register DATA[4] := RWORD(1); % number of registers to write DATA[6] := HEX(02); % number of bytes to send DATA[7] <- RWORD( % "Outputs" 40002 Tmp := 0; IF DO_2 THEN Tmp := Tmp + 1; ENDIF; % Set DO2 IF DO_1 THEN Tmp := Tmp + 2; ENDIF; % Set DO1 IF A_Led THEN Tmp := Tmp + 4; ENDIF; % Set Alarmled DATA := Tmp; ); ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = HEX(10); %DATA[2] = HEX(00); %DATA[3] = HEX(01); % start register %DATA[4] = HEX(00); %DATA[5] = HEX(01); % number of registers to write TIMEOUT 500 END; TELEGRAM ReadInputs NAMED "Read Inputs" IS QUESTION DATA[0] := BYTE(Id); DATA[1] := HEX(03); DATA[2] := RWORD(1); % start register DATA[4] := RWORD(1); % number of registers to read ANSWER SIZE 7 DATA[0] = BYTE(Id); DATA[1] = HEX(03); % modbus funktion DATA[2] = HEX(02); % antal byte DATA[3] -> RWORD(IF (DATA & 32768) > 0 THEN DI_1 := 1; ELSE DI_1 := 0; ENDIF; IF (DATA & 16384) > 0 THEN DI_2 := 1; ELSE DI_2 := 0; ENDIF; IF (DATA & 8192) > 0 THEN DI_3 := 1; ELSE DI_3 := 0; ENDIF; IF (DATA & 4096) > 0 THEN DI_4 := 1; ELSE DI_4 := 0; ENDIF; IF (DATA & 2048) > 0 THEN DI_5 := 1; ELSE DI_5 := 0; ENDIF; IF (DATA & 1024) > 0 THEN DI_6 := 1; ELSE DI_6 := 0; ENDIF; ); TIMEOUT 500 END; END;