Regin Trådlös Modbus via RCW-M (WMpro)
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 1
- Uppdaterad
- 2017-11-20
- Skapad
- 2017-11-20
- Kategori
- IO enheter, Modbus
- Visningar
- 2059
Beskrivning
Drivrutin för Rumsgivare TG-R5W, Utomhusgivare TG-R6W samt DCW dörrkontakt, IRCW takmonterad rörelsesensor samt IRW rörelsesensor med stöd för:
- Medel, max och min värden för rumstemperaturer
- Lägg till eller ta bort givare
- Sätt sovtid (wake up) tid, läs sovtid
- Batteri larm med summalarm batteri
- läs mätartyp och id
Bruksanvisning
Endast WM pro och IPX2
Normal drift:
- Sätt telegram Koppla/Ta bort i Ingen kommunikation
- Sätt telegram Ställ sovtid i Ingen kommunikation
- Sätt modbus adress (sätts med DIP switchar på mottagaren)
- Sätt Tempgräns låg till lägsta rumstemperatur för att räknas. Default är 10
- Sätt Tempgräns hög till högsta rumstemperatur för att räknas. Default är 40
För att lägga till enhet:
- Sätt Välj enhet(1-16) till det enhetsnummer du vill lägga till
- Sätt Operation till Koppla
- Sätt telegram Koppla/Ta bort till 1 sekund
- Alla LED på mottagaren börjar blinka
- Sätt telegram Koppla/Ta bort till Ingen kommunikation
- Tryck ner Test knappen på enhetens som ska läggas till
- LED på mottagaren slutar blinka och det är klart
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
% - 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 RCWMv2_1 NAMED "RCW-M temp" TYPEID 11084 IS
PARAMETER
Id : "Adress" INT;
PUBLIC
T1 : "Tempgivare 1" ["°C"]DEC2;
T2 : "Tempgivare 2" ["°C"]DEC2;
T3 : "Tempgivare 3" ["°C"]DEC2;
T4 : "Tempgivare 4" ["°C"]DEC2;
T5 : "Tempgivare 5" ["°C"]DEC2;
T6 : "Tempgivare 6" ["°C"]DEC2;
T7 : "Tempgivare 7" ["°C"]DEC2;
T8 : "Tempgivare 8" ["°C"]DEC2;
T9 : "Tempgivare 9" ["°C"]DEC2;
T10 : "Tempgivare 10" ["°C"]DEC2;
T11 : "Tempgivare 11" ["°C"]DEC2;
T12 : "Tempgivare 12" ["°C"]DEC2;
T13 : "Tempgivare 13" ["°C"]DEC2;
T14 : "Tempgivare 14" ["°C"]DEC2;
T15 : "Tempgivare 15" ["°C"]DEC2;
T16 : "Tempgivare 16" ["°C"]DEC2;
PRIVATE
Tmp;
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadTemp NAMED "Läs temperatur" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); % Modbus kommando för att läsa register kod 04
DATA[2] := RWORD(0); % Start address
DATA[4] := RWORD(16); % Antal register att läsa
ANSWER SIZE 37 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(32); % Antal Bytes
DATA[3] -> RWORD(
IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T1:=Tmp;
);
DATA[5] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T2:=Tmp;
);
DATA[7] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T3:=Tmp;
);
DATA[9] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T4:=Tmp;
);
DATA[11] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T5:=Tmp;
);
DATA[13] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T6:=Tmp;
);
DATA[15] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T7:=Tmp;
);
DATA[17] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T8:=Tmp;
);
DATA[19] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T9:=Tmp;
);
DATA[21] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T10:=Tmp;
);
DATA[23] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T11:=Tmp;
);
DATA[25] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T12:=Tmp;
);
DATA[27] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T13:=Tmp;
);
DATA[29] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T14:=Tmp;
);
DATA[31] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T15:=Tmp;
);
DATA[33] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;
T16:=Tmp;
);
TIMEOUT 300
END;
END;
DEVICETYPE RCWMv2_2 NAMED "RCW-M typ" TYPEID 11085 IS
PARAMETER
Id : "Adress" INT;
PUBLIC
E1 : "Enhet 1 Typ" INT;% 0=Ingen,1=Dörr,2=Närvaro,3=Rumtemp,4=Utetemp,5=Opt,6=Okänd
E2 : "Enhet 2 Typ" INT;
E3 : "Enhet 3 Typ" INT;
E4 : "Enhet 4 Typ" INT;
E5 : "Enhet 5 Typ" INT;
E6 : "Enhet 6 Typ" INT;
E7 : "Enhet 7 Typ" INT;
E8 : "Enhet 8 Typ" INT;
E9 : "Enhet 9 Typ" INT;
E10 : "Enhet 10 Typ" INT;
E11 : "Enhet 11 Typ" INT;
E12 : "Enhet 12 Typ" INT;
E13 : "Enhet 13 Typ" INT;
E14 : "Enhet 14 Typ" INT;
E15 : "Enhet 15 Typ" INT;
E16 : "Enhet 16 Typ" INT;
PRIVATE
Tmp;
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadType NAMED "Läs typ" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); % Modbus kommando för att läsa register kod 04
DATA[2] := RWORD(7000); % Start address
DATA[4] := RWORD(16); % Antal register att läsa
ANSWER SIZE 37 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(32); % Antal Bytes
DATA[3] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E1:=Tmp;);
DATA[5] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E2:=Tmp;);
DATA[7] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E3:=Tmp;);
DATA[9] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E4:=Tmp;);
DATA[11] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E5:=Tmp;);
DATA[13] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E6:=Tmp;);
DATA[15] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E7:=Tmp;);
DATA[17] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E8:=Tmp;);
DATA[19] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E9:=Tmp;);
DATA[21] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E10:=Tmp;);
DATA[23] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E11:=Tmp;);
DATA[25] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E12:=Tmp;);
DATA[27] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E13:=Tmp;);
DATA[29] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E14:=Tmp;);
DATA[31] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E15:=Tmp;);
DATA[33] -> RWORD(Tmp := 6; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ENDIF; E16:=Tmp;);
TIMEOUT 300
END;
END;
DEVICETYPE RCWMv2_3 NAMED "RCW-M signal" TYPEID 11086 IS
PARAMETER
Id : "Adress" INT;
PUBLIC
S1 : "Signal 1" ["dB"]INT;
S2 : "Signal 2" ["dB"]INT;
S3 : "Signal 3" ["dB"]INT;
S4 : "Signal 4" ["dB"]INT;
S5 : "Signal 5" ["dB"]INT;
S6 : "Signal 6" ["dB"]INT;
S7 : "Signal 7" ["dB"]INT;
S8 : "Signal 8" ["dB"]INT;
S9 : "Signal 9" ["dB"]INT;
S10 : "Signal 10" ["dB"]INT;
S11 : "Signal 11" ["dB"]INT;
S12 : "Signal 12" ["dB"]INT;
S13 : "Signal 13" ["dB"]INT;
S14 : "Signal 14" ["dB"]INT;
S15 : "Signal 15" ["dB"]INT;
S16 : "Signal 16" ["dB"]INT;
PRIVATE
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadSignal NAMED "Läs signal" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); % Modbus kommando för att läsa register kod 04
DATA[2] := RWORD(7200); % Start address
DATA[4] := RWORD(16); % Antal register att läsa
ANSWER SIZE 37 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(32); % Antal Bytes
DATA[3] ->RWORD(S1:=DATA;);
DATA[5] ->RWORD(S2:=DATA;);
DATA[7] ->RWORD(S3:=DATA;);
DATA[9] ->RWORD(S4:=DATA;);
DATA[11] ->RWORD(S5:=DATA;);
DATA[13] ->RWORD(S6:=DATA;);
DATA[15] ->RWORD(S7:=DATA;);
DATA[17] ->RWORD(S8:=DATA;);
DATA[19] ->RWORD(S9:=DATA;);
DATA[21] ->RWORD(S10:=DATA;);
DATA[23] ->RWORD(S11:=DATA;);
DATA[25] ->RWORD(S12:=DATA;);
DATA[27] ->RWORD(S13:=DATA;);
DATA[29] ->RWORD(S14:=DATA;);
DATA[31] ->RWORD(S15:=DATA;);
DATA[33] ->RWORD(S16:=DATA;);
TIMEOUT 300
END;
END;
DEVICETYPE RCWMv2_4 NAMED "RCW-M ID" TYPEID 11087 IS
PARAMETER
Id : "Adress" INT;
PUBLIC
V1 : "Enhet 1 ID" [""]INT;
V2 : "Enhet 2 ID" [""]INT;
V3 : "Enhet 3 ID" [""]INT;
V4 : "Enhet 4 ID" [""]INT;
V5 : "Enhet 5 ID" [""]INT;
V6 : "Enhet 6 ID" [""]INT;
V7 : "Enhet 7 ID" [""]INT;
V8 : "Enhet 8 ID" [""]INT;
V9 : "Enhet 9 ID" [""]INT;
V10 : "Enhet 10 ID" [""]INT;
V11 : "Enhet 11 ID" [""]INT;
V12 : "Enhet 12 ID" [""]INT;
V13 : "Enhet 13 ID" [""]INT;
V14 : "Enhet 14 ID" [""]INT;
V15 : "Enhet 15 ID" [""]INT;
V16 : "Enhet 16 ID" [""]INT;
PRIVATE
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadID NAMED "Läs id" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); % Modbus kommando för att läsa register kod 04
DATA[2] := RWORD(7100); % Start address
DATA[4] := RWORD(16); % Antal register att läsa
ANSWER SIZE 37 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(32); % Antal Bytes
DATA[3] -> RWORD(V1 := DATA;);
DATA[5] -> RWORD(V2 := DATA;);
DATA[7] -> RWORD(V3 := DATA;);
DATA[9] -> RWORD(V4 := DATA;);
DATA[11] -> RWORD(V5 := DATA;);
DATA[13] -> RWORD(V6 := DATA;);
DATA[15] -> RWORD(V7 := DATA;);
DATA[17] -> RWORD(V8 := DATA;);
DATA[19] -> RWORD(V9 := DATA;);
DATA[21] -> RWORD(V10 := DATA;);
DATA[23] -> RWORD(V11 := DATA;);
DATA[25] -> RWORD(V12 := DATA;);
DATA[27] -> RWORD(V13 := DATA;);
DATA[29] -> RWORD(V14 := DATA;);
DATA[31] -> RWORD(V15 := DATA;);
DATA[33] -> RWORD(V16 := DATA;);
TIMEOUT 300
END;
END;
DEVICETYPE RCWMv2_5 NAMED "RCW-M battlarm" TYPEID 11088 IS
PARAMETER
Id : "Adress" INT;
PUBLIC
ASum : "Summalarm Batteri" INT;
A1 : "Enhet 1 larm Batteri" INT;
A2 : "Enhet 2 larm Batteri" INT;
A3 : "Enhet 3 larm Batteri" INT;
A4 : "Enhet 4 larm Batteri" INT;
A5 : "Enhet 5 larm Batteri" INT;
A6 : "Enhet 6 larm Batteri" INT;
A7 : "Enhet 7 larm Batteri" INT;
A8 : "Enhet 8 larm Batteri" INT;
A9 : "Enhet 9 larm Batteri" INT;
A10 : "Enhet 10 larm Batteri" INT;
A11 : "Enhet 11 larm Batteri" INT;
A12 : "Enhet 12 larm Batteri" INT;
A13 : "Enhet 13 larm Batteri" INT;
A14 : "Enhet 14 larm Batteri" INT;
A15 : "Enhet 15 larm Batteri" INT;
A16 : "Enhet 16 larm Batteri" INT;
PRIVATE
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadBatry NAMED "Läsblarm" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(02); % Modbus kommando för att läsa register kod 02
DATA[2] := RWORD(100); % Start address
DATA[4] := RWORD(16); % Antal register att läsa
ANSWER SIZE 7 % (Antal register / 8) avrundat uppåt + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(02);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> BYTE(
ASum:=0;
IF DATA>0 THEN ASum:=1; ENDIF;
IF (DATA & 1) THEN A1 := 1; ELSE A1 := 0; ENDIF;
IF (DATA & 2) THEN A2 := 1; ELSE A2 := 0; ENDIF;
IF (DATA & 4) THEN A3 := 1; ELSE A3 := 0; ENDIF;
IF (DATA & 8) THEN A4 := 1; ELSE A4 := 0; ENDIF;
IF (DATA & 16) THEN A5 := 1; ELSE A5 := 0; ENDIF;
IF (DATA & 32) THEN A6 := 1; ELSE A6 := 0; ENDIF;
IF (DATA & 64) THEN A7 := 1; ELSE A7 := 0; ENDIF;
IF (DATA & 128) THEN A8 := 1; ELSE A8 := 0; ENDIF;
);
DATA[4] -> BYTE(
IF DATA>0 THEN ASum:=1; ENDIF;
IF (DATA & 1) THEN A9 := 1; ELSE A9 := 0; ENDIF;
IF (DATA & 2) THEN A10 := 1; ELSE A10 := 0; ENDIF;
IF (DATA & 4) THEN A11 := 1; ELSE A11 := 0; ENDIF;
IF (DATA & 8) THEN A12 := 1; ELSE A12 := 0; ENDIF;
IF (DATA & 16) THEN A13 := 1; ELSE A13 := 0; ENDIF;
IF (DATA & 32) THEN A14 := 1; ELSE A14 := 0; ENDIF;
IF (DATA & 64) THEN A15 := 1; ELSE A15 := 0; ENDIF;
IF (DATA & 128) THEN A16 := 1; ELSE A16 := 0; ENDIF;
);
TIMEOUT 300
END;
END;
DEVICETYPE RCWMv2_6 NAMED "RCW-M sovtid" TYPEID 11089 IS
PARAMETER
Id : "Adress" INT;
PUBLIC
Z1 : "Sovtid 1" ["sek"]INT;
Z2 : "Sovtid 2" ["sek"]INT;
Z3 : "Sovtid 3" ["sek"]INT;
Z4 : "Sovtid 4" ["sek"]INT;
Z5 : "Sovtid 5" ["sek"]INT;
Z6 : "Sovtid 6" ["sek"]INT;
Z7 : "Sovtid 7" ["sek"]INT;
Z8 : "Sovtid 8" ["sek"]INT;
Z9 : "Sovtid 9" ["sek"]INT;
Z10 : "Sovtid 10" ["sek"]INT;
Z11 : "Sovtid 11" ["sek"]INT;
Z12 : "Sovtid 12" ["sek"]INT;
Z13 : "Sovtid 13" ["sek"]INT;
Z14 : "Sovtid 14" ["sek"]INT;
Z15 : "Sovtid 15" ["sek"]INT;
Z16 : "Sovtid 16" ["sek"]INT;
PRIVATE
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadSleep NAMED "LäsSovtid" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := BYTE(3); % Modbus kommando för att läsa register kod 3
DATA[2] := RWORD(100); % Start address
DATA[4] := RWORD(16); % Antal register att läsa
ANSWER SIZE 37 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(3);
DATA[2] = BYTE(32); % Antal Bytes
DATA[3] ->RWORD(Z1:=DATA*10;);
DATA[5] ->RWORD(Z2:=DATA*10;);
DATA[7] ->RWORD(Z3:=DATA*10;);
DATA[9] ->RWORD(Z4:=DATA*10;);
DATA[11] ->RWORD(Z5:=DATA*10;);
DATA[13] ->RWORD(Z6:=DATA*10;);
DATA[15] ->RWORD(Z7:=DATA*10;);
DATA[17] ->RWORD(Z8:=DATA*10;);
DATA[19] ->RWORD(Z9:=DATA*10;);
DATA[21] ->RWORD(Z10:=DATA*10;);
DATA[23] ->RWORD(Z11:=DATA*10;);
DATA[25] ->RWORD(Z12:=DATA*10;);
DATA[27] ->RWORD(Z13:=DATA*10;);
DATA[29] ->RWORD(Z14:=DATA*10;);
DATA[31] ->RWORD(Z15:=DATA*10;);
DATA[33] ->RWORD(Z16:=DATA*10;);
TIMEOUT 300
END;
END;
DEVICETYPE RCWMv2_7 NAMED "RCW-M Närvaro" TYPEID 11090 IS
PARAMETER
Id : "Adress" INT;
PUBLIC
P1 : "Närvaro/Dörr 1" INT;
P2 : "Närvaro/Dörr 2" INT;
P3 : "Närvaro/Dörr 3" INT;
P4 : "Närvaro/Dörr 4" INT;
P5 : "Närvaro/Dörr 5" INT;
P6 : "Närvaro/Dörr 6" INT;
P7 : "Närvaro/Dörr 7" INT;
P8 : "Närvaro/Dörr 8" INT;
P9 : "Närvaro/Dörr 9" INT;
P10 : "Närvaro/Dörr 10" INT;
P11 : "Närvaro/Dörr 11" INT;
P12 : "Närvaro/Dörr 12" INT;
P13 : "Närvaro/Dörr 13" INT;
P14 : "Närvaro/Dörr 14" INT;
P15 : "Närvaro/Dörr 15" INT;
P16 : "Närvaro/Dörr 16" INT;
PRIVATE
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadPD NAMED "Läs När/Dörr" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(02); % Modbus kommando för att läsa register kod 02
DATA[2] := RWORD(0); % Start address
DATA[4] := RWORD(16); % Antal register att läsa
ANSWER SIZE 7 % (Antal register / 8) avrundat uppåt + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(02);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> BYTE(
IF (DATA & 1) THEN P1 := 1; ELSE P1 := 0; ENDIF;
IF (DATA & 2) THEN P2 := 1; ELSE P2 := 0; ENDIF;
IF (DATA & 4) THEN P3 := 1; ELSE P3 := 0; ENDIF;
IF (DATA & 8) THEN P4 := 1; ELSE P4 := 0; ENDIF;
IF (DATA & 16) THEN P5 := 1; ELSE P5 := 0; ENDIF;
IF (DATA & 32) THEN P6 := 1; ELSE P6 := 0; ENDIF;
IF (DATA & 64) THEN P7 := 1; ELSE P7 := 0; ENDIF;
IF (DATA & 128) THEN P8 := 1; ELSE P8 := 0; ENDIF;
);
DATA[4] -> BYTE(
IF (DATA & 1) THEN P9 := 1; ELSE P9 := 0; ENDIF;
IF (DATA & 2) THEN P10 := 1; ELSE P10 := 0; ENDIF;
IF (DATA & 4) THEN P11 := 1; ELSE P11 := 0; ENDIF;
IF (DATA & 8) THEN P12 := 1; ELSE P12 := 0; ENDIF;
IF (DATA & 16) THEN P13 := 1; ELSE P13 := 0; ENDIF;
IF (DATA & 32) THEN P14 := 1; ELSE P14 := 0; ENDIF;
IF (DATA & 64) THEN P15 := 1; ELSE P15 := 0; ENDIF;
IF (DATA & 128) THEN P16 := 1; ELSE P16 := 0; ENDIF;
);
TIMEOUT 300
END;
END;
DEVICETYPE RCWMv2_8 NAMED "RCW-M skriv" TYPEID 11091 IS
PARAMETER
Id : "Adress" INT;
Device : "Välj enhet(1-16)" INT;
Oper : "Operation" INT; % 0=Ingen,1=Koppla,2=Ta bort
LowLimit : "Tempgräns låg" ["°C"]DEC2;
HighLimit : "Tempgräns hög" ["°C"]DEC2;
DeviceZ : "Sovtid enhet(1-16)" INT;
WakeUpTime : "Sovtid att skriva" ["x10 sek"]INT;
PUBLIC
PRIVATE
BAUDRATE 19200;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM WriteProgram NAMED "Koppla/Ta bort" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(10); % Modbus kommando för att skriva flera register
DATA[2] <- RWORD(IF Device<1 OR Device>16 THEN DATA:=7000; ELSE DATA:=6999+Device; ENDIF; ); % Register adress
DATA[4] := RWORD(1); % Antal register
DATA[6] := BYTE(2); % Antal byte
DATA[7] <- RWORD(
IF Device<1 OR Device>16 THEN DATA:=0; ELSIF Oper=1 THEN DATA:=1; ELSIF Oper=2 THEN DATA:=3; ELSE DATA:=0; ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
TIMEOUT 300
END;
TELEGRAM WriteWakeUp NAMED "Ställ sovtid" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(10); % Modbus kommando för att skriva flera register
DATA[2] <- RWORD(IF DeviceZ<1 OR Device>16 THEN DATA:=100; ELSE DATA:=99+DeviceZ; ENDIF; ); % Register adress
DATA[4] := RWORD(1); % Antal register
DATA[6] := BYTE(2); % Antal byte
DATA[7] <- RWORD(
IF Device<1 OR Device>16 THEN DATA:=12; ELSE DATA:=WakeUpTime; ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
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.