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
2083

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;

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.