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;
% - 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.