DEVICETYPE Grundfos NAMED "GrundfosMagna3" TYPEID 21341 IS PARAMETER Id : "Adress" INT; V14 : "wControlMode" ["S=0,Fq=1,hd=3,P=4,DP=5,PP=6,F=7,T=8,L=10,AA=128,FA=129,Ls=130"]ENUM; %[S=0,Fq=1,hd=3,P=4,DP=5,PP=6,F=7,T=8,L=10,AA=128,FA=129,Ls=130 V15 : "wOperationMode" ["AutoCtrl=0,OpenLoopmin=4,OpenLoopmax=6"]ENUM; V16 : "wSetpoint" ["%"]DEC2; V17 : "wRunning" ["OFF,ON"]ENUM; % 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"]INT; V2 : "ProcessFeedback" ["%"]DEC2; V3 : "ControlMode" ["S=0,Fq=1,hd=3,P=4,DP=5,PP=6,F=7,T=8,L=10,AA=128,FA=129,Ls=130"]ENUM; V4 : "OperationMode" ["AutoCtrl=0,OpenLoopmin=4,OpenLoopmax=6"]ENUM; V5 : "AlarmStatus" [""]INT; 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 : "PumpPower" ["W"]INT; V22 : "PumpEnergy" ["kWh"]INT; V23 : "OperationTime" ["h"]INT; PINenabled : "RequirePIN" ["No,Yes"]ENUM; WriteAccess : "WriteEnabled" ["No,Yes"]ENUM; pFamily : "Grundfos product family" INT; pType : "Grundfos product Type" INT; pVersion : "Grundfos product version" INT; PRIVATE count3; count6; tmp; heatenergy_hi; heatpower_hi; pumppower_hi; pumpenergy_hi; operationtime_hi; BAUDRATE 9600; CHECKSUM MODBUS SWAPPED; TELEGRAM ReadCIMStatus NAMED "Read CIM status" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa register DATA[2] := RWORD(20); DATA[4] := RWORD(12); ANSWER SIZE 29 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[19] -> RWORD( IF DATA & 1 THEN PINenabled := 1; ELSE PINenabled := 0; ENDIF; IF DATA & 2 THEN WriteAccess := 1; ELSE WriteAccess := 0; ENDIF; ); DATA[21] -> RWORD(pFamily:=DATA;); DATA[23] -> RWORD(pType:=DATA;); DATA[25] -> RWORD(pVersion:=DATA;); TIMEOUT 800 END; TELEGRAM ReadStatus NAMED "Read pump status" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa register DATA[2] := RWORD(200); DATA[4] := RWORD(05); ANSWER SIZE 15 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[3] -> RWORD(V1 := DATA;); DATA[5] -> RWORD(V2 := DATA/100;); DATA[7] -> RWORD(V3 := DATA;); DATA[9] -> RWORD(V4 := DATA;); DATA[11] -> RWORD(V5 := DATA;); TIMEOUT 800 END; TELEGRAM ReadData NAMED "Read pump data" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa register DATA[2] := RWORD(300); DATA[4] := RWORD(54); ANSWER SIZE 113 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[3] -> RWORD(V6 := DATA/1000;); % 300 DATA[5] -> RWORD(V7 := DATA/10;); DATA[9] -> RWORD(V8 := DATA;); DATA[17] -> RWORD(V9 := DATA/100;); DATA[25] -> RWORD(pumppower_hi := DATA;); DATA[27] -> RWORD(V21 := (pumppower_hi*65536) + DATA;); DATA[45] -> RWORD(V10 := (DATA/100) - 273.15;); DATA[51] -> RWORD(V11 := DATA/100;); % 324 DATA[55] -> RWORD(operationtime_hi := DATA;); DATA[57] -> RWORD(V23 := (operationtime_hi*65536) + DATA;); DATA[65] -> RWORD(pumpenergy_hi := DATA;); DATA[67] -> RWORD(V22 := (pumpenergy_hi*65536) + DATA;); DATA[75] -> RWORD(V18 := (DATA/100) - 273.15;); DATA[77] -> RWORD(V12 := DATA/100;); DATA[79] -> RWORD(V13 := DATA/1000;); DATA[105] -> RWORD(heatenergy_hi := DATA;); DATA[107] -> RWORD(V19 := (heatenergy_hi*65536) + DATA;); DATA[109] -> RWORD(heatpower_hi := DATA;); DATA[111] -> RWORD(V20 := (heatpower_hi*65536) + DATA;); TIMEOUT 800 END; TELEGRAM WriteRegister NAMED "Write Register" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(10); % Modbus kommando för att skriva register DATA[2] := RWORD(100); DATA[4] := RWORD(4); DATA[6] := BYTE(8); DATA[7] <- RWORD(IF (V17=0) THEN DATA := 1; ELSE DATA := 3; ENDIF;); DATA[9] <- RWORD(DATA:=V14;); DATA[11] <- RWORD(DATA:=V15;); DATA[13] <- RWORD(DATA:=V16*100;); ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = HEX(10); TIMEOUT 800 END; END;