DEVICETYPE SenecaZ10DOUT NAMED "Seneca Z-10-D-OUT" TYPEID 21017 IS % Device definition for Z-10-D-OUT 10 digital outputs % % History: % 2007-02-28 fixed "blinking" problem PARAMETER Id :"Address"; DO_1 :"DO1"; DO_2 :"DO2"; DO_3 :"DO3"; DO_4 :"DO4"; DO_5 :"DO5"; DO_6 :"DO6"; DO_7 :"DO7"; DO_8 :"DO8"; DO_9 :"DO9"; % DO_10 :"DO10"; TimeOut:"TimeOut" ["s"]; Safety:"FailSafe"; PUBLIC pDO_1 :"DO1"; pDO_2 :"DO2"; pDO_3 :"DO3"; pDO_4 :"DO4"; pDO_5 :"DO5"; pDO_6 :"DO6"; pDO_7 :"DO7"; pDO_8 :"DO8"; pDO_9 :"DO9"; % pDO_10 :"DO10"; PRIVATE Tmp; BAUDRATE 38400; 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(02); % start register DATA[4] := RWORD(03); % number of registers to write DATA[6] := HEX(06); % number of bytes to send DATA[7] <- RWORD( % "Outputs" 40003 IF DO_1 THEN Tmp := 1; ELSE Tmp := 0; ENDIF; IF DO_2 THEN Tmp := Tmp + 2; ENDIF; IF DO_3 THEN Tmp := Tmp + 4; ENDIF; IF DO_4 THEN Tmp := Tmp + 8; ENDIF; IF DO_5 THEN Tmp := Tmp + 16; ENDIF; IF DO_6 THEN Tmp := Tmp + 32; ENDIF; IF DO_7 THEN Tmp := Tmp + 64; ENDIF; IF DO_8 THEN Tmp := Tmp + 128; ENDIF; IF DO_9 THEN Tmp := Tmp + 256; ENDIF; % IF DO_10 THEN Tmp := Tmp + 512; ENDIF; DATA := Tmp; pDO_1 := DO_1; pDO_2 := DO_2; pDO_3 := DO_3; pDO_4 := DO_4; pDO_5 := DO_5; pDO_6 := DO_6; pDO_7 := DO_7; pDO_8 := DO_8; pDO_9 := DO_9; ); DATA[9] := RWORD(0000); % "Diagostics" 40004 DATA[11] := RWORD(0000); % "Default outputs" 40005 ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = HEX(10); TIMEOUT 300 END; TELEGRAM WriteSettings NAMED "Write Settings" IS QUESTION DATA[0] := BYTE(Id); % Modbus unit address DATA[1] := HEX(10); % Modbus command "$10" write multiple registers DATA[2] := RWORD(12); % start register DATA[4] := RWORD(03); % number of registers to write DATA[6] := HEX(06); % number of bytes to send DATA[7] := RWORD(0000); % "Safety timeout" 40013 disabling automatic reset DATA[9] := RWORD(0000); % "Reserved" 40014 DATA[11] := RWORD(0000); % "Opened Mask" 40015 activates all outputs ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = HEX(10); TIMEOUT 300 END; END;