PTM1.2Q250-M IO enhet via Persy P-Bus Gateway

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
2
Uppdaterad
2016-06-28
Skapad
2016-06-28
Kategori
IO enheter, Modbus, Övriga protokoll
Visningar
2686

Beskrivning

Läs och skriv till Siemens PTM1.2Q250-M relä enhet med två reläer AC 24-250V 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 8224 med hjälp av Read Type. Den ska normalt 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 och skriv till Siemens PTM1.2Q250-M relä enhet med två reläer AC 24-250V in via Persy P-Bus Gateway.
% Kommunikation med GW sker via Modbus TCP/RTU
DEVICETYPE PTM12Q250M NAMED "PTM12Q250-M" TYPEID 21477 IS

 PARAMETER
  Id       : "Adress" [""]INT;
  Numbr    : "Modul Nummer" [""]INT; % 1-112
  PBus     : "P-Bus Nummer" [""]INT; % 1 eller 2
  V7        : "Skriv R1" [""]INT; % 0=av. 1=på
  V8        : "Skriv R2" [""]INT;
  
 PUBLIC
  V1 : "R1 aktiv manuell"  [""]INT; % 1=aktiv 
  V2 : "R2 aktiv manuell"  [""]INT;
  V3 : "R1 status manuell" [""]INT; % 0=på, 1=av
  V4 : "R2 status manuell" [""]INT;
  V5 : "R1 skrivet värde" [""]INT; % värde skrivet till reläet
  V6 : "R2 skrivet värde" [""]INT;
  V9 : "EnhetsTyp" [""]INT; % PTM1.2Q250-M = 8224

 PRIVATE
  TypeBase;
  UnitBase;
  tmp;

 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&256 THEN V3:=1; ELSE V3:=0; ENDIF;
IF DATA&512 THEN V4:=1; ELSE V4:=0; ENDIF;
IF DATA&16384 THEN V5:=1; ELSE V5:=0; ENDIF;
IF DATA&32768 THEN V6:=1; ELSE V6:=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(V9:=DATA;);
  TIMEOUT 300
 END;
 TELEGRAM WriteIO NAMED "Write IO" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(06); % Modbus kommando för att skriva ett holding register
   DATA[2] <- RWORD(
    IF PBus=2 THEN UnitBase:=2824; ELSE UnitBase:=520; ENDIF; 
    DATA:=UnitBase+((Numbr-1)*8)+4;
   ); % Start address 520 på pbus1 och 2824 på pbus2 sen 8 register bredd per enhet
   DATA[4] <- RWORD(
    tmp:=0;
IF V7=1 THEN tmp:=tmp+16384; ENDIF;
IF V8=1 THEN tmp:=tmp+32768; ENDIF;
DATA:=tmp;
   );
  ANSWER SIZE 8 
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(06);
  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.