HERU 250 aggregat

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
2
Uppdaterad
2018-11-21
Skapad
2016-08-17
Kategori
Kyla, Modbus, Värme, Ventilation
Visningar
2475

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 ansAarar 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 HERU250 NAMED "HERU 250" TYPEID 13458 IS

 PARAMETER
  Id  : "Adress" [""]INT;
  V12 : "wTemperature SP" ["°C"];
 PUBLIC
  SUMLARM : "Sum alarm" [""]INT;
  %A1 : "Fire alarm" [""]INT;
  %A2 : "Rotor alarm" [""]INT;
  %A3 : "Freeze alarm" [""]INT;
  %A4 : "Low supply alarm" [""]INT;
  %A5 : "Low rotor temp alarm" [""]INT;
  %A6 : "Temp open circuit alarm" [""]INT;
  %A7 : "Temp short circuit alarm" [""]INT;
  %A8 : "Pulser alarm" [""]INT;
  %A9 : "Supply fan alarm" [""]INT;
  %A10 : "Exhaust fan alarm" [""]INT;
  %A11 : "Supply filter alarm" [""]INT;
  %A12 : "Exhaust filter alarm" [""]INT;
  %A13 : "Filter timer alarm" [""]INT;
  V1 : "Temperature SP" ["°C"];
  V2 : "Outdoor temperature" ["°C"];
  V3 : "Supply air temp" ["°C"];
  V4 : "Exhaust air temp" ["°C"];
  V5 : "Waste air temp" ["°C"];
  V6 : "Water temp" ["°C"];
  V7 : "Heat recovery wheel temp" ["°C"];
  V8 : "Room temp" ["°C"];
  V9 : "Supply pressure" [""];
  V10 : "Exhaust pressure" [""];
  V11 : "Current fan speed" [""]; % 0=off, 1=min, 2=std, 3=mod, 4=max
  V13 : "Filter days left" ["days"]INT;

 PRIVATE
  count6;

 BAUDRATE 9600;
 CHECKSUM MODBUS SWAPPED;

 TELEGRAM ReadAL NAMED "Read Alarm" 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(9); % Start address
   DATA[4] := RWORD(16); % Antal register att läsa
  ANSWER SIZE 7 % (Antal register / 8) aArundat uppåt + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(02);
   DATA[2] = BYTE(2); % Antal Bytes
   DATA[3] -> BYTE(
    SUMLARM := 0;
IF DATA > 0 THEN SUMLARM := 1; ENDIF;
    %IF (DATA & 1) THEN A1 := 1; ELSE A1 := 0; ENDIF;
    %IF (DATA & 2) THEN A2 := 1; ELSE A2 := 0; ENDIF;
    %IF (DATA & 8) THEN A3 := 1; ELSE A3 := 0; ENDIF;
    %IF (DATA & 16) THEN A4 := 1; ELSE A4 := 0; ENDIF;
    %IF (DATA & 32) THEN A5 := 1; ELSE A5 := 0; ENDIF;
   );
   DATA[4] -> BYTE(
    IF DATA > 0 THEN SUMLARM := 1; ENDIF;
    %IF (DATA & 1) THEN A6 := 1; ELSE A6 := 0; ENDIF;
    %IF (DATA & 2) THEN A7 := 1; ELSE A7 := 0; ENDIF;
    %IF (DATA & 4) THEN A8 := 1; ELSE A8 := 0; ENDIF;
    %IF (DATA & 8) THEN A9 := 1; ELSE A9 := 0; ENDIF;
    %IF (DATA & 16) THEN A10 := 1; ELSE A10 := 0; ENDIF;
    %IF (DATA & 32) THEN A11 := 1; ELSE A11 := 0; ENDIF;
    %IF (DATA & 64) THEN A12 := 1; ELSE A12 := 0; ENDIF;
    %IF (DATA & 128) THEN A13 := 1; ELSE A13 := 0; ENDIF;
   );
  TIMEOUT 300
 END;
 
 TELEGRAM ReadHolding NAMED "Read Holding" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(03); % Modbus kommando för att läsa register kod 03
   DATA[2] := RWORD(1); % 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 (DATA>=32768) THEN V1:=(DATA-65536); ELSE V1:=DATA; ENDIF;);
  TIMEOUT 300
 END;

 TELEGRAM ReadInput NAMED "Read Input" 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(1); % Start address
   DATA[4] := RWORD(21); % Antal register att läsa
  ANSWER SIZE 47 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(04);
   DATA[2] = BYTE(42); % Antal Bytes
   DATA[3] -> RWORD(IF (DATA>=32768) THEN V2:=(DATA-65536); ELSE V2:=DATA; ENDIF;);
   DATA[5] -> RWORD(IF (DATA>=32768) THEN V3:=(DATA-65536); ELSE V3:=DATA; ENDIF;);
   DATA[7] -> RWORD(IF (DATA>=32768) THEN V4:=(DATA-65536); ELSE V4:=DATA; ENDIF;);
   DATA[9] -> RWORD(IF (DATA>=32768) THEN V5:=(DATA-65536); ELSE V5:=DATA; ENDIF;);
   DATA[11] -> RWORD(IF (DATA>=32768) THEN V6:=(DATA-65536); ELSE V6:=DATA; ENDIF;);
   DATA[13] -> RWORD(IF (DATA>=32768) THEN V7:=(DATA-65536); ELSE V7:=DATA; ENDIF;);
   DATA[15] -> RWORD(IF (DATA>=32768) THEN V8:=(DATA-65536); ELSE V8:=DATA; ENDIF;);
   DATA[23] -> RWORD(V9:=DATA;);
   DATA[25] -> RWORD(V10:=DATA;);
   DATA[39] -> RWORD(V13 := DATA;);
   DATA[43] -> RWORD(V11:=DATA;);
  TIMEOUT 300
 END;

 TELEGRAM WriteHolding NAMED "Write Holding" 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 := 1;
    ENDIF;
   ); % Register adress
   DATA[4] <- RWORD(
    IF (count6=0) THEN IF (V12<0) THEN DATA := ROUND((V12)+65536); ELSE DATA := ROUND(V12); ENDIF;
    ENDIF;
    count6 := count6+1;
   );
  ANSWER SIZE 8
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(06);
  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.