Generisk drivrutin för att läsa 3 holding register med faktor

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
1
Uppdaterad
2015-09-16
Skapad
2015-09-16
Kategori
Modbus
Visningar
2066

Beskrivning

Den här drivrutinen är skriven för att läsa tre värden från tex en Elvaco CMx3100 med Modbus TCP där du kan:
- ange tre holding register att läsa
- ange en faktor att räkna om hämtade värden (kallas konstant på vissa enheter)

Bruksanvisning

.

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

% Skapad med Modbus Creator
% - OBS! Användaren ansvarar själv för att samma TYPID inte används flera gånger i samma apparat.
%   TYPID 10000-19999 är för användardefinierade enheter
DEVICETYPE Read3Holding NAMED "Read 3 Holding" TYPEID 16815 IS

 PARAMETER
  Id : "Adress";
  R1 : "Regnum1"; % register adress till värde1
  R2 : "Regnum2"; % register adress till värde1
  R3 : "Regnum3"; % register adress till värde1
  Factor : "Faktor"; % omräkningsfaktor av värde, 1 decimal = 10, 2 decimaler = 100

 PUBLIC
  V1 : "värde1" [""];
  V2 : "värde2" [""];
  V3 : "värde3" [""];

  PRIVATE

 BAUDRATE 9600;
 PARITY ODD;
 CHECKSUM MODBUS SWAPPED;

 TELEGRAM Read1 NAMED "Read 1" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(03); % Modbus kommando för att läsa holding register kod 03
   DATA[2] := RWORD(R1); % start register address
   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 Factor=0 THEN Factor:=1; ENDIF;
   V1 := DATA/Factor;
   );
  TIMEOUT 300
 END;
 TELEGRAM Read2 NAMED "Read 2" IS
  QUESTION
   DATA[0] := BYTE(Id);
   DATA[1] :=  HEX(03); 
   DATA[2] := RWORD(R2);
   DATA[4] := RWORD(1);
  ANSWER SIZE 7
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(03);
   DATA[2] = BYTE(2);
   DATA[3] -> RWORD(
   V2 := DATA/Factor;
   );
  TIMEOUT 300
 END;
 TELEGRAM Read3 NAMED "Read 3" IS
  QUESTION
   DATA[0] := BYTE(Id);
   DATA[1] :=  HEX(03);
   DATA[2] := RWORD(R3);
   DATA[4] := RWORD(1);
  ANSWER SIZE 7
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(03);
   DATA[2] = BYTE(2);
   DATA[3] -> RWORD(
   V3 := DATA/Factor;
   );
  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.