CTC Echo Zenit i550

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
2
Uppdaterad
2018-11-21
Skapad
2016-09-06
Kategori
Modbus, Värme
Visningar
3105

Beskrivning

Detta skript är skapat för IMSE UltraBase30/IPX3

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 EchoZeniti550 NAMED "EchoZeniti550" TYPEID 10958 IS

 PARAMETER
  Id       : "Adress" [""]INT;
  V25 : "wRad sys1 adj" [" ºC"]DEC1;

 PUBLIC
  V1 : "Brine temp out" [""]DEC1;
  V2 : "Brine temp in" [""]DEC1;
  V3 : "Flow temp in" [""]DEC1;
  V4 : "Outside temp" [""]DEC1;
  V5 : "Flow temp out" [""]DEC1;
  V6 : "High pressure" [""]DEC1;
  V7 : "Low pressure" [""]DEC1;
  V8 : "Charge pump value" ["%"]DEC1;
  V9 : "Fan brine pump value" [""]DEC1;
  V10 : "HPstatus" [""]; % 0 = Compressor_off_start_delay, 1 =Compressor_off_redy_to_start, 2 = Compressor_wait_until_flow, 3 = Comperssor_on_heating, 4 = Defrost_active, 5 = Comperssor_on_cooling, 6 = Compressor_off_blocked, 7 = Compressor_off_alarm, 8 = Function_test
  V11 : "Compressor blocks" [""];
  V12 : "Alarm1" [""];
  V13 : "Alarm2" [""];
  V14 : "Alarm3" [""];
  V15 : "Alarm4" [""];
  V16 : "Compressor operating hours" ["h"];
  V18 : "energy heat counter" ["kWh"];
  V20 : "Rad sys 1 heat water SP temp" [""]DEC1;
  V21 : "Tank heat water SP" [""]DEC1;
  V22 : "Holiday period" [""]INT;
  V23 : "Hot water temp mode" [""]INT;
  V24 : "Rad sys1 adj " [" ºC"]DEC1;

  A1 : "Alarm Pump overload" [""]INT;
  A2 : "Alarm System pump overload" [""]INT;
  A3 : "Alarm Compressor overload" [""]INT;
  A4 : "Alarm Risk of freezing" [""]INT;
  A5 : "Alarm Low brine flow" [""]INT;
  A6 : "Alarm Low brine temp" [""]INT;

  A7 : "Alarm low pressure diff" [""]INT;
  A8 : "Alarm sensor brine out" [""]INT;
  A9 : "Alarm sensor brine in" [""]INT;
  A10 : "Alarm sensor heat pump in" [""]INT;
  A11 : "Alarm sensor outdoor" [""]INT;
  A12 : "Alarm sensor heat pump out" [""]INT;
  A13 : "Alarm sensor discharge" [""]INT;
  A14 : "Alarm sensor suction gas" [""]INT;
  A15 : "Alarm sensor high pressure" [""]INT;
  A16 : "Alarm sensor low pressure" [""]INT;
  A17 : "Alarm fan" [""]INT;
  A18 : "Alarm 4 way valve" [""]INT;

  A19 : "Alarm Compressor inverter" [""]INT;
  A20 : "Alarm EVO off" [""]INT;
  
  A21 : "Alarm Compressor high current" [""]INT;
  A22 : "Alarm Compressor low current" [""]INT;
  A23 : "Alarm Phase 1 missing" [""]INT;
  A24 : "Alarm Phase 2 missing" [""]INT;
  A25 : "Alarm Phase 3 missing" [""]INT;
  A26 : "Alarm Phase sequence error" [""]INT;
  A27 : "Alarm Communication error softstarter" [""]INT;
  
 PRIVATE
  count3;
  count6;
  tmp;

 BAUDRATE 9600;
 CHECKSUM MODBUS SWAPPED;

 TELEGRAM Read3 NAMED "Read 3" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(03); % Modbus kommando för att läsa register
   DATA[2] <- RWORD(
    IF(count3>23) THEN count3 := 0; ENDIF;
    IF (count3=0) THEN tmp := 433;
    ELSIF (count3=1) THEN tmp := 434;
    ELSIF (count3=2) THEN tmp := 435;
    ELSIF (count3=3) THEN tmp := 436;
    ELSIF (count3=4) THEN tmp := 437;
    ELSIF (count3=5) THEN tmp := 440;
    ELSIF (count3=6) THEN tmp := 441;
    ELSIF (count3=7) THEN tmp := 451;
    ELSIF (count3=8) THEN tmp := 452;
    ELSIF (count3=9) THEN tmp := 457;
    ELSIF (count3=10) THEN tmp := 458;
    ELSIF (count3=11) THEN tmp := 459;
    ELSIF (count3=12) THEN tmp := 460;
    ELSIF (count3=13) THEN tmp := 461;
    ELSIF (count3=14) THEN tmp := 462;
    ELSIF (count3=15) THEN tmp := 466;
    ELSIF (count3=16) THEN tmp := 467;
    ELSIF (count3=17) THEN tmp := 470;
    ELSIF (count3=18) THEN tmp := 471;
    ELSIF (count3=19) THEN tmp := 2025;
    ELSIF (count3=20) THEN tmp := 2030;
    ELSIF (count3=21) THEN tmp := 2889;
    ELSIF (count3=22) THEN tmp := 2891;
    ELSIF (count3=23) THEN tmp := 2904;
    ENDIF;
    DATA:= tmp;
   );
   DATA[4] := RWORD(01);
  ANSWER SIZE 7   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(03);
   DATA[3] -> RWORD(
    IF (count3=0) THEN IF (DATA>=32768) THEN V1:=(DATA-65536)/10; ELSE V1:=DATA/10; ENDIF;
    ELSIF (count3=1) THEN IF (DATA>=32768) THEN V2:=(DATA-65536)/10; ELSE V2:=DATA/10; ENDIF;
    ELSIF (count3=2) THEN IF (DATA>=32768) THEN V3:=(DATA-65536)/10; ELSE V3:=DATA/10; ENDIF;
    ELSIF (count3=3) THEN IF (DATA>=32768) THEN V4:=(DATA-65536)/10; ELSE V4:=DATA/10; ENDIF;
    ELSIF (count3=4) THEN IF (DATA>=32768) THEN V5:=(DATA-65536)/10; ELSE V5:=DATA/10; ENDIF;
    ELSIF (count3=5) THEN V6 := DATA/10;
    ELSIF (count3=6) THEN V7 := DATA/10;
    ELSIF (count3=7) THEN V8 := DATA/10;
    ELSIF (count3=8) THEN V9 := DATA/10;
    ELSIF (count3=9) THEN V10 := DATA;
    ELSIF (count3=10) THEN V11 := DATA;
    ELSIF (count3=11) THEN V12 := DATA;
 IF(V12 & 8) THEN A1:=1; ELSE A1:=0; ENDIF;
 IF(V12 & 16) THEN A2:=1; ELSE A2:=0; ENDIF;
 IF(V12 & 32) THEN A3:=1; ELSE A3:=0; ENDIF;
 IF(V12 & 128) THEN A4:=1; ELSE A4:=0; ENDIF;
 IF(V12 & 2048) THEN A5:=1; ELSE A5:=0; ENDIF;
 IF(V12 & 4096) THEN A6:=1; ELSE A6:=0; ENDIF;
 IF(V12 & 8192) THEN A7:=1; ELSE A7:=0; ENDIF;
    ELSIF (count3=12) THEN V13 := DATA;
 IF(V13 & 1) THEN A8:=1; ELSE A8:=0; ENDIF;
 IF(V13 & 2) THEN A9:=1; ELSE A9:=0; ENDIF;
 IF(V13 & 4) THEN A10:=1; ELSE A10:=0; ENDIF;
 IF(V13 & 16) THEN A11:=1; ELSE A11:=0; ENDIF;
 IF(V13 & 64) THEN A12:=1; ELSE A12:=0; ENDIF;
 IF(V13 & 128) THEN A13:=1; ELSE A13:=0; ENDIF;
 IF(V13 & 512) THEN A14:=1; ELSE A14:=0; ENDIF;
 IF(V13 & 1024) THEN A15:=1; ELSE A15:=0; ENDIF;
 IF(V13 & 2048) THEN A16:=1; ELSE A16:=0; ENDIF;
 IF(V13 & 4096) THEN A17:=1; ELSE A17:=0; ENDIF;
 IF(V13 & 32768) THEN A18:=1; ELSE A18:=0; ENDIF;
    ELSIF (count3=13) THEN V14 := DATA;
 IF(V14 & 1) THEN A19:=1; ELSE A19:=0; ENDIF;
 IF(V14 & 8192) THEN A20:=1; ELSE A20:=0; ENDIF;
 
    ELSIF (count3=14) THEN V15 := DATA;
 IF(V15 & 1) THEN A21:=1; ELSE A21:=0; ENDIF;
 IF(V15 & 2) THEN A22:=1; ELSE A22:=0; ENDIF;
 IF(V15 & 4) THEN A23:=1; ELSE A23:=0; ENDIF;
 IF(V15 & 8) THEN A24:=1; ELSE A24:=0; ENDIF;
 IF(V15 & 16) THEN A25:=1; ELSE A25:=0; ENDIF;
 IF(V15 & 32) THEN A26:=1; ELSE A26:=0; ENDIF;
 IF(V15 & 64) THEN A27:=1; ELSE A27:=0; ENDIF;
 
    ELSIF (count3=15) THEN V16 := DATA*1000;
    ELSIF (count3=16) THEN V16 := V16 + DATA;
    ELSIF (count3=17) THEN V18 := DATA*10000;
    ELSIF (count3=18) THEN V18 := V18 + DATA;
    ELSIF (count3=19) THEN V20 := DATA/10;
    ELSIF (count3=20) THEN V21 := DATA/10;
    ELSIF (count3=21) THEN V22 := DATA;
    ELSIF (count3=22) THEN V23 := DATA;
    ELSIF (count3=23) THEN IF (DATA>=32768) THEN V24:=(DATA-65536)/10; ELSE V24:=DATA/10; ENDIF;
    ENDIF;
    count3 := count3+1;
   );
  TIMEOUT 1000
 END;

 TELEGRAM WriteRegister NAMED "Write Register" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(06); % Modbus kommando för att skriva ett register
   DATA[2] <- RWORD(
    IF(count6>0) THEN count6 := 0; ENDIF;
    IF (count6=0) THEN DATA := 2904;
    ENDIF;
   ); % Register adress
   DATA[4] <- RWORD(
    IF (count6=0) THEN IF (V25<0) THEN DATA := ROUND((V25*10)+65536); ELSE DATA := ROUND(V25*10); ENDIF;
    ENDIF;
    count6 := count6+1;
   );
  ANSWER SIZE 8
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(06);
  TIMEOUT 1000
 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.