Effektstyrning av Regin Corrigo E
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 1
- Uppdaterad
- 2018-09-26
- Skapad
- 2018-09-26
- Kategori
- Lastbalancering, Modbus, Smarta nät, Värme
- Visningar
- 2187
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
% 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 ReginCorrigo NAMED "Regin Corrigo E" TYPEID 12928 IS
PARAMETER
Id : "Adress" INT;
wV12 : "VV01-GT11BV" ["°C"]DEC1;
wV15 : "VV02-GT11BV" ["°C"]DEC1;
wFS1 : "VS01-GT11FS" ["°C"]DEC1;
wFS2 : "VS02-GT11FS" ["°C"]DEC1;
wFS3 : "VS03-GT11FS" ["°C"]DEC1;
PUBLIC
V1 : "VS01-GT3U" ["°C"]DEC1;
V2 : "VS01-GT11" ["°C"]DEC1;
FS1 : "VS01-GT11FS" ["°C"]DEC1;
V3 : "VS01-GT41" ["°C"]DEC1;
V4 : "VS01-SV11" ["%"]DEC1;
V5 : "VS02-GT11" ["°C"]DEC1;
FS2 : "VS02-GT11FS" ["°C"]DEC1;
V6 : "VS02-GT41" ["°C"]DEC1;
V7 : "VS02-SV11" ["%"]DEC1;
V8 : "VS03-GT11" ["°C"]DEC1;
FS3 : "VS03-GT11FS" ["°C"]DEC1;
V9 : "VS03-GT41" ["°C"]DEC1;
V10 : "VS03-SV11" ["%"]DEC1;
V11 : "VV01-GT11" ["°C"]DEC1;
V12 : "VV01-GT11BV" ["°C"]DEC1;
V13 : "VV01-SV11" ["%"]DEC1;
V14 : "VV02-GT11" ["°C"]DEC1;
V15 : "VV02-GT11BV" ["°C"]DEC1;
V16 : "VV02-SV11" ["%"]DEC1;
PRIVATE
cFS;
cwFS;
cBV;
cwBV;
init;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadTemp NAMED "Läs temperaturer" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); %
DATA[2] := RWORD(0); % Start address
DATA[4] := RWORD(14); % Antal register att läsa
ANSWER SIZE 33 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(28); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN V1:=(DATA-65536)/10; ELSE V1:=DATA/10; ENDIF;); %1
DATA[5] -> RWORD(IF (DATA>=32768) THEN V2:=(DATA-65536)/10; ELSE V2:=DATA/10; ENDIF;); %2 VS01-GT11
DATA[11] -> RWORD(IF (DATA>=32768) THEN V3:=(DATA-65536)/10; ELSE V3:=DATA/10; ENDIF;); %5 VS01-GT41
DATA[13] -> RWORD(IF (DATA>=32768) THEN V5:=(DATA-65536)/10; ELSE V5:=DATA/10; ENDIF;); %6 VS02-GT11
DATA[19] -> RWORD(IF (DATA>=32768) THEN V6:=(DATA-65536)/10; ELSE V6:=DATA/10; ENDIF;); %9 VS02-GT41
DATA[21] -> RWORD(IF (DATA>=32768) THEN V8:=(DATA-65536)/10; ELSE V8:=DATA/10; ENDIF;); %10 VS03-GT11
DATA[27] -> RWORD(IF (DATA>=32768) THEN V9:=(DATA-65536)/10; ELSE V9:=DATA/10; ENDIF;); %13 VS03-GT41
DATA[29] -> RWORD(IF (DATA>=32768) THEN V11:=(DATA-65536)/10; ELSE V11:=DATA/10; ENDIF;); %14 VV01-GT11
DATA[31] -> RWORD(IF (DATA>=32768) THEN V14:=(DATA-65536)/10; ELSE V14:=DATA/10; ENDIF;); %15 VV02-GT11
TIMEOUT 2000
END;
TELEGRAM ReadTri NAMED "Läs styrdon" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); %
DATA[2] := RWORD(159); % Start address
DATA[4] := RWORD(5); % Antal register att läsa
ANSWER SIZE 15 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(10); % Antal Bytes
DATA[3] -> RWORD(V4:=DATA/10;); %160 VS01-SV11
DATA[5] -> RWORD(V7 := DATA/10;); %161 VS02-SV11
DATA[7] -> RWORD(V10 := DATA/10;); %162 VS03-SV11
DATA[9] -> RWORD(V13 := DATA/10;); %163 VV01-SV11
DATA[11] -> RWORD(V16 := DATA/10;); %164 VV02-SV11
TIMEOUT 2000
END;
TELEGRAM ReadHWSP NAMED "Läs VV börvärde" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); %
DATA[2] := RWORD(51); % Start address
DATA[4] := RWORD(2); % Antal register att läsa
ANSWER SIZE 9 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(03);
DATA[2] = BYTE(4); % Antal Bytes
DATA[3] -> RWORD(V12:=DATA/10;); %52 VV01-GT11BV
DATA[5] -> RWORD(V15 := DATA/10;); %53 VV02-GT11BV
TIMEOUT 2000
END;
TELEGRAM WriteHWSP NAMED "Skriv VV börvärde" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(10); %
DATA[2] := RWORD(51); % Start address
DATA[4] := RWORD(2); % Antal register att skriva
DATA[6] := BYTE(4); % Antal byte som följer
DATA[7] <- RWORD(DATA:= wV12*10;);
DATA[9] <- RWORD(DATA:= wV15*10;);
ANSWER SIZE 8 %
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
TIMEOUT 2000
END;
TELEGRAM ReadTrans NAMED "Läs kurv FS" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); %
DATA[2] <- RWORD(
IF cFS>2 THEN cFS:=0; ENDIF;
DATA:=534+cFS;
); % Start 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 cFS=0 THEN IF (DATA>=32768) THEN FS1:=(DATA-65536)/10; ELSE FS1:=DATA/10; ENDIF;
ELSIF cFS=1 THEN IF (DATA>=32768) THEN FS2:=(DATA-65536)/10; ELSE FS2:=DATA/10; ENDIF;
ELSIF cFS=2 THEN IF (DATA>=32768) THEN FS3:=(DATA-65536)/10; ELSE FS3:=DATA/10; ENDIF;
ENDIF;
cFS:=cFS+1;
);
TIMEOUT 2000
END;
TELEGRAM WriteTrans NAMED "Skriv kurv FS" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(6); %
DATA[2] <- RWORD(
IF cwFS>2 THEN cwFS:=0; ENDIF;
DATA:=534+cwFS;
); % Start address
DATA[4] <- RWORD(
IF cwFS=0 THEN IF wFS1<0 THEN DATA:=65536+(wFS1*10); ELSE DATA:=wFS1*10; ENDIF;
ELSIF cwFS=1 THEN IF wFS2<0 THEN DATA:=65536+(wFS2*10); ELSE DATA:=wFS2*10; ENDIF;
ELSIF cwFS=2 THEN IF wFS3<0 THEN DATA:=65536+(wFS3*10); ELSE DATA:=wFS3*10; ENDIF;
ENDIF;
cwFS:=cwFS+1;
);
ANSWER SIZE 8 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(6);
TIMEOUT 2000
END;
SCHEDULER BEGIN
DEFAULT(ReadTemp);
DEFAULT(ReadTri);
IF init=0 THEN
cFS:=0;
TRANSMIT(ReadTrans);
cFS:=1;
TRANSMIT(ReadTrans);
cFS:=2;
TRANSMIT(ReadTrans);
TRANSMIT(ReadHWSP);
init:=1;
ELSE
IF wFS1<>FS1 THEN cwFS:=0; TRANSMIT(WriteTrans); cFS:=0; TRANSMIT(ReadTrans);ENDIF;
IF wFS2<>FS2 THEN cwFS:=1; TRANSMIT(WriteTrans); cFS:=1; TRANSMIT(ReadTrans);ENDIF;
IF wFS3<>FS3 THEN cwFS:=2; TRANSMIT(WriteTrans); cFS:=2; TRANSMIT(ReadTrans);ENDIF;
IF wV12<>V12 OR wV15<>V15 THEN TRANSMIT(WriteHWSP); ENDIF;
TRANSMIT(ReadHWSP);
ENDIF;
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 ReginCorrigo NAMED "Regin Corrigo E" TYPEID 12928 IS
PARAMETER
Id : "Adress" INT;
wV12 : "VV01-GT11BV" ["°C"]DEC1;
wV15 : "VV02-GT11BV" ["°C"]DEC1;
wFS1 : "VS01-GT11FS" ["°C"]DEC1;
wFS2 : "VS02-GT11FS" ["°C"]DEC1;
wFS3 : "VS03-GT11FS" ["°C"]DEC1;
PUBLIC
V1 : "VS01-GT3U" ["°C"]DEC1;
V2 : "VS01-GT11" ["°C"]DEC1;
FS1 : "VS01-GT11FS" ["°C"]DEC1;
V3 : "VS01-GT41" ["°C"]DEC1;
V4 : "VS01-SV11" ["%"]DEC1;
V5 : "VS02-GT11" ["°C"]DEC1;
FS2 : "VS02-GT11FS" ["°C"]DEC1;
V6 : "VS02-GT41" ["°C"]DEC1;
V7 : "VS02-SV11" ["%"]DEC1;
V8 : "VS03-GT11" ["°C"]DEC1;
FS3 : "VS03-GT11FS" ["°C"]DEC1;
V9 : "VS03-GT41" ["°C"]DEC1;
V10 : "VS03-SV11" ["%"]DEC1;
V11 : "VV01-GT11" ["°C"]DEC1;
V12 : "VV01-GT11BV" ["°C"]DEC1;
V13 : "VV01-SV11" ["%"]DEC1;
V14 : "VV02-GT11" ["°C"]DEC1;
V15 : "VV02-GT11BV" ["°C"]DEC1;
V16 : "VV02-SV11" ["%"]DEC1;
PRIVATE
cFS;
cwFS;
cBV;
cwBV;
init;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadTemp NAMED "Läs temperaturer" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); %
DATA[2] := RWORD(0); % Start address
DATA[4] := RWORD(14); % Antal register att läsa
ANSWER SIZE 33 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(28); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN V1:=(DATA-65536)/10; ELSE V1:=DATA/10; ENDIF;); %1
DATA[5] -> RWORD(IF (DATA>=32768) THEN V2:=(DATA-65536)/10; ELSE V2:=DATA/10; ENDIF;); %2 VS01-GT11
DATA[11] -> RWORD(IF (DATA>=32768) THEN V3:=(DATA-65536)/10; ELSE V3:=DATA/10; ENDIF;); %5 VS01-GT41
DATA[13] -> RWORD(IF (DATA>=32768) THEN V5:=(DATA-65536)/10; ELSE V5:=DATA/10; ENDIF;); %6 VS02-GT11
DATA[19] -> RWORD(IF (DATA>=32768) THEN V6:=(DATA-65536)/10; ELSE V6:=DATA/10; ENDIF;); %9 VS02-GT41
DATA[21] -> RWORD(IF (DATA>=32768) THEN V8:=(DATA-65536)/10; ELSE V8:=DATA/10; ENDIF;); %10 VS03-GT11
DATA[27] -> RWORD(IF (DATA>=32768) THEN V9:=(DATA-65536)/10; ELSE V9:=DATA/10; ENDIF;); %13 VS03-GT41
DATA[29] -> RWORD(IF (DATA>=32768) THEN V11:=(DATA-65536)/10; ELSE V11:=DATA/10; ENDIF;); %14 VV01-GT11
DATA[31] -> RWORD(IF (DATA>=32768) THEN V14:=(DATA-65536)/10; ELSE V14:=DATA/10; ENDIF;); %15 VV02-GT11
TIMEOUT 2000
END;
TELEGRAM ReadTri NAMED "Läs styrdon" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(04); %
DATA[2] := RWORD(159); % Start address
DATA[4] := RWORD(5); % Antal register att läsa
ANSWER SIZE 15 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(04);
DATA[2] = BYTE(10); % Antal Bytes
DATA[3] -> RWORD(V4:=DATA/10;); %160 VS01-SV11
DATA[5] -> RWORD(V7 := DATA/10;); %161 VS02-SV11
DATA[7] -> RWORD(V10 := DATA/10;); %162 VS03-SV11
DATA[9] -> RWORD(V13 := DATA/10;); %163 VV01-SV11
DATA[11] -> RWORD(V16 := DATA/10;); %164 VV02-SV11
TIMEOUT 2000
END;
TELEGRAM ReadHWSP NAMED "Läs VV börvärde" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); %
DATA[2] := RWORD(51); % Start address
DATA[4] := RWORD(2); % Antal register att läsa
ANSWER SIZE 9 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = BYTE(03);
DATA[2] = BYTE(4); % Antal Bytes
DATA[3] -> RWORD(V12:=DATA/10;); %52 VV01-GT11BV
DATA[5] -> RWORD(V15 := DATA/10;); %53 VV02-GT11BV
TIMEOUT 2000
END;
TELEGRAM WriteHWSP NAMED "Skriv VV börvärde" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(10); %
DATA[2] := RWORD(51); % Start address
DATA[4] := RWORD(2); % Antal register att skriva
DATA[6] := BYTE(4); % Antal byte som följer
DATA[7] <- RWORD(DATA:= wV12*10;);
DATA[9] <- RWORD(DATA:= wV15*10;);
ANSWER SIZE 8 %
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
TIMEOUT 2000
END;
TELEGRAM ReadTrans NAMED "Läs kurv FS" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); %
DATA[2] <- RWORD(
IF cFS>2 THEN cFS:=0; ENDIF;
DATA:=534+cFS;
); % Start 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 cFS=0 THEN IF (DATA>=32768) THEN FS1:=(DATA-65536)/10; ELSE FS1:=DATA/10; ENDIF;
ELSIF cFS=1 THEN IF (DATA>=32768) THEN FS2:=(DATA-65536)/10; ELSE FS2:=DATA/10; ENDIF;
ELSIF cFS=2 THEN IF (DATA>=32768) THEN FS3:=(DATA-65536)/10; ELSE FS3:=DATA/10; ENDIF;
ENDIF;
cFS:=cFS+1;
);
TIMEOUT 2000
END;
TELEGRAM WriteTrans NAMED "Skriv kurv FS" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(6); %
DATA[2] <- RWORD(
IF cwFS>2 THEN cwFS:=0; ENDIF;
DATA:=534+cwFS;
); % Start address
DATA[4] <- RWORD(
IF cwFS=0 THEN IF wFS1<0 THEN DATA:=65536+(wFS1*10); ELSE DATA:=wFS1*10; ENDIF;
ELSIF cwFS=1 THEN IF wFS2<0 THEN DATA:=65536+(wFS2*10); ELSE DATA:=wFS2*10; ENDIF;
ELSIF cwFS=2 THEN IF wFS3<0 THEN DATA:=65536+(wFS3*10); ELSE DATA:=wFS3*10; ENDIF;
ENDIF;
cwFS:=cwFS+1;
);
ANSWER SIZE 8 % (Antal register * 2) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(6);
TIMEOUT 2000
END;
SCHEDULER BEGIN
DEFAULT(ReadTemp);
DEFAULT(ReadTri);
IF init=0 THEN
cFS:=0;
TRANSMIT(ReadTrans);
cFS:=1;
TRANSMIT(ReadTrans);
cFS:=2;
TRANSMIT(ReadTrans);
TRANSMIT(ReadHWSP);
init:=1;
ELSE
IF wFS1<>FS1 THEN cwFS:=0; TRANSMIT(WriteTrans); cFS:=0; TRANSMIT(ReadTrans);ENDIF;
IF wFS2<>FS2 THEN cwFS:=1; TRANSMIT(WriteTrans); cFS:=1; TRANSMIT(ReadTrans);ENDIF;
IF wFS3<>FS3 THEN cwFS:=2; TRANSMIT(WriteTrans); cFS:=2; TRANSMIT(ReadTrans);ENDIF;
IF wV12<>V12 OR wV15<>V15 THEN TRANSMIT(WriteHWSP); ENDIF;
TRANSMIT(ReadHWSP);
ENDIF;
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.