RegioMidi
Detaljer
Beskrivning
Förprogrammerade rumsregulatorer med kommunikation
Bruksanvisning
saknas
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi, Digital inputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-08-05 inital version
%
DEVICETYPE RegioMidiDigital NAMED "RegioMidi DI/DU" TYPEID 21370 IS
PARAMETER
Id : "Adress";
PUBLIC
%D1 : "DigIn(0)" ; % 1 L,2 Används ej
D2 : "DigIn1" ; % 2 L,2 Värde på digital ingång 1
D3 : "DigIn2" ; % 3 L,2 Värde på digital ingång 2
D4 : "UDigIn1" ; % 4 L,2 Värde på universell digital ingång 1
D5 : "DigOut(0)" ; % 5 L,2 Används ej
%D6 : "DigOut1" ; % 6 L,2 Värde på digital utgång 1
D7 : "DigOut2" ; % 7 L,2 Värde på digital utgång 2
D8 : "DigOut3" ; % 8 L,2 Värde på digital utgång 3
D9 : "DigOut4" ; % 9 L,2 Värde på digital utgång 4
D10 : "DigOut5" ; % 10 L,2 Värde på digital utgång 5
D11 : "UDigOut1" ; % 11 L,2 Värde på universell digital utgång 1
D12 : "UDigOut2" ; % 12 L,2 Värde på universell digital utgång 2
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM DigitalInput NAMED "Läs status IN/UT" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(0); % Start adress (1-1)
DATA[4] := RWORD(12); % Number of inputs
ANSWER SIZE 7 % ((Number of inputs / 8) + (Rest>0)) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
%DATA[2] = BYTE(2);
DATA[3] -> BYTE(
% IF (DATA & 1) THEN D1 := 1; ELSE D1 := 0; ENDIF;
IF (DATA & 2) THEN D2 := 1; ELSE D2 := 0; ENDIF;
IF (DATA & 4) THEN D3 := 1; ELSE D3 := 0; ENDIF;
IF (DATA & 8) THEN D4 := 1; ELSE D4 := 0; ENDIF;
IF (DATA & 16) THEN D5 := 1; ELSE D5 := 0; ENDIF;
% IF (DATA & 32) THEN D6 := 1; ELSE D6 := 0; ENDIF;
IF (DATA & 64) THEN D7 := 1; ELSE D7 := 0; ENDIF;
IF (DATA & 128) THEN D8 := 1; ELSE D8 := 0; ENDIF;
);
DATA[4] -> BYTE(
IF (DATA & 1) THEN D9 := 1; ELSE D9 := 0; ENDIF;
IF (DATA & 2) THEN D10:= 1; ELSE D10:= 0; ENDIF;
IF (DATA & 4) THEN D11:= 1; ELSE D11:= 0; ENDIF;
IF (DATA & 8) THEN D12:= 1; ELSE D12:= 0; ENDIF;
);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi, Indikation/Alarm inputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-08-05 initial version
%
DEVICETYPE RegioMidiAlarm NAMED "RegioMidi Ind." TYPEID 21371 IS
PARAMETER
Id : "Adress";
PUBLIC
% Indikerar
AL13 : "DIOpenWindow" ; % 13 L,2 öppet fönster
AL14 : "DICondenseAlarm"; % 14 L,2 kondenslarm från digital ingång
AL15 : "DIPresences" ; % 15 L,2 närvaro från digital ingång
AL16 : "DIChangeOver" ; % 16 L,2 change-over från digitalingång
AL17 : "FanSpeed1" ; % 17 L,2 fläkthastighet 1
AL18 : "FanSpeed2" ; % 18 L,2 fläkthastighet 2
AL19 : "FanSpeed3" ; % 19 L,2 fläkthastighet 3
AL20 : "Forcedvent." ; % 20 L,2 forcerad ventilation
AL21 : "CVHeatPulsProp" ; % 21 L,2 pulsprop värme
AL22 : "CVCoolPulsProp" ; % 22 L,2 pulsprop kyla
AL23 : "CVHeatInc" ; % 23 L,2 värme öka
AL24 : "CVHeatDec" ; % 24 L,2 värme minska
AL25 : "CVCoolInc" ; % 25 L,2 kyla öka
AL26 : "CVCoolDec" ; % 26 L,2 kyla minska
AL27 : "ChangeOverAI" ; % 27 L,2 change-over-status från analog ingång
AL28 : "ChangeOverAI/DI"; % 28 L,2 change-over-status från både digital och analog ingång
AL29 : "RoomTempSeAlarm"; % 29 L,2 givarlarm på rumsgivare
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM DigitalAlarm NAMED "Indikering/Larm" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(12); % Start adress (13-1)
DATA[4] := RWORD(17); % Number of inputs
ANSWER SIZE 8 % ((Number of inputs / 8) + (Rest>0)) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
%DATA[2] = BYTE(3);
DATA[3] -> BYTE(
IF (DATA & 1) THEN AL13:= 1; ELSE AL13:= 0; ENDIF;
IF (DATA & 2) THEN AL14:= 1; ELSE AL14:= 0; ENDIF;
IF (DATA & 4) THEN AL15:= 1; ELSE AL15:= 0; ENDIF;
IF (DATA & 8) THEN AL16:= 1; ELSE AL16:= 0; ENDIF;
IF (DATA & 16) THEN AL17:= 1; ELSE AL17:= 0; ENDIF;
IF (DATA & 32) THEN AL18:= 1; ELSE AL18:= 0; ENDIF;
IF (DATA & 64) THEN AL19:= 1; ELSE AL19:= 0; ENDIF;
IF (DATA & 128) THEN AL20:= 1; ELSE AL20:= 0; ENDIF;
);
DATA[4] -> BYTE(
IF (DATA & 1) THEN AL21:= 1; ELSE AL21:= 0; ENDIF;
IF (DATA & 2) THEN AL22:= 1; ELSE AL22:= 0; ENDIF;
IF (DATA & 4) THEN AL23:= 1; ELSE AL23:= 0; ENDIF;
IF (DATA & 8) THEN AL24:= 1; ELSE AL24:= 0; ENDIF;
IF (DATA & 16) THEN AL25:= 1; ELSE AL25:= 0; ENDIF;
IF (DATA & 32) THEN AL26:= 1; ELSE AL26:= 0; ENDIF;
IF (DATA & 64) THEN AL27:= 1; ELSE AL27:= 0; ENDIF;
IF (DATA & 128) THEN AL28:= 1; ELSE AL28:= 0; ENDIF;
);
DATA[5] -> BYTE(
IF (DATA & 1) THEN AL29:= 1; ELSE AL29:= 0; ENDIF;
);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi Digital outputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-0806 inital version
%
DEVICETYPE RegioMidiDigitalOut NAMED "RegioMidi SetDU" TYPEID 21372 IS
PARAMETER
Id : "Adress";
%DU1 : "Bypass" ; % 1 L,1 0 Sätter enheten i Bypass-läge. Återgår automatiskt efter Bypass-tid (default=120 min).
%DU2 : "ShutDown"; % 2 L,1 0 Sätter enheten i Shutdown-läge
%DU3 : "NotUsedL"; % 3 L,1 0 Används ej
%DU4 : "DiNC(0)" ; % 4 L,1 0 Används ej
%DU5 : "Di1NC" ; % 5 L,1 0 Normalt öppen (NO) eller normalt stängd (NC) på digital ingång 1. 0=NO, 1=NC.
%DU6 : "Di2NC" ; % 6 L,1 1 Normalt öppen (NO) eller normalt stängd (NC) på digital ingång 2. 0=NO, 1=NC.
DU7 : "UDi1NC" ; % 7 L,1 0 Normalt öppen (NO) eller normalt stängd (NC) på universell digital ingång 1. 0=NO, 1=NC.
PUBLIC
PRIVATE
Cnt;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM WriteDISET1 NAMED "Sätt Dig.Status" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(05); % Modbus command "05h" Set coil status (bit)
DATA[2] <- RWORD( %
IF Cnt>8 THEN Cnt:=0; ENDIF;
DATA := 6; % Digital reg 7
%IF Cnt=0 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=1 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=2 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=3 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=4 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=5 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=6 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=7 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=8 THEN DATA := 6; % Digital reg 7
%ENDIF;
);
DATA[4] <- RWORD(
DATA := DU7;
%IF Cnt=0 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=1 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=2 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=3 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=4 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=5 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=6 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=7 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=8 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ENDIF;
Cnt := Cnt + 1;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(05);
TIMEOUT 1000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi Analog inputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Note! Telegram for reading Analog status AI and AO
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2008-10-14 inital version
% History: 2010-06-18 Anpassning för Svensk Styrteknik
%
DEVICETYPE RegioMidiEAnalog NAMED "RegioMidi AI/AU" TYPEID 21373 IS
PARAMETER
Id : "Adress";
PUBLIC
%V1 : "Software" ; % 1 X,4 Typ av Regio mjukvara: 0 = RCP 1 = RC
%V2 : "VerMajor" ; % 2 X,4 Huvudversion
%V3 : "VerMinor" ; % 3 X,4 Mindre version
%V4 : "VerBranch" ; % 4 X,4 Del version
V5 : "Revision" ; % 5 X,4 Revision
V6 : "FanSwitch" ; % 6 X,4 Tillstånd fläktomkopplare
V7 : "UnitState" ; % 7 X,4 Aktuellt driftläge: 0 = Off 1 = Unoccupied 2 = Stand-by 3 = Occupied 4 = ByPass
V8 : "ControllerState" ; % 8 X,4 Aktuell reglering: 0 = Från 1 = Värme 2 = Kyla
V9 : "FanSpeed" ; % 9 X,4 Aktuell fläkthastighet: 0 = Från 1 = Fläkthastighet 1 2 = Fläkthastighet 2 3 = Fläkthastighet 3
%V10 : "NotUsedX" ; % 10 X,4 Används ej
V11 : "RoomTemp" ["°C"]; % 11 R,4 Rumstemperatur
V12 : "RoomTempExt" ["°C"]; % 12 R,4 Rumstemperatur från extern givare
V13 : "RoomTempInt" ["°C"]; % 13 R,4 Rumstemperatur från intern givare
V14 : "AIChangeOver" ["°C"]; % 14 R,4 Change-over-temperatur
V15 : "AnaIn1" ["V"] ; % 15 R,4 Värde på analog ingång 1
V16 : "UAnaIn1" ["V"] ; % 16 R,4 Värde på universell analog ingång 1
V17 : "UAnaOut1" ["V"] ; % 17 R,4 Värde på universell analog utgång 1
V18 : "UAnaOut2" ["V"] ; % 18 R,4 Värde på universell analog utgång 2
V19 : "SetPAdjustment" ["°C"]; % 19 R,4 Börvärdesjustering från intern enhet
V20 : "PIDSetP" ["°C"]; % 20 R,4 Regulatorbörvärde
V21 : "PIDOutput" ["%"] ; % 21 R,4 Regulatorutsignal (0…100%)
V22 : "HeatOutput" ["%"] ; % 22 R,4 Värmeutsignal (0…100%)
V23 : "CoolOutput" ["%"] ; % 23 R,4 Kylutsignal (0…100%)
V24 : "AI1Raw" ["V"] ; % 24 R,4 Råvärde för analog ingång 1
V25 : "UI1Raw" ["V"] ; % 25 R,4 Råvärde för universell ingång 1
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM AnalogInput NAMED "Läs värden" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(04); % Modbus command "04h" Read registers
DATA[2] := RWORD(0); % Start address register
DATA[4] := RWORD(25); % Number of registers
ANSWER SIZE 55 % (Number of registers * 2) + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(04); % Modbus command "04h" Read registers
%DATA[2] = BYTE(50); % Byte count
%DATA[3] -> RWORD(V1 := DATA;);
%DATA[5] -> RWORD(V2 := DATA;);
%DATA[7] -> RWORD(V3 := DATA;);
%DATA[9] -> RWORD(V4 := DATA;);
DATA[11] -> RWORD(V5 := DATA;);
DATA[13] -> RWORD(V6 := DATA;);
DATA[15] -> RWORD(V7 := DATA;);
DATA[17] -> RWORD(V8 := DATA;);
DATA[19] -> RWORD(V9 := DATA;);
%DATA[21] -> RWORD(V10:= DATA;);
DATA[23] -> RWORD(IF (DATA>=32768) THEN V11:=(DATA-65536)/10; ELSE V11:=DATA/10; ENDIF;);
DATA[25] -> RWORD(IF (DATA>=32768) THEN V12:=(DATA-65536)/10; ELSE V12:=DATA/10; ENDIF;);
DATA[27] -> RWORD(IF (DATA>=32768) THEN V13:=(DATA-65536)/10; ELSE V13:=DATA/10; ENDIF;);
DATA[29] -> RWORD(IF (DATA>=32768) THEN V14:=(DATA-65536)/10; ELSE V14:=DATA/10; ENDIF;);
DATA[31] -> RWORD(IF (DATA>=32768) THEN V15:=(DATA-65536)/10; ELSE V15:=DATA/10; ENDIF;);
DATA[33] -> RWORD(IF (DATA>=32768) THEN V16:=(DATA-65536)/10; ELSE V16:=DATA/10; ENDIF;);
DATA[35] -> RWORD(IF (DATA>=32768) THEN V17:=(DATA-65536)/10; ELSE V17:=DATA/10; ENDIF;);
DATA[37] -> RWORD(IF (DATA>=32768) THEN V18:=(DATA-65536)/10; ELSE V18:=DATA/10; ENDIF;);
DATA[39] -> RWORD(IF (DATA>=32768) THEN V19:=(DATA-65536)/10; ELSE V19:=DATA/10; ENDIF;);
DATA[41] -> RWORD(IF (DATA>=32768) THEN V20:=(DATA-65536)/10; ELSE V20:=DATA/10; ENDIF;);
DATA[43] -> RWORD(IF (DATA>=32768) THEN V21:=(DATA-65536)/10; ELSE V21:=DATA/10; ENDIF;);
DATA[45] -> RWORD(IF (DATA>=32768) THEN V22:=(DATA-65536)/10; ELSE V22:=DATA/10; ENDIF;);
DATA[47] -> RWORD(IF (DATA>=32768) THEN V23:=(DATA-65536)/10; ELSE V23:=DATA/10; ENDIF;);
DATA[49] -> RWORD(IF (DATA>=32768) THEN V24:=(DATA-65536)/10; ELSE V24:=DATA/10; ENDIF;);
DATA[51] -> RWORD(IF (DATA>=32768) THEN V25:=(DATA-65536)/10; ELSE V25:=DATA/10; ENDIF;);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi Analog settings
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-08-06 inital version
%
DEVICETYPE RegioMidiSet NAMED "RegioMidi Ställ" TYPEID 21274 IS
PARAMETER
Id : "Adress";
S13 : "ChangeOverSel." ; % 13 X,3 2 Manuell/Auto change-over (0=Värme, 1=Kyla, 2=Auto)
PUBLIC
PRIVATE
Cnt;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM Settings1 NAMED "Ställ värden" IS
QUESTION
DATA[0] := BYTE(Id);
DATA[1] := HEX(06); %Write singel register
DATA[2] <- RWORD( %Start adress (regnr-1)
IF Cnt>8 THEN Cnt:=0; ENDIF;
%% Adress=Register-1
DATA := 12;
%IF Cnt=0 THEN DATA := 12; % S13 Manuell/Auto change-over (0=Värme, 1=Kyla, 2=Auto)
%ELSIF Cnt=1 THEN DATA := 12; % S13
%ELSIF Cnt=2 THEN DATA := 12; % S13
%ELSIF Cnt=3 THEN DATA := 12; % S13
%ELSIF Cnt=4 THEN DATA := 12; % S13
%ELSIF Cnt=5 THEN DATA := 12; % S13
%ELSIF Cnt=6 THEN DATA := 12; % S13
%ELSIF Cnt=7 THEN DATA := 12; % S13
%ELSE DATA := 12; % S13
%ENDIF;
);
DATA[4] <- RWORD(
%IF Cnt=0 THEN
IF S13<0 THEN DATA := 2; % S13 Manuell/Auto change-over (0=Värme, 1=Kyla, 2=Auto)% S0 =
ELSIF S13>2 THEN DATA := 2;
ELSE DATA := S13;
ENDIF;
%ELSIF Cnt=1 THEN
% IF S24<20 THEN DATA := 200; % S0 =
% ELSIF S24>750 THEN DATA := 7500;
% ELSE DATA := S24*10;
% ENDIF;
%ELSIF Cnt=2 THEN
% IF S25<20 THEN DATA := 200; % S0 =
% ELSIF S25>750 THEN DATA := 7500;
% ELSE DATA := 25*10;
% ENDIF;
%ELSIF Cnt=3 THEN
% IF S26<20 THEN DATA := 200; % S0 =
% ELSIF S26>750 THEN DATA := 7500;
% ELSE DATA := S26*10;
% ENDIF;
%ELSIF Cnt=4 THEN
% IF S27<20 THEN DATA := 200; % S0 =
% ELSIF S27>750 THEN DATA := 7500;
% ELSE DATA := S27*10;
% ENDIF;
%ELSIF Cnt=5 THEN
% IF S1<10 THEN DATA := 100; % S0 =
% ELSIF S1>40 THEN DATA := 400;
% ELSE DATA := S1*10;
% ENDIF;
%ELSIF Cnt=6 THEN
% IF S33<10 THEN DATA := 100; % S0 =
% ELSIF S33>40 THEN DATA := 400;
% ELSE DATA := S33*10;
% ENDIF;
%ELSIF Cnt=7 THEN
% IF S34<4 THEN DATA := 40; % S0 =
% ELSIF S34>40 THEN DATA := 400;
% ELSE DATA := S34*10;
% ENDIF;
%ELSE
% IF S439<10 THEN DATA := 100; % S0 =
% ELSIF S439>40 THEN DATA := 400;
% ELSE DATA := S439*10;
% ENDIF;
%
%ENDIF;
Cnt := Cnt + 1;
IF Cnt>8 THEN Cnt := 0;
ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(06);
TIMEOUT 2000
END;
END;
% Device definition for RegioMidi, Digital inputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-08-05 inital version
%
DEVICETYPE RegioMidiDigital NAMED "RegioMidi DI/DU" TYPEID 21370 IS
PARAMETER
Id : "Adress";
PUBLIC
%D1 : "DigIn(0)" ; % 1 L,2 Används ej
D2 : "DigIn1" ; % 2 L,2 Värde på digital ingång 1
D3 : "DigIn2" ; % 3 L,2 Värde på digital ingång 2
D4 : "UDigIn1" ; % 4 L,2 Värde på universell digital ingång 1
D5 : "DigOut(0)" ; % 5 L,2 Används ej
%D6 : "DigOut1" ; % 6 L,2 Värde på digital utgång 1
D7 : "DigOut2" ; % 7 L,2 Värde på digital utgång 2
D8 : "DigOut3" ; % 8 L,2 Värde på digital utgång 3
D9 : "DigOut4" ; % 9 L,2 Värde på digital utgång 4
D10 : "DigOut5" ; % 10 L,2 Värde på digital utgång 5
D11 : "UDigOut1" ; % 11 L,2 Värde på universell digital utgång 1
D12 : "UDigOut2" ; % 12 L,2 Värde på universell digital utgång 2
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM DigitalInput NAMED "Läs status IN/UT" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(0); % Start adress (1-1)
DATA[4] := RWORD(12); % Number of inputs
ANSWER SIZE 7 % ((Number of inputs / 8) + (Rest>0)) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
%DATA[2] = BYTE(2);
DATA[3] -> BYTE(
% IF (DATA & 1) THEN D1 := 1; ELSE D1 := 0; ENDIF;
IF (DATA & 2) THEN D2 := 1; ELSE D2 := 0; ENDIF;
IF (DATA & 4) THEN D3 := 1; ELSE D3 := 0; ENDIF;
IF (DATA & 8) THEN D4 := 1; ELSE D4 := 0; ENDIF;
IF (DATA & 16) THEN D5 := 1; ELSE D5 := 0; ENDIF;
% IF (DATA & 32) THEN D6 := 1; ELSE D6 := 0; ENDIF;
IF (DATA & 64) THEN D7 := 1; ELSE D7 := 0; ENDIF;
IF (DATA & 128) THEN D8 := 1; ELSE D8 := 0; ENDIF;
);
DATA[4] -> BYTE(
IF (DATA & 1) THEN D9 := 1; ELSE D9 := 0; ENDIF;
IF (DATA & 2) THEN D10:= 1; ELSE D10:= 0; ENDIF;
IF (DATA & 4) THEN D11:= 1; ELSE D11:= 0; ENDIF;
IF (DATA & 8) THEN D12:= 1; ELSE D12:= 0; ENDIF;
);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi, Indikation/Alarm inputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-08-05 initial version
%
DEVICETYPE RegioMidiAlarm NAMED "RegioMidi Ind." TYPEID 21371 IS
PARAMETER
Id : "Adress";
PUBLIC
% Indikerar
AL13 : "DIOpenWindow" ; % 13 L,2 öppet fönster
AL14 : "DICondenseAlarm"; % 14 L,2 kondenslarm från digital ingång
AL15 : "DIPresences" ; % 15 L,2 närvaro från digital ingång
AL16 : "DIChangeOver" ; % 16 L,2 change-over från digitalingång
AL17 : "FanSpeed1" ; % 17 L,2 fläkthastighet 1
AL18 : "FanSpeed2" ; % 18 L,2 fläkthastighet 2
AL19 : "FanSpeed3" ; % 19 L,2 fläkthastighet 3
AL20 : "Forcedvent." ; % 20 L,2 forcerad ventilation
AL21 : "CVHeatPulsProp" ; % 21 L,2 pulsprop värme
AL22 : "CVCoolPulsProp" ; % 22 L,2 pulsprop kyla
AL23 : "CVHeatInc" ; % 23 L,2 värme öka
AL24 : "CVHeatDec" ; % 24 L,2 värme minska
AL25 : "CVCoolInc" ; % 25 L,2 kyla öka
AL26 : "CVCoolDec" ; % 26 L,2 kyla minska
AL27 : "ChangeOverAI" ; % 27 L,2 change-over-status från analog ingång
AL28 : "ChangeOverAI/DI"; % 28 L,2 change-over-status från både digital och analog ingång
AL29 : "RoomTempSeAlarm"; % 29 L,2 givarlarm på rumsgivare
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM DigitalAlarm NAMED "Indikering/Larm" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(12); % Start adress (13-1)
DATA[4] := RWORD(17); % Number of inputs
ANSWER SIZE 8 % ((Number of inputs / 8) + (Rest>0)) + 5
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
%DATA[2] = BYTE(3);
DATA[3] -> BYTE(
IF (DATA & 1) THEN AL13:= 1; ELSE AL13:= 0; ENDIF;
IF (DATA & 2) THEN AL14:= 1; ELSE AL14:= 0; ENDIF;
IF (DATA & 4) THEN AL15:= 1; ELSE AL15:= 0; ENDIF;
IF (DATA & 8) THEN AL16:= 1; ELSE AL16:= 0; ENDIF;
IF (DATA & 16) THEN AL17:= 1; ELSE AL17:= 0; ENDIF;
IF (DATA & 32) THEN AL18:= 1; ELSE AL18:= 0; ENDIF;
IF (DATA & 64) THEN AL19:= 1; ELSE AL19:= 0; ENDIF;
IF (DATA & 128) THEN AL20:= 1; ELSE AL20:= 0; ENDIF;
);
DATA[4] -> BYTE(
IF (DATA & 1) THEN AL21:= 1; ELSE AL21:= 0; ENDIF;
IF (DATA & 2) THEN AL22:= 1; ELSE AL22:= 0; ENDIF;
IF (DATA & 4) THEN AL23:= 1; ELSE AL23:= 0; ENDIF;
IF (DATA & 8) THEN AL24:= 1; ELSE AL24:= 0; ENDIF;
IF (DATA & 16) THEN AL25:= 1; ELSE AL25:= 0; ENDIF;
IF (DATA & 32) THEN AL26:= 1; ELSE AL26:= 0; ENDIF;
IF (DATA & 64) THEN AL27:= 1; ELSE AL27:= 0; ENDIF;
IF (DATA & 128) THEN AL28:= 1; ELSE AL28:= 0; ENDIF;
);
DATA[5] -> BYTE(
IF (DATA & 1) THEN AL29:= 1; ELSE AL29:= 0; ENDIF;
);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi Digital outputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-0806 inital version
%
DEVICETYPE RegioMidiDigitalOut NAMED "RegioMidi SetDU" TYPEID 21372 IS
PARAMETER
Id : "Adress";
%DU1 : "Bypass" ; % 1 L,1 0 Sätter enheten i Bypass-läge. Återgår automatiskt efter Bypass-tid (default=120 min).
%DU2 : "ShutDown"; % 2 L,1 0 Sätter enheten i Shutdown-läge
%DU3 : "NotUsedL"; % 3 L,1 0 Används ej
%DU4 : "DiNC(0)" ; % 4 L,1 0 Används ej
%DU5 : "Di1NC" ; % 5 L,1 0 Normalt öppen (NO) eller normalt stängd (NC) på digital ingång 1. 0=NO, 1=NC.
%DU6 : "Di2NC" ; % 6 L,1 1 Normalt öppen (NO) eller normalt stängd (NC) på digital ingång 2. 0=NO, 1=NC.
DU7 : "UDi1NC" ; % 7 L,1 0 Normalt öppen (NO) eller normalt stängd (NC) på universell digital ingång 1. 0=NO, 1=NC.
PUBLIC
PRIVATE
Cnt;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM WriteDISET1 NAMED "Sätt Dig.Status" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(05); % Modbus command "05h" Set coil status (bit)
DATA[2] <- RWORD( %
IF Cnt>8 THEN Cnt:=0; ENDIF;
DATA := 6; % Digital reg 7
%IF Cnt=0 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=1 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=2 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=3 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=4 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=5 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=6 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=7 THEN DATA := 6; % Digital reg 7
%ELSIF Cnt=8 THEN DATA := 6; % Digital reg 7
%ENDIF;
);
DATA[4] <- RWORD(
DATA := DU7;
%IF Cnt=0 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=1 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=2 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=3 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=4 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=5 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=6 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=7 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ELSIF Cnt=8 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
%ENDIF;
Cnt := Cnt + 1;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(05);
TIMEOUT 1000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi Analog inputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Note! Telegram for reading Analog status AI and AO
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2008-10-14 inital version
% History: 2010-06-18 Anpassning för Svensk Styrteknik
%
DEVICETYPE RegioMidiEAnalog NAMED "RegioMidi AI/AU" TYPEID 21373 IS
PARAMETER
Id : "Adress";
PUBLIC
%V1 : "Software" ; % 1 X,4 Typ av Regio mjukvara: 0 = RCP 1 = RC
%V2 : "VerMajor" ; % 2 X,4 Huvudversion
%V3 : "VerMinor" ; % 3 X,4 Mindre version
%V4 : "VerBranch" ; % 4 X,4 Del version
V5 : "Revision" ; % 5 X,4 Revision
V6 : "FanSwitch" ; % 6 X,4 Tillstånd fläktomkopplare
V7 : "UnitState" ; % 7 X,4 Aktuellt driftläge: 0 = Off 1 = Unoccupied 2 = Stand-by 3 = Occupied 4 = ByPass
V8 : "ControllerState" ; % 8 X,4 Aktuell reglering: 0 = Från 1 = Värme 2 = Kyla
V9 : "FanSpeed" ; % 9 X,4 Aktuell fläkthastighet: 0 = Från 1 = Fläkthastighet 1 2 = Fläkthastighet 2 3 = Fläkthastighet 3
%V10 : "NotUsedX" ; % 10 X,4 Används ej
V11 : "RoomTemp" ["°C"]; % 11 R,4 Rumstemperatur
V12 : "RoomTempExt" ["°C"]; % 12 R,4 Rumstemperatur från extern givare
V13 : "RoomTempInt" ["°C"]; % 13 R,4 Rumstemperatur från intern givare
V14 : "AIChangeOver" ["°C"]; % 14 R,4 Change-over-temperatur
V15 : "AnaIn1" ["V"] ; % 15 R,4 Värde på analog ingång 1
V16 : "UAnaIn1" ["V"] ; % 16 R,4 Värde på universell analog ingång 1
V17 : "UAnaOut1" ["V"] ; % 17 R,4 Värde på universell analog utgång 1
V18 : "UAnaOut2" ["V"] ; % 18 R,4 Värde på universell analog utgång 2
V19 : "SetPAdjustment" ["°C"]; % 19 R,4 Börvärdesjustering från intern enhet
V20 : "PIDSetP" ["°C"]; % 20 R,4 Regulatorbörvärde
V21 : "PIDOutput" ["%"] ; % 21 R,4 Regulatorutsignal (0…100%)
V22 : "HeatOutput" ["%"] ; % 22 R,4 Värmeutsignal (0…100%)
V23 : "CoolOutput" ["%"] ; % 23 R,4 Kylutsignal (0…100%)
V24 : "AI1Raw" ["V"] ; % 24 R,4 Råvärde för analog ingång 1
V25 : "UI1Raw" ["V"] ; % 25 R,4 Råvärde för universell ingång 1
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM AnalogInput NAMED "Läs värden" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(04); % Modbus command "04h" Read registers
DATA[2] := RWORD(0); % Start address register
DATA[4] := RWORD(25); % Number of registers
ANSWER SIZE 55 % (Number of registers * 2) + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(04); % Modbus command "04h" Read registers
%DATA[2] = BYTE(50); % Byte count
%DATA[3] -> RWORD(V1 := DATA;);
%DATA[5] -> RWORD(V2 := DATA;);
%DATA[7] -> RWORD(V3 := DATA;);
%DATA[9] -> RWORD(V4 := DATA;);
DATA[11] -> RWORD(V5 := DATA;);
DATA[13] -> RWORD(V6 := DATA;);
DATA[15] -> RWORD(V7 := DATA;);
DATA[17] -> RWORD(V8 := DATA;);
DATA[19] -> RWORD(V9 := DATA;);
%DATA[21] -> RWORD(V10:= DATA;);
DATA[23] -> RWORD(IF (DATA>=32768) THEN V11:=(DATA-65536)/10; ELSE V11:=DATA/10; ENDIF;);
DATA[25] -> RWORD(IF (DATA>=32768) THEN V12:=(DATA-65536)/10; ELSE V12:=DATA/10; ENDIF;);
DATA[27] -> RWORD(IF (DATA>=32768) THEN V13:=(DATA-65536)/10; ELSE V13:=DATA/10; ENDIF;);
DATA[29] -> RWORD(IF (DATA>=32768) THEN V14:=(DATA-65536)/10; ELSE V14:=DATA/10; ENDIF;);
DATA[31] -> RWORD(IF (DATA>=32768) THEN V15:=(DATA-65536)/10; ELSE V15:=DATA/10; ENDIF;);
DATA[33] -> RWORD(IF (DATA>=32768) THEN V16:=(DATA-65536)/10; ELSE V16:=DATA/10; ENDIF;);
DATA[35] -> RWORD(IF (DATA>=32768) THEN V17:=(DATA-65536)/10; ELSE V17:=DATA/10; ENDIF;);
DATA[37] -> RWORD(IF (DATA>=32768) THEN V18:=(DATA-65536)/10; ELSE V18:=DATA/10; ENDIF;);
DATA[39] -> RWORD(IF (DATA>=32768) THEN V19:=(DATA-65536)/10; ELSE V19:=DATA/10; ENDIF;);
DATA[41] -> RWORD(IF (DATA>=32768) THEN V20:=(DATA-65536)/10; ELSE V20:=DATA/10; ENDIF;);
DATA[43] -> RWORD(IF (DATA>=32768) THEN V21:=(DATA-65536)/10; ELSE V21:=DATA/10; ENDIF;);
DATA[45] -> RWORD(IF (DATA>=32768) THEN V22:=(DATA-65536)/10; ELSE V22:=DATA/10; ENDIF;);
DATA[47] -> RWORD(IF (DATA>=32768) THEN V23:=(DATA-65536)/10; ELSE V23:=DATA/10; ENDIF;);
DATA[49] -> RWORD(IF (DATA>=32768) THEN V24:=(DATA-65536)/10; ELSE V24:=DATA/10; ENDIF;);
DATA[51] -> RWORD(IF (DATA>=32768) THEN V25:=(DATA-65536)/10; ELSE V25:=DATA/10; ENDIF;);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for RegioMidi Analog settings
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2010-08-06 inital version
%
DEVICETYPE RegioMidiSet NAMED "RegioMidi Ställ" TYPEID 21274 IS
PARAMETER
Id : "Adress";
S13 : "ChangeOverSel." ; % 13 X,3 2 Manuell/Auto change-over (0=Värme, 1=Kyla, 2=Auto)
PUBLIC
PRIVATE
Cnt;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM Settings1 NAMED "Ställ värden" IS
QUESTION
DATA[0] := BYTE(Id);
DATA[1] := HEX(06); %Write singel register
DATA[2] <- RWORD( %Start adress (regnr-1)
IF Cnt>8 THEN Cnt:=0; ENDIF;
%% Adress=Register-1
DATA := 12;
%IF Cnt=0 THEN DATA := 12; % S13 Manuell/Auto change-over (0=Värme, 1=Kyla, 2=Auto)
%ELSIF Cnt=1 THEN DATA := 12; % S13
%ELSIF Cnt=2 THEN DATA := 12; % S13
%ELSIF Cnt=3 THEN DATA := 12; % S13
%ELSIF Cnt=4 THEN DATA := 12; % S13
%ELSIF Cnt=5 THEN DATA := 12; % S13
%ELSIF Cnt=6 THEN DATA := 12; % S13
%ELSIF Cnt=7 THEN DATA := 12; % S13
%ELSE DATA := 12; % S13
%ENDIF;
);
DATA[4] <- RWORD(
%IF Cnt=0 THEN
IF S13<0 THEN DATA := 2; % S13 Manuell/Auto change-over (0=Värme, 1=Kyla, 2=Auto)% S0 =
ELSIF S13>2 THEN DATA := 2;
ELSE DATA := S13;
ENDIF;
%ELSIF Cnt=1 THEN
% IF S24<20 THEN DATA := 200; % S0 =
% ELSIF S24>750 THEN DATA := 7500;
% ELSE DATA := S24*10;
% ENDIF;
%ELSIF Cnt=2 THEN
% IF S25<20 THEN DATA := 200; % S0 =
% ELSIF S25>750 THEN DATA := 7500;
% ELSE DATA := 25*10;
% ENDIF;
%ELSIF Cnt=3 THEN
% IF S26<20 THEN DATA := 200; % S0 =
% ELSIF S26>750 THEN DATA := 7500;
% ELSE DATA := S26*10;
% ENDIF;
%ELSIF Cnt=4 THEN
% IF S27<20 THEN DATA := 200; % S0 =
% ELSIF S27>750 THEN DATA := 7500;
% ELSE DATA := S27*10;
% ENDIF;
%ELSIF Cnt=5 THEN
% IF S1<10 THEN DATA := 100; % S0 =
% ELSIF S1>40 THEN DATA := 400;
% ELSE DATA := S1*10;
% ENDIF;
%ELSIF Cnt=6 THEN
% IF S33<10 THEN DATA := 100; % S0 =
% ELSIF S33>40 THEN DATA := 400;
% ELSE DATA := S33*10;
% ENDIF;
%ELSIF Cnt=7 THEN
% IF S34<4 THEN DATA := 40; % S0 =
% ELSIF S34>40 THEN DATA := 400;
% ELSE DATA := S34*10;
% ENDIF;
%ELSE
% IF S439<10 THEN DATA := 100; % S0 =
% ELSIF S439>40 THEN DATA := 400;
% ELSE DATA := S439*10;
% ENDIF;
%
%ENDIF;
Cnt := Cnt + 1;
IF Cnt>8 THEN Cnt := 0;
ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(06);
TIMEOUT 2000
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.