% % Device definition for Seneca Z-10-D-IN used as 10 status inputs % % Se till att anropa "readCounters" minst vart tionde minut om frekvensen % är i närheten av 100 Hz % Filter skall ha värden mellan 1-255 ju högre frekvens desto lägre filtervärde % DEVICETYPE SenecaZ10DIN NAMED "Seneca Z-10-DIN" TYPEID 21010 IS PARAMETER Id :"Address"; Filter :"Filter"; PUBLIC DI_1 :"DI1"; DI_2 :"DI2"; DI_3 :"DI3"; DI_4 :"DI4"; DI_5 :"DI5"; DI_6 :"DI6"; DI_7 :"DI7"; DI_8 :"DI8"; DI_9 :"DI9"; DI_10 :"DI10"; C1: "Räknare 1"; C2: "Räknare 2"; C3: "Räknare 3"; C4: "Räknare 4"; C5: "Räknare 5"; C6: "Räknare 6"; C7: "Räknare 7"; C8: "Räknare 8"; C9: "Räknare 9"; C10: "Räknare 10"; PRIVATE state; ovf1; ovf2; ovf3; ovf4; ovf5; ovf6; ovf7; ovf8; ovf9; ovf10; tmp; BAUDRATE 38400; CHECKSUM MODBUS SWAPPED; TELEGRAM ReadInputs NAMED "Read Inputs" IS QUESTION DATA[0] := BYTE(Id); DATA[1] := HEX(03); DATA[2] := HEX(00); DATA[3] := HEX(01); DATA[4] := HEX(00); DATA[5] := HEX(01); ANSWER SIZE 7 DATA[0] = BYTE(Id); DATA[1] = HEX(03); % modbus funktion DATA[2] = HEX(02); % antal byte DATA[3] -> RWORD(IF (DATA & 1) > 0 THEN DI_1 := 1; ELSE DI_1 := 0; ENDIF; IF (DATA & 2) > 0 THEN DI_2 := 1; ELSE DI_2 := 0; ENDIF; IF (DATA & 4) > 0 THEN DI_3 := 1; ELSE DI_3 := 0; ENDIF; IF (DATA & 8) > 0 THEN DI_4 := 1; ELSE DI_4 := 0; ENDIF; IF (DATA & 16) > 0 THEN DI_5 := 1; ELSE DI_5 := 0; ENDIF; IF (DATA & 32) > 0 THEN DI_6 := 1; ELSE DI_6 := 0; ENDIF; IF (DATA & 64) > 0 THEN DI_7 := 1; ELSE DI_7 := 0; ENDIF; IF (DATA & 128) > 0 THEN DI_8 := 1; ELSE DI_8 := 0; ENDIF; IF (DATA & 256) > 0 THEN DI_9 := 1; ELSE DI_9 := 0; ENDIF; IF (DATA & 512) > 0 THEN DI_10 := 1; ELSE DI_10 := 0; ENDIF; ); TIMEOUT 300 END; TELEGRAM ReadCounters NAMED "Read Counters" IS QUESTION DATA[0] := BYTE(Id); DATA[1] := HEX(03); DATA[2] <- RWORD( IF (state>6) THEN state:=1; ENDIF; DATA:=state*2; ); DATA[4] := HEX(00); DATA[5] := HEX(02); ANSWER SIZE 9 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = HEX(04); DATA[3] -> RWORD( IF (state=1) THEN tmp:=DATA+ovf1*65536; IF (tmp RWORD( IF (state=1) THEN tmp:=DATA+ovf2*65536; IF (tmp