% Läs Siemens PTM1.2D20 IO enhet med två digitala in via Persy P-Bus Gateway. % Kommunikation med GW sker via Modbus TCP/RTU DEVICETYPE PTM12D20 NAMED "PTM12D20" TYPEID 21476 IS PARAMETER Id : "Adress"; Numbr : "Modul Nummer"; % 1-112 PBus : "P-Bus Nummer"; % 1 eller 2 PUBLIC V1 : "DI1" [""]INT; % 0=öppen, 1=stängd (led på) V2 : "DI2" [""]INT; V5 : "EnhetsTyp" [""]INT; % PTM1.2D20 = 257 PRIVATE TypeBase; UnitBase; BAUDRATE 9600; CHECKSUM MODBUS SWAPPED; TELEGRAM ReadIO NAMED "Read IO" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa holding register DATA[2] <- RWORD( IF PBus=2 THEN UnitBase:=2824; ELSE UnitBase:=520; ENDIF; DATA:=UnitBase+((Numbr-1)*8); ); % Start address 520 på pbus1 och 2824 på pbus2 sen 8 register bredd per enhet DATA[4] := RWORD(1); % Antal register att läsa ANSWER SIZE 7 % (Antal register * 2) + 5 DATA[0] = BYTE(Id); DATA[1] = BYTE(03); DATA[2] = BYTE(2); % Antal Bytes DATA[3] -> RWORD( IF DATA&1 THEN V1:=1; ELSE V1:=0; ENDIF; IF DATA&2 THEN V2:=1; ELSE V2:=0; ENDIF; ); TIMEOUT 300 END; TELEGRAM ReadType NAMED "Read Type" IS % Kör för att kolla, onödig att köra varje gång QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa holding register DATA[2] <- RWORD( IF PBus=2 THEN TypeBase:=2561; ELSE TypeBase:=257; ENDIF; DATA:=TypeBase+Numbr-1; ); % Start address 257 på pbus1 och 2561 på pbus2 sen 1 register bredd per enhet DATA[4] := RWORD(1); % Antal register att läsa ANSWER SIZE 7 DATA[0] = BYTE(Id); DATA[1] = BYTE(03); DATA[2] = BYTE(2); % Antal Bytes DATA[3] -> RWORD(V5:=DATA;); TIMEOUT 300 END; END;