Effektstyrning ECL210/310
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 2
- Uppdaterad
- 2018-09-26
- Skapad
- 2018-09-26
- Kategori
- Energioptimering, Lastbalancering, Modbus, Smarta nät, Värme
- Visningar
- 2476
Beskrivning
Skript för effektstyrning av ECL210/310
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
% Danfos Ecl 310 drivrutin
% version 0.9
% Stödjer applikation A266.9, A376,1 och A376.4
%
DEVICETYPE ECL310 NAMED "ECL310" TYPEID 12927 IS
PARAMETER
Id:"Adress" INT;
Scada:"VS01-GT13U" ["°C"]DEC2;
PUBLIC
S1:"VS01-GT3U" ["°C"]DEC2;
V2a:"VS01-GT41" ["°C"]DEC2;
V2b:"VS01-Rumsgivare" ["°C"]DEC2;
S3:"VS01-GT11" ["°C"]DEC2;
S4:"VV01-GT41" ["°C"]DEC2;
V5:"VS01-GT42" ["°C"]DEC2;
S6:"VV01-GT41" ["°C"]DEC2;
V7a:"VS01-GP61" ["bar"]DEC2;
V7b:"VS02-Rumsgivare" ["°C"]DEC2;
M1:"VS01-SV1" ["%"]DEC2;
M2:"VV01-SV1" ["%"]DEC2;
M3:"VS02-SV1" ["%"]DEC2;
B1:"VV01-GT11BV" ["°C"]DEC1;
B2:"VS01-GT3U justerad" ["°C"]DEC1;
B3:"VS01-GT3U använd" ["°C"]DEC2;
aprefix:"Applikation prefix" ["-=0,A=65"]ENUM;
atype:"Applikation typ" INT;
astype:"Applikation subtyp" INT;
aver:"Applikation version" INT;
PRIVATE
hasApp;
S2;
S5;
S7;
savedMax1;
savedMin1;
hasSaved1;
savedMax2;
savedMin2;
hasSaved2;
tmpMax;
tmpMin;
krets;
BAUDRATE 38400;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadSensors NAMED "Läs sensorer" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(10200); % Startadress
DATA[4] := RWORD(10); % Antal register att läsa
ANSWER SIZE 25
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(20); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN S1:=(DATA-65536)/100; ELSE S1:=DATA/100; ENDIF;);
DATA[5] -> RWORD(
IF (DATA>=32768) THEN S2:=(DATA-65536)/100; ELSE S2:=DATA/100; ENDIF;
IF atype=276 THEN V2b:=S2; ELSE V2a:=S2; ENDIF;
);
DATA[7] -> RWORD(IF (DATA>=32768) THEN S3:=(DATA-65536)/100; ELSE S3:=DATA/100; ENDIF;);
DATA[9] -> RWORD(IF (DATA>=32768) THEN S4:=(DATA-65536)/100; ELSE S4:=DATA/100; ENDIF;);
DATA[11] -> RWORD(
IF (DATA>=32768) THEN S5:=(DATA-65536)/100; ELSE S5:=DATA/100; ENDIF;
IF atype=276 THEN V2a:=S5; ELSE V5:=S5; ENDIF;
);
DATA[13] -> RWORD(IF (DATA>=32768) THEN S6:=(DATA-65536)/100; ELSE S6:=DATA/100; ENDIF;);
DATA[15] -> RWORD(
IF atype=276 THEN
IF (DATA>=32768) THEN V7b:=(DATA-65536)/100; ELSE V7b:=DATA/100; ENDIF;
ENDIF;
);
TIMEOUT 800
END;
TELEGRAM ReadVS01P NAMED "Läs SV01 tryck" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(11599); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(V7a:= DATA/100;);
TIMEOUT 800
END;
TELEGRAM ReadTriac NAMED "Läs ställdon" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(3994); % Startadress
DATA[4] := RWORD(3); % Antal register att läsa
ANSWER SIZE 11
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(6); % Antal Bytes
DATA[3] -> RWORD(M1:=DATA/100;);
DATA[5] -> RWORD(M2:=DATA/100;);
DATA[7] -> RWORD(M3:=DATA/100;);
TIMEOUT 800
END;
TELEGRAM ReadSP NAMED "Läs börvärde" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(12189); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(B1:=DATA/10;);
TIMEOUT 800
END;
TELEGRAM ReadSCADA NAMED "Läs SCADA" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(10399); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN B2:=(DATA-65536)/100; ELSE B2:=DATA/100; ENDIF;);
TIMEOUT 800
END;
TELEGRAM ReadUsed1 NAMED "Läs använd temp krets 1" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(11200); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN B3:=(DATA-65536)/100; ELSE B3:=DATA/100; ENDIF;);
TIMEOUT 800
END;
TELEGRAM WriteSCADA NAMED "Skriv SCADA" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(6); % Modbus kommando för att skriva ett register
DATA[2] := RWORD(10399); % Register adress
DATA[4] <- RWORD(IF Scada<0 THEN DATA:=65536+(Scada*100); ELSE DATA:=Scada*100; ENDIF;);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = BYTE(06);
TIMEOUT 300
END;
TELEGRAM ReadApp NAMED "Läs Applikation" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(2059); % Startadress
DATA[4] := RWORD(4); % Antal register att läsa
ANSWER SIZE 13
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(8); % Antal Bytes
DATA[3] -> RWORD(aprefix:=DATA;);
DATA[5] -> RWORD(atype:=DATA;);
DATA[7] -> RWORD(astype:=DATA;);
DATA[9] -> RWORD(aver:=DATA;);
TIMEOUT 800
END;
TELEGRAM ReadRoom NAMED "Läs rumskomp" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] <- RWORD(DATA:=10181+(krets*100);); % Startadress
DATA[4] := RWORD(2); % Antal register att läsa
ANSWER SIZE 9
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(4); % Antal Bytes
DATA[3] -> RWORD(tmpMax:=DATA;);
DATA[5] -> RWORD(tmpMin:=DATA;);
TIMEOUT 800
END;
TELEGRAM WriteRoom NAMED "Skriv rumskomp" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(10); % Modbus kommando för att skriva flera register
DATA[2] <- RWORD(DATA:=10181+(krets*100);); % Register adress
DATA[4] := RWORD(2); % Antal register
DATA[6] := BYTE(4); % Antal byte
DATA[7] <- RWORD(DATA:=tmpMax;);
DATA[9] <- RWORD(DATA:=tmpMin;);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
TIMEOUT 300
END;
SCHEDULER BEGIN
IF hasApp=0 THEN
TRANSMIT(ReadApp);
hasApp:=1;
ELSE
IF atype=276 THEN
IF (S2<>B3) THEN
IF hasSaved1=0 THEN
krets:=1;
TRANSMIT(ReadRoom);
savedMax1:=tmpMax;
savedMin1:=tmpMin;
hasSaved1:=1;
ENDIF;
IF hasSaved2=0 THEN
krets:=2;
TRANSMIT(ReadRoom);
savedMax2:=tmpMax;
savedMin2:=tmpMin;
hasSaved2:=1;
ENDIF;
ELSE
IF hasSaved1=1 THEN
krets:=1;
tmpMax:=savedMax1;
tmpMin:=savedMin1;
TRANSMIT(WriteRoom);
hasSaved1:=0;
ENDIF;
IF hasSaved2=1 THEN
krets:=2;
tmpMax:=savedMax2;
tmpMin:=savedMin2;
TRANSMIT(WriteRoom);
hasSaved2:=0;
ENDIF;
ENDIF;
ENDIF;
DEFAULT(ReadApp);
DEFAULT(ReadSensors);
DEFAULT(ReadVS01P);
DEFAULT(ReadTriac);
DEFAULT(ReadSP);
DEFAULT(ReadSCADA);
DEFAULT(ReadUsed1);
DEFAULT(WriteSCADA);
ENDIF;
END;
END;
% version 0.9
% Stödjer applikation A266.9, A376,1 och A376.4
%
DEVICETYPE ECL310 NAMED "ECL310" TYPEID 12927 IS
PARAMETER
Id:"Adress" INT;
Scada:"VS01-GT13U" ["°C"]DEC2;
PUBLIC
S1:"VS01-GT3U" ["°C"]DEC2;
V2a:"VS01-GT41" ["°C"]DEC2;
V2b:"VS01-Rumsgivare" ["°C"]DEC2;
S3:"VS01-GT11" ["°C"]DEC2;
S4:"VV01-GT41" ["°C"]DEC2;
V5:"VS01-GT42" ["°C"]DEC2;
S6:"VV01-GT41" ["°C"]DEC2;
V7a:"VS01-GP61" ["bar"]DEC2;
V7b:"VS02-Rumsgivare" ["°C"]DEC2;
M1:"VS01-SV1" ["%"]DEC2;
M2:"VV01-SV1" ["%"]DEC2;
M3:"VS02-SV1" ["%"]DEC2;
B1:"VV01-GT11BV" ["°C"]DEC1;
B2:"VS01-GT3U justerad" ["°C"]DEC1;
B3:"VS01-GT3U använd" ["°C"]DEC2;
aprefix:"Applikation prefix" ["-=0,A=65"]ENUM;
atype:"Applikation typ" INT;
astype:"Applikation subtyp" INT;
aver:"Applikation version" INT;
PRIVATE
hasApp;
S2;
S5;
S7;
savedMax1;
savedMin1;
hasSaved1;
savedMax2;
savedMin2;
hasSaved2;
tmpMax;
tmpMin;
krets;
BAUDRATE 38400;
PARITY EVEN;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadSensors NAMED "Läs sensorer" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(10200); % Startadress
DATA[4] := RWORD(10); % Antal register att läsa
ANSWER SIZE 25
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(20); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN S1:=(DATA-65536)/100; ELSE S1:=DATA/100; ENDIF;);
DATA[5] -> RWORD(
IF (DATA>=32768) THEN S2:=(DATA-65536)/100; ELSE S2:=DATA/100; ENDIF;
IF atype=276 THEN V2b:=S2; ELSE V2a:=S2; ENDIF;
);
DATA[7] -> RWORD(IF (DATA>=32768) THEN S3:=(DATA-65536)/100; ELSE S3:=DATA/100; ENDIF;);
DATA[9] -> RWORD(IF (DATA>=32768) THEN S4:=(DATA-65536)/100; ELSE S4:=DATA/100; ENDIF;);
DATA[11] -> RWORD(
IF (DATA>=32768) THEN S5:=(DATA-65536)/100; ELSE S5:=DATA/100; ENDIF;
IF atype=276 THEN V2a:=S5; ELSE V5:=S5; ENDIF;
);
DATA[13] -> RWORD(IF (DATA>=32768) THEN S6:=(DATA-65536)/100; ELSE S6:=DATA/100; ENDIF;);
DATA[15] -> RWORD(
IF atype=276 THEN
IF (DATA>=32768) THEN V7b:=(DATA-65536)/100; ELSE V7b:=DATA/100; ENDIF;
ENDIF;
);
TIMEOUT 800
END;
TELEGRAM ReadVS01P NAMED "Läs SV01 tryck" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(11599); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(V7a:= DATA/100;);
TIMEOUT 800
END;
TELEGRAM ReadTriac NAMED "Läs ställdon" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(3994); % Startadress
DATA[4] := RWORD(3); % Antal register att läsa
ANSWER SIZE 11
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(6); % Antal Bytes
DATA[3] -> RWORD(M1:=DATA/100;);
DATA[5] -> RWORD(M2:=DATA/100;);
DATA[7] -> RWORD(M3:=DATA/100;);
TIMEOUT 800
END;
TELEGRAM ReadSP NAMED "Läs börvärde" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(12189); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(B1:=DATA/10;);
TIMEOUT 800
END;
TELEGRAM ReadSCADA NAMED "Läs SCADA" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(10399); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN B2:=(DATA-65536)/100; ELSE B2:=DATA/100; ENDIF;);
TIMEOUT 800
END;
TELEGRAM ReadUsed1 NAMED "Läs använd temp krets 1" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(11200); % Startadress
DATA[4] := RWORD(1); % Antal register att läsa
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(2); % Antal Bytes
DATA[3] -> RWORD(IF (DATA>=32768) THEN B3:=(DATA-65536)/100; ELSE B3:=DATA/100; ENDIF;);
TIMEOUT 800
END;
TELEGRAM WriteSCADA NAMED "Skriv SCADA" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(6); % Modbus kommando för att skriva ett register
DATA[2] := RWORD(10399); % Register adress
DATA[4] <- RWORD(IF Scada<0 THEN DATA:=65536+(Scada*100); ELSE DATA:=Scada*100; ENDIF;);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = BYTE(06);
TIMEOUT 300
END;
TELEGRAM ReadApp NAMED "Läs Applikation" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] := RWORD(2059); % Startadress
DATA[4] := RWORD(4); % Antal register att läsa
ANSWER SIZE 13
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(8); % Antal Bytes
DATA[3] -> RWORD(aprefix:=DATA;);
DATA[5] -> RWORD(atype:=DATA;);
DATA[7] -> RWORD(astype:=DATA;);
DATA[9] -> RWORD(aver:=DATA;);
TIMEOUT 800
END;
TELEGRAM ReadRoom NAMED "Läs rumskomp" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(03); % Modbus kommando för att läsa input register
DATA[2] <- RWORD(DATA:=10181+(krets*100);); % Startadress
DATA[4] := RWORD(2); % Antal register att läsa
ANSWER SIZE 9
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[2] = BYTE(4); % Antal Bytes
DATA[3] -> RWORD(tmpMax:=DATA;);
DATA[5] -> RWORD(tmpMin:=DATA;);
TIMEOUT 800
END;
TELEGRAM WriteRoom NAMED "Skriv rumskomp" IS
QUESTION
DATA[0] := BYTE(Id); % Enhetens Modbus adress
DATA[1] := HEX(10); % Modbus kommando för att skriva flera register
DATA[2] <- RWORD(DATA:=10181+(krets*100);); % Register adress
DATA[4] := RWORD(2); % Antal register
DATA[6] := BYTE(4); % Antal byte
DATA[7] <- RWORD(DATA:=tmpMax;);
DATA[9] <- RWORD(DATA:=tmpMin;);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
TIMEOUT 300
END;
SCHEDULER BEGIN
IF hasApp=0 THEN
TRANSMIT(ReadApp);
hasApp:=1;
ELSE
IF atype=276 THEN
IF (S2<>B3) THEN
IF hasSaved1=0 THEN
krets:=1;
TRANSMIT(ReadRoom);
savedMax1:=tmpMax;
savedMin1:=tmpMin;
hasSaved1:=1;
ENDIF;
IF hasSaved2=0 THEN
krets:=2;
TRANSMIT(ReadRoom);
savedMax2:=tmpMax;
savedMin2:=tmpMin;
hasSaved2:=1;
ENDIF;
ELSE
IF hasSaved1=1 THEN
krets:=1;
tmpMax:=savedMax1;
tmpMin:=savedMin1;
TRANSMIT(WriteRoom);
hasSaved1:=0;
ENDIF;
IF hasSaved2=1 THEN
krets:=2;
tmpMax:=savedMax2;
tmpMin:=savedMin2;
TRANSMIT(WriteRoom);
hasSaved2:=0;
ENDIF;
ENDIF;
ENDIF;
DEFAULT(ReadApp);
DEFAULT(ReadSensors);
DEFAULT(ReadVS01P);
DEFAULT(ReadTriac);
DEFAULT(ReadSP);
DEFAULT(ReadSCADA);
DEFAULT(ReadUsed1);
DEFAULT(WriteSCADA);
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.