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
- 2860
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;
% - 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.