Grundfos MAGNA3 med CIM200 Modbus modul 2013 Ny

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
4
Uppdaterad
2013-12-16
Skapad
2013-08-23
Kategori
Modbus, Värme
Visningar
3067

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

% Skapad med Modbus Creator
% 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.