Grundfos MAGNA3 med CIM200 Modbus modul 2013 Ny
Detaljer
Beskrivning
Ett skript för att styra Grundfos MAGNA3 curkulationspump anpassad till de nya Magna styret (2013).
Har stöd för extern temperaturmätare (RemoteTemp2) vilket kräver en sensor.
Visar ˚C istället för ˚K.
Bruksanvisning
Skriptet har anpassats så att wControlReg = 1 startar pumpen och wControlReg = 0 stoppar den.
Vill ni skriva direkt med grundfos bitvärden så ändra raden:
ELSIF (count6=3) THEN IF (V17=0) THEN DATA := 1; ELSE DATA := 3;
till
ELSIF (count6=3) THEN DATA := V17;
Har testat att starta pumpen genom att sätta:
wControlMode = 128
wOperationMode = 0
wSetPoint = 10%
wControlReg = 1 (3 om du skriver med Grundfos bitvärden)
och stoppa:
wControlReg = 0 (1 om du skriver med Grundfos bitvärden)
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
% Modifierad av Richard Arvidsson, Arvidssons Elbyrå AB: värmeenergi-mätning. värme-effekt och differenstemperatur-värden
DEVICETYPE Grundfos NAMED "Grundfos" TYPEID 21341 IS
PARAMETER
Id : "Adress";
V14 : "wControlMode" [""];
V15 : "wOperationMode" [""];
V16 : "wSetpoint" ["%"]DEC2;
V17 : "wControlReg" ["bits"]; % anpassad så att 1=start och 0=stop, detta är inte enligt modbus manualen för Grundfos utan för att styret använder det.
PUBLIC
V1 : "StatusRegister" ["bits"];
V2 : "ProcessFeedback" ["%"]DEC2;
V3 : "ControlMode" [""];
V4 : "OperationMode" [""];
V5 : "AlarmStatus" [""];
V6 : "Head" ["bar"]DEC3;
V7 : "VolumeFlow" ["m3/h"]DEC1;
V8 : "Speed" ["rpm"]INT;
V9 : "ActualSetpoint" ["%"]DEC2; % according to control mode
V10 : "PumpLiquidTemp" ["°C"]DEC2;
V11 : "AuxSensorInput" ["%"]DEC2;
V12 : "UserSetpoint" ["%"]DEC2;
V13 : "DiffPressure" ["bar"]DEC3;
V18 : "RemoteTemp2" ["°C"]DEC2;
V19 : "HeatEnergyCounter" ["kWh"]INT;
V20 : "HeatPower" ["W"]INT;
V21 : "HeatDiffTemp" ["°C"]DEC2;
PRIVATE
count3;
count6;
tmp;
heatenergy_hi;
heatpower_hi;
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>18) THEN count3 := 0; ENDIF;
IF (count3=0) THEN tmp := 200; % +1 = StatusRegister
ELSIF (count3=1) THEN tmp := 201;
ELSIF (count3=2) THEN tmp := 202;
ELSIF (count3=3) THEN tmp := 203;
ELSIF (count3=4) THEN tmp := 204;
ELSIF (count3=5) THEN tmp := 300;
ELSIF (count3=6) THEN tmp := 301;
ELSIF (count3=7) THEN tmp := 303;
ELSIF (count3=8) THEN tmp := 307;
ELSIF (count3=9) THEN tmp := 321;
ELSIF (count3=10) THEN tmp := 324;
ELSIF (count3=11) THEN tmp := 337;
ELSIF (count3=12) THEN tmp := 338;
ELSIF (count3=13) THEN tmp := 336;
ELSIF (count3=14) THEN tmp := 351; % +1 = HeatEnergyCounter_Hi
ELSIF (count3=15) THEN tmp := 352; % +1 = HeatEnergyCounter_Lo
ELSIF (count3=16) THEN tmp := 353; % +1 = HeatPower_Hi
ELSIF (count3=17) THEN tmp := 354; % +1 = HeatPower_LO
ELSIF (count3=18) THEN tmp := 355; % +1 = HeatDiffTemp
ENDIF;
DATA:= tmp;
);
DATA[4] := RWORD(01);
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(03);
DATA[3] -> RWORD(
IF (count3=0) THEN V1 := DATA;
ELSIF (count3=1) THEN V2 := DATA/100;
ELSIF (count3=2) THEN V3 := DATA;
ELSIF (count3=3) THEN V4 := DATA;
ELSIF (count3=4) THEN V5 := DATA;
ELSIF (count3=5) THEN V6 := DATA/1000;
ELSIF (count3=6) THEN V7 := DATA/10;
ELSIF (count3=7) THEN V8 := DATA;
ELSIF (count3=8) THEN V9 := DATA/100;
ELSIF (count3=9) THEN V10 := (DATA/100) - 273.15;
ELSIF (count3=10) THEN V11 := DATA/100;
ELSIF (count3=11) THEN V12 := DATA/100;
ELSIF (count3=12) THEN V13 := DATA/1000;
ELSIF (count3=13) THEN V18 := (DATA/100) - 273.15;
ELSIF (count3=14) THEN heatenergy_hi := DATA;
ELSIF (count3=15) THEN V19 := (heatenergy_hi*65536) + DATA;
ELSIF (count3=16) THEN heatpower_hi := DATA;
ELSIF (count3=17) THEN V20 := (heatpower_hi*65536) + DATA;
ELSIF (count3=18) THEN V21 := DATA/100;
ENDIF;
count3 := count3+1;
);
TIMEOUT 800
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>3) THEN count6 := 0; ENDIF;
IF (count6=0) THEN DATA := 101;
ELSIF (count6=1) THEN DATA := 102;
ELSIF (count6=2) THEN DATA := 103;
ELSIF (count6=3) THEN DATA := 100;
ENDIF;
); % Register adress
DATA[4] <- RWORD(
IF (count6=0) THEN DATA := V14;
ELSIF (count6=1) THEN DATA := V15;
ELSIF (count6=2) THEN DATA := V16*100;
ELSIF (count6=3) THEN IF (V17=0) THEN DATA := 1; ELSE DATA := 3; ENDIF;
ENDIF;
count6 := count6+1;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(06);
TIMEOUT 800
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.