Siox RO2 via ES2
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 1
- Uppdaterad
- 2018-09-26
- Skapad
- 2018-09-26
- Kategori
- IO enheter, Modbus, Övriga protokoll
- Visningar
- 1755
Beskrivning
.
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
DEVICETYPE R02 NAMED "Siox R02" TYPEID 18379 IS
PARAMETER
Id : "Adress" [""]INT;
PUBLIC
OP1 : "AI1 range 2-10 V / 0,4-2 V / 4-20 mA Range" ["No,Yes"]ENUM;
OP2 : "AI2 range 2-10 V / 0,4-2 V / 4-20 mA Range" ["No,Yes"]ENUM;
OP1b : "AI1 Potentiometer Linearization 0-20 kS" ["No,Yes"]ENUM;
OP2b : "AI2 Potentiometer Linearization 0-20 kS" ["No,Yes"]ENUM;
OP1c : "AI1 0-2 V Range" ["No,Yes"]ENUM;
OP2c : "AI2 0-2 V Range" ["No,Yes"]ENUM;
OP1d : "AI1 NTC Temperature Linearization -50 - +150 °C" ["No,Yes"]ENUM;
OP2d : "AI2 NTC Temperature Linearization -50 - +150 °C" ["No,Yes"]ENUM;
OP1e : "AI1 0-20 mA Range" ["No,Yes"]ENUM;
OP2e : "AI2 0-20 mA Range" ["No,Yes"]ENUM;
OP1f : "AI1 0-10 V Range" ["No,Yes"]ENUM;
OP2f : "AI2 0-10 V Range" ["No,Yes"]ENUM;
OP1g : "AO1 Digital Output 24 V 20 mA" ["No,Yes"]ENUM;
OP2g : "AO2 Digital Output 24 V 20 mA" ["No,Yes"]ENUM;
OP1h : "AO1 2-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
OP2h : "AO2 2-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
OP1i : "AO1 0-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
OP2i : "AO2 0-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
DI1 : "DigitalInput 1" INT;
DI2 : "DigitalInput 2" INT;
AI1 : "AnalogInput 1" [""]INT;
AI2 : "AnalogInput 2" [""]INT;
AO1 : "AnalogOutput 1" ["%"]DEC2;
AO2 : "AnalogOutput 2" ["%"]DEC2;
C1 : "Counter 1" [""]INT;
C2 : "Counter 2" [""]INT;
PRIVATE
tmp;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM Read4 NAMED "Read 4" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03);
DATA[2] := RWORD(0); % Start address
DATA[4] := RWORD(28); % Antal register att läsa
ANSWER SIZE 61 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(56); % Antal Bytes
DATA[11] -> BYTE( %4
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1:=tmp;
IF DATA = 40 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1b:=tmp;
IF DATA = 32 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1c:=tmp;
IF DATA = 24 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1d:=tmp;
IF DATA = 8 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1e:=tmp;
IF DATA = 0 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1f:=tmp;
);
DATA[12] -> BYTE( %4
IF DATA & 128 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1g:=tmp;
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1h:=tmp;
IF DATA > 15 THEN tmp:=0; ELSE tmp:=1; ENDIF; OP1i:=tmp;
);
DATA[13] -> BYTE( %5
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2:=tmp;
IF DATA = 40 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2b:=tmp;
IF DATA = 32 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2c:=tmp;
IF DATA = 24 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2d:=tmp;
IF DATA = 8 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2e:=tmp;
IF DATA = 0 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2f:=tmp;
);
DATA[14] -> BYTE( %4
IF DATA & 128 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2g:=tmp;
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2h:=tmp;
IF DATA > 15 THEN tmp:=0; ELSE tmp:=1; ENDIF; OP2i:=tmp;
);
DATA[21] -> RWORD(
IF DATA & 1 THEN tmp:=1; ELSE tmp:=0; ENDIF; DI1:=tmp;
IF DATA & 2 THEN tmp:=1; ELSE tmp:=0; ENDIF; DI2:=tmp;
);
DATA[27] -> RWORD(AO1:=(DATA/4096)*100;);
DATA[29] -> RWORD(AO2:=(DATA/4096)*100;);
DATA[31] -> RWORD(AI1:=DATA;); % 32768 - 32767
DATA[33] -> RWORD(AI2:=DATA;);
DATA[51] -> RWORD32(C1:=DATA;);
DATA[55] -> RWORD32(C2:=DATA;);
TIMEOUT 800
END;
END;
PARAMETER
Id : "Adress" [""]INT;
PUBLIC
OP1 : "AI1 range 2-10 V / 0,4-2 V / 4-20 mA Range" ["No,Yes"]ENUM;
OP2 : "AI2 range 2-10 V / 0,4-2 V / 4-20 mA Range" ["No,Yes"]ENUM;
OP1b : "AI1 Potentiometer Linearization 0-20 kS" ["No,Yes"]ENUM;
OP2b : "AI2 Potentiometer Linearization 0-20 kS" ["No,Yes"]ENUM;
OP1c : "AI1 0-2 V Range" ["No,Yes"]ENUM;
OP2c : "AI2 0-2 V Range" ["No,Yes"]ENUM;
OP1d : "AI1 NTC Temperature Linearization -50 - +150 °C" ["No,Yes"]ENUM;
OP2d : "AI2 NTC Temperature Linearization -50 - +150 °C" ["No,Yes"]ENUM;
OP1e : "AI1 0-20 mA Range" ["No,Yes"]ENUM;
OP2e : "AI2 0-20 mA Range" ["No,Yes"]ENUM;
OP1f : "AI1 0-10 V Range" ["No,Yes"]ENUM;
OP2f : "AI2 0-10 V Range" ["No,Yes"]ENUM;
OP1g : "AO1 Digital Output 24 V 20 mA" ["No,Yes"]ENUM;
OP2g : "AO2 Digital Output 24 V 20 mA" ["No,Yes"]ENUM;
OP1h : "AO1 2-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
OP2h : "AO2 2-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
OP1i : "AO1 0-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
OP2i : "AO2 0-10 V (4-20 mA for R02-2)" ["No,Yes"]ENUM;
DI1 : "DigitalInput 1" INT;
DI2 : "DigitalInput 2" INT;
AI1 : "AnalogInput 1" [""]INT;
AI2 : "AnalogInput 2" [""]INT;
AO1 : "AnalogOutput 1" ["%"]DEC2;
AO2 : "AnalogOutput 2" ["%"]DEC2;
C1 : "Counter 1" [""]INT;
C2 : "Counter 2" [""]INT;
PRIVATE
tmp;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM Read4 NAMED "Read 4" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03);
DATA[2] := RWORD(0); % Start address
DATA[4] := RWORD(28); % Antal register att läsa
ANSWER SIZE 61 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(56); % Antal Bytes
DATA[11] -> BYTE( %4
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1:=tmp;
IF DATA = 40 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1b:=tmp;
IF DATA = 32 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1c:=tmp;
IF DATA = 24 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1d:=tmp;
IF DATA = 8 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1e:=tmp;
IF DATA = 0 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1f:=tmp;
);
DATA[12] -> BYTE( %4
IF DATA & 128 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1g:=tmp;
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP1h:=tmp;
IF DATA > 15 THEN tmp:=0; ELSE tmp:=1; ENDIF; OP1i:=tmp;
);
DATA[13] -> BYTE( %5
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2:=tmp;
IF DATA = 40 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2b:=tmp;
IF DATA = 32 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2c:=tmp;
IF DATA = 24 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2d:=tmp;
IF DATA = 8 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2e:=tmp;
IF DATA = 0 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2f:=tmp;
);
DATA[14] -> BYTE( %4
IF DATA & 128 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2g:=tmp;
IF DATA & 64 THEN tmp:=1; ELSE tmp:=0; ENDIF; OP2h:=tmp;
IF DATA > 15 THEN tmp:=0; ELSE tmp:=1; ENDIF; OP2i:=tmp;
);
DATA[21] -> RWORD(
IF DATA & 1 THEN tmp:=1; ELSE tmp:=0; ENDIF; DI1:=tmp;
IF DATA & 2 THEN tmp:=1; ELSE tmp:=0; ENDIF; DI2:=tmp;
);
DATA[27] -> RWORD(AO1:=(DATA/4096)*100;);
DATA[29] -> RWORD(AO2:=(DATA/4096)*100;);
DATA[31] -> RWORD(AI1:=DATA;); % 32768 - 32767
DATA[33] -> RWORD(AI2:=DATA;);
DATA[51] -> RWORD32(C1:=DATA;);
DATA[55] -> RWORD32(C2:=DATA;);
TIMEOUT 800
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.