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