PTM1.4D20 IO enhet via Persy P-Bus Gateway
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 5
- Uppdaterad
- 2016-06-28
- Skapad
- 2016-06-28
- Kategori
- IO enheter, Modbus, Övriga protokoll
- Visningar
- 2429
Beskrivning
Läs Siemens PTM1.4D20 IO enhet med fyra digitala in via Persy P-Bus Gateway.
Kommunikation med GW sker via Modbus TCP/RTU
Bruksanvisning
1. Ställ in Gatewayens modbus adress
2. Ställ in vilken P-bus (1/2) som enheten sitter på
3. Ställ in enhetens nummer på bussen (1-112)
Glöm inte att värdena måste sättas som default
Vid behov kolla enhetens typ som är 4369 med hjälp av Read Type. Den ska normalt sätt inte behöva läsas.
Juridisk information
Alla skript tillhandahålls i befintligt skick och all användning sker på eget ansvar. Felaktig använding kan leda till skadad eller förstörd utrustning.
Skript kod
% Läs Siemens PTM1.4D20 IO enhet med fyra digitala in via Persy P-Bus Gateway.
% Kommunikation med GW sker via Modbus TCP/RTU
DEVICETYPE PTM14D20 NAMED "PTM14D20" 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;
V3 : "DI3" [""]INT;
V4 : "DI4" [""]INT;
V5 : "EnhetsTyp" [""]INT; % PTM1.4D20 = 4369
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;
IF DATA&4 THEN V3:=1; ELSE V3:=0; ENDIF;
IF DATA&8 THEN V4:=1; ELSE V4:=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;
% Kommunikation med GW sker via Modbus TCP/RTU
DEVICETYPE PTM14D20 NAMED "PTM14D20" 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;
V3 : "DI3" [""]INT;
V4 : "DI4" [""]INT;
V5 : "EnhetsTyp" [""]INT; % PTM1.4D20 = 4369
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;
IF DATA&4 THEN V3:=1; ELSE V3:=0; ENDIF;
IF DATA&8 THEN V4:=1; ELSE V4:=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;
Användarnas noteringar
Du måste vara inloggad för att göra en notering. Bli medlem eller logga in. Vi använder en moderator som godkänner noteringarna innan de visas.