Regin EXOLINE
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 1
- Uppdaterad
- 2013-08-28
- Skapad
- 2013-08-28
- Kategori
- Kyla, Modbus, Övrig utrustning, Värme, Ventilation
- Visningar
- 2927
Beskrivning
Drivrutin
Bruksanvisning
Hur man installerar typdefinitionerna och driftsätter modulerna finns beskrivet i användarmanualen, kapitel 18.7.
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
DEVICETYPE ReginAnalog NAMED "Regin analog" TYPEID 21408 IS
PARAMETER
Id : "Adress";
PUBLIC
V1 : "AI_SupplyTemp" ["°C"]DEC1;
V2 : "AI_ExhaustTemp" ["°C"]DEC1;
V3 : "AI_FrostTemp" ["°C"]DEC1;
V4 : "AI_OutDoorTemp" ["°C"]DEC1;
V5 : "AI_AI1" ["°C"]DEC1;
V6 : "AI_AI2" ["°C"]DEC1;
V7 : "AI_AI3" ["°C"]DEC1;
V8 : "AI_AI4" ["°C"]DEC1;
V9 : "AOHeatingOutput" ["°C"]DEC1;
V10 : "AOCoolingOutput" ["°C"]DEC1;
V11 : "AORotatingSpeed" ["%"]DEC1;
V12 : "AO_AQ1" ["%"]DEC1;
V13 : "AO_AQ2" ["%"]DEC1;
V14 : "AO_AQ3" ["%"]DEC1;
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM AnalogInput NAMED "Läs analog" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(04); % Modbus command "04h" Read registers
DATA[2] := RWORD(1); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(14); % Number of registers
ANSWER SIZE 33 % antal register *2 + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(04); % Modbus command "04h" Read registers
DATA[2] = BYTE(28); % Byte count
DATA[3] -> RWORD(IF (DATA>=32768) THEN V1:=(DATA-65536)/10; ELSE V1:=DATA/10; ENDIF;); % V1: "AI_SupplyTemp" ["°C"]
DATA[5] -> RWORD(IF (DATA>=32768) THEN V2:=(DATA-65536)/10; ELSE V2:=DATA/10; ENDIF;); % V2: "AI_ExhaustAirTemp" ["°C"]
DATA[7] -> RWORD(IF (DATA>=32768) THEN V3:=(DATA-65536)/10; ELSE V3:=DATA/10; ENDIF;); % V3: "AI_FrostProtectionTemp" ["°C"];
DATA[9] -> RWORD(IF (DATA>=32768) THEN V4:=(DATA-65536)/10; ELSE V4:=DATA/10; ENDIF;); % V4: "AI_OutDoorTemp" ["°C"];
DATA[11] -> RWORD(IF (DATA>=32768) THEN V5:=(DATA-65536)/10; ELSE V5:=DATA/10; ENDIF;); % V5: "AI_AI1" ["°C"];
DATA[13] -> RWORD(IF (DATA>=32768) THEN V6:=(DATA-65536)/10; ELSE V6:=DATA/10; ENDIF;); % V6: "AI_AI2" ["°C"];
DATA[15] -> RWORD(IF (DATA>=32768) THEN V7:=(DATA-65536)/10; ELSE V7:=DATA/10; ENDIF;); % V7: "AI_AI3" ["°C"];
DATA[17] -> RWORD(IF (DATA>=32768) THEN V8:=(DATA-65536)/10; ELSE V8:=DATA/10; ENDIF;); % V8: "AI_AI4" ["°C"];
DATA[19] -> RWORD(IF (DATA>=32768) THEN V9:=(DATA-65536)/10; ELSE V9:=DATA/10; ENDIF;); % V9: "AO_Heating_Output" ["°C"];
DATA[21] -> RWORD(IF (DATA>=32768) THEN V10:=(DATA-65536)/10; ELSE V10:=DATA/10; ENDIF;); % 10* V10: "AO_Cooling_Output" ["°C"];
DATA[23] -> RWORD(V11:= DATA / 10;); % V11: "AO_RotatingSpeed" ["%"];
DATA[25] -> RWORD(V12:= DATA / 10;); % V12: "AO_AQ1" [""];
DATA[27] -> RWORD(V13:= DATA / 10;); % V13: "AO_AQ2" [""];
DATA[29] -> RWORD(V14:= DATA / 10;); % V14: "AO_AQ3" [""];
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for REGIN EXOLINE settings
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2011-03-15 initial version
%
DEVICETYPE ReginOutput NAMED "Regin ställ" TYPEID 21409 IS
PARAMETER
Id :"Adress";
S1 :"Unitmode" [""]; % 0=Manual off, 1=Manual low, 2=Manual medium, 3=Manual high, 4(default)=Auto
S2 :"SetPoint_M20" ["°C"]; %Outdoortemp.comp At -20, default=20
S3 :"SetPoint_M15" ["°C"]; %Outdoortemp.comp At +15, default=0
S4 :"MinSupplyTemp"["°C"]; %Supply setpoint Min
S5 :"MaxSupplyTemp"["°C"]; %Supply setpoint Max
PUBLIC
%V1 :"Unitmode" [""];
%V2 :"SetPoint_M20" ["°C"];
%V3 :"SetPoint_M15" ["°C"];
%V4 :"MinSupplyTemp"["°C"];
%V5 :"MaxSupplyTemp"["°C"];
PRIVATE
Cnt;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM WriteSet NAMED "Ställ värden" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := BYTE(6); % Modbus command "0x06" write singel register
DATA[2] <- RWORD( % Register address
Cnt:=Cnt+1;
IF Cnt>4 THEN Cnt:=0; ENDIF; % OBS!! Register adress = Modbusadress in spec
IF Cnt=0 THEN DATA:=2; % Register 2 Unitmode
ELSIF Cnt=1 THEN DATA:=21; % Register 21 SetPoint_M20
ELSIF Cnt=2 THEN DATA:=22; % Register 22 SetPoint_M15
ELSIF Cnt=3 THEN DATA:=23; % Register 23 MinSupplyTemp
ELSIF Cnt=4 THEN DATA:=24; % Register 24 MaxSupplyTemp
ENDIF;
);
DATA[4] <- RWORD( % Register value
IF Cnt=0 THEN DATA:=S1; % Register 2 Unitmode
ELSIF Cnt=1 THEN DATA:=S2; % Register 21 SetPoint_M20
ELSIF Cnt=2 THEN DATA:=S3; % Register 22 SetPoint_M15
ELSIF Cnt=3 THEN DATA:=S4; % Register 23 MinSupplyTemp
ELSIF Cnt=4 THEN DATA:=S5; % Register 24 MaxSupplyTemp
ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = BYTE(6);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for REGIN EXOLINE Digital inputs/outputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2008-10-23 initial version
%
DEVICETYPE ReginDigital NAMED "Regin DI/DU" TYPEID 21407 IS
PARAMETER
Id : "Adress";
Ack : "Kvittera";
PUBLIC
DI0 : "Unit_OffOn"; % Off, On
DI1 : "Fan_alarm"; % On, Off, Inverted
DI2 : "Overheat"; % Off, On
DI3 : "Timer_push"; % Off, On
DI4 : "AlarmExchanger"; % Off, On
DI5 : "FireAlarm"; % Off, On
DI6 : "Fanspeed_Low"; % Off, On
DI7 : "Fanspeed_Medium"; % Off, On
DI8 : "Fanspeed_High"; % Off, On
DI9 : "Exchanger"; % Off, On
DI10 : "Alarm_Filter"; % Alarm no. 1
DI11 : "Alarm_Fan_motor"; % Alarm no. 2
DI12 : "Alarm_Overheat"; % Alarm no. 3
DI13 : "Alarm_Exchanger"; % Alarm no. 4
DI14 : "Alarm_Fire"; % Alarm no. 6
DI15 : "Alarm_FrostProt"; % Alarm no. 7
DI16 : "SensErrorSupply"; % Alarm no. 8
DI17 : "SensErrorExhaust"; % Alarm no. 9
DI18 : "SensErrorFrost"; % Alarm no. 10
DI19 : "SensErrorOuttemp"; % Alarm no. 11
PRIVATE
Started;
MAck;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM DigitalInput NAMED "Digital status" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(1); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(10); % Number of inputs
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
DATA[3] -> BYTE(IF (DATA & 1) THEN DI0 := 1; ELSE DI0 := 0; ENDIF;
IF (DATA & 2) THEN DI1 := 1; ELSE DI1 := 0; ENDIF;
IF (DATA & 4) THEN DI2 := 1; ELSE DI2 := 0; ENDIF;
IF (DATA & 8) THEN DI3 := 1; ELSE DI3 := 0; ENDIF;
IF (DATA & 16) THEN DI4 := 1; ELSE DI4 := 0; ENDIF;
IF (DATA & 32) THEN DI5 := 1; ELSE DI5 := 0; ENDIF;
IF (DATA & 64) THEN DI6 := 1; ELSE DI6 := 0; ENDIF;
IF (DATA & 128) THEN DI7 := 1; ELSE DI7 := 0; ENDIF;
);
DATA[4] -> BYTE(IF (DATA & 1) THEN DI8 := 1; ELSE DI8 := 0; ENDIF;
IF (DATA & 2) THEN DI9 := 1; ELSE DI9 := 0; ENDIF;
);
TIMEOUT 2000
END;
TELEGRAM AlarmInput NAMED "Alarm status" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(50); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(11); % Number of inputs
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
DATA[3] -> BYTE(IF (DATA & 1) THEN DI10 := 1; ELSE DI10 := 0; ENDIF; %1
IF (DATA & 2) THEN DI11 := 1; ELSE DI11 := 0; ENDIF; %2
IF (DATA & 4) THEN DI12 := 1; ELSE DI12 := 0; ENDIF; %3
IF (DATA & 8) THEN DI13 := 1; ELSE DI13 := 0; ENDIF; %4
%IF (DATA & 16) THEN DIxx := 1; ELSE DIxx := 0; ENDIF; % Hoppa över 5 (16) eftersom den inte används
IF (DATA & 32) THEN DI14 := 1; ELSE DI14 := 0; ENDIF; %6
IF (DATA & 64) THEN DI15 := 1; ELSE DI15 := 0; ENDIF; %7
IF (DATA & 128) THEN DI16 := 1; ELSE DI16 := 0; ENDIF; %8
);
DATA[4] -> BYTE(IF (DATA & 1) THEN DI17 := 1; ELSE DI17 := 0; ENDIF; %9
IF (DATA & 2) THEN DI18 := 1; ELSE DI18 := 0; ENDIF; %10
IF (DATA & 4) THEN DI19 := 1; ELSE DI19 := 0; ENDIF; %11
);
TIMEOUT 2000
END;
TELEGRAM SendAcknowledge NAMED "Kvittera larm" IS
QUESTION
DATA[0] := BYTE(Id);
DATA[1] := BYTE(6); %Write singel register
DATA[2] := RWORD(150); %Adress 150, OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(1); %Set RESET
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = BYTE(6);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GROUP SendAckGroup OF MAX 5 DEVICE TYPEID 21407
SELECT ALL
ITERATOR SendAck
ALIAS
BEGIN
IF (Started) THEN
IF (Ack > MAck) THEN
SEND SendAcknowledge;
ELSE
SILENCE SendAcknowledge;
ENDIF;
MAck := Ack;
ELSE
SILENCE SendAcknowledge;
MAck := Ack;
Started := 1;
ENDIF;
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ROUTINE Acknowledge
BEGIN
CALL SendAckGroup.SendAck;
END;
PARAMETER
Id : "Adress";
PUBLIC
V1 : "AI_SupplyTemp" ["°C"]DEC1;
V2 : "AI_ExhaustTemp" ["°C"]DEC1;
V3 : "AI_FrostTemp" ["°C"]DEC1;
V4 : "AI_OutDoorTemp" ["°C"]DEC1;
V5 : "AI_AI1" ["°C"]DEC1;
V6 : "AI_AI2" ["°C"]DEC1;
V7 : "AI_AI3" ["°C"]DEC1;
V8 : "AI_AI4" ["°C"]DEC1;
V9 : "AOHeatingOutput" ["°C"]DEC1;
V10 : "AOCoolingOutput" ["°C"]DEC1;
V11 : "AORotatingSpeed" ["%"]DEC1;
V12 : "AO_AQ1" ["%"]DEC1;
V13 : "AO_AQ2" ["%"]DEC1;
V14 : "AO_AQ3" ["%"]DEC1;
PRIVATE
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM AnalogInput NAMED "Läs analog" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(04); % Modbus command "04h" Read registers
DATA[2] := RWORD(1); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(14); % Number of registers
ANSWER SIZE 33 % antal register *2 + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(04); % Modbus command "04h" Read registers
DATA[2] = BYTE(28); % Byte count
DATA[3] -> RWORD(IF (DATA>=32768) THEN V1:=(DATA-65536)/10; ELSE V1:=DATA/10; ENDIF;); % V1: "AI_SupplyTemp" ["°C"]
DATA[5] -> RWORD(IF (DATA>=32768) THEN V2:=(DATA-65536)/10; ELSE V2:=DATA/10; ENDIF;); % V2: "AI_ExhaustAirTemp" ["°C"]
DATA[7] -> RWORD(IF (DATA>=32768) THEN V3:=(DATA-65536)/10; ELSE V3:=DATA/10; ENDIF;); % V3: "AI_FrostProtectionTemp" ["°C"];
DATA[9] -> RWORD(IF (DATA>=32768) THEN V4:=(DATA-65536)/10; ELSE V4:=DATA/10; ENDIF;); % V4: "AI_OutDoorTemp" ["°C"];
DATA[11] -> RWORD(IF (DATA>=32768) THEN V5:=(DATA-65536)/10; ELSE V5:=DATA/10; ENDIF;); % V5: "AI_AI1" ["°C"];
DATA[13] -> RWORD(IF (DATA>=32768) THEN V6:=(DATA-65536)/10; ELSE V6:=DATA/10; ENDIF;); % V6: "AI_AI2" ["°C"];
DATA[15] -> RWORD(IF (DATA>=32768) THEN V7:=(DATA-65536)/10; ELSE V7:=DATA/10; ENDIF;); % V7: "AI_AI3" ["°C"];
DATA[17] -> RWORD(IF (DATA>=32768) THEN V8:=(DATA-65536)/10; ELSE V8:=DATA/10; ENDIF;); % V8: "AI_AI4" ["°C"];
DATA[19] -> RWORD(IF (DATA>=32768) THEN V9:=(DATA-65536)/10; ELSE V9:=DATA/10; ENDIF;); % V9: "AO_Heating_Output" ["°C"];
DATA[21] -> RWORD(IF (DATA>=32768) THEN V10:=(DATA-65536)/10; ELSE V10:=DATA/10; ENDIF;); % 10* V10: "AO_Cooling_Output" ["°C"];
DATA[23] -> RWORD(V11:= DATA / 10;); % V11: "AO_RotatingSpeed" ["%"];
DATA[25] -> RWORD(V12:= DATA / 10;); % V12: "AO_AQ1" [""];
DATA[27] -> RWORD(V13:= DATA / 10;); % V13: "AO_AQ2" [""];
DATA[29] -> RWORD(V14:= DATA / 10;); % V14: "AO_AQ3" [""];
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for REGIN EXOLINE settings
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2011-03-15 initial version
%
DEVICETYPE ReginOutput NAMED "Regin ställ" TYPEID 21409 IS
PARAMETER
Id :"Adress";
S1 :"Unitmode" [""]; % 0=Manual off, 1=Manual low, 2=Manual medium, 3=Manual high, 4(default)=Auto
S2 :"SetPoint_M20" ["°C"]; %Outdoortemp.comp At -20, default=20
S3 :"SetPoint_M15" ["°C"]; %Outdoortemp.comp At +15, default=0
S4 :"MinSupplyTemp"["°C"]; %Supply setpoint Min
S5 :"MaxSupplyTemp"["°C"]; %Supply setpoint Max
PUBLIC
%V1 :"Unitmode" [""];
%V2 :"SetPoint_M20" ["°C"];
%V3 :"SetPoint_M15" ["°C"];
%V4 :"MinSupplyTemp"["°C"];
%V5 :"MaxSupplyTemp"["°C"];
PRIVATE
Cnt;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM WriteSet NAMED "Ställ värden" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := BYTE(6); % Modbus command "0x06" write singel register
DATA[2] <- RWORD( % Register address
Cnt:=Cnt+1;
IF Cnt>4 THEN Cnt:=0; ENDIF; % OBS!! Register adress = Modbusadress in spec
IF Cnt=0 THEN DATA:=2; % Register 2 Unitmode
ELSIF Cnt=1 THEN DATA:=21; % Register 21 SetPoint_M20
ELSIF Cnt=2 THEN DATA:=22; % Register 22 SetPoint_M15
ELSIF Cnt=3 THEN DATA:=23; % Register 23 MinSupplyTemp
ELSIF Cnt=4 THEN DATA:=24; % Register 24 MaxSupplyTemp
ENDIF;
);
DATA[4] <- RWORD( % Register value
IF Cnt=0 THEN DATA:=S1; % Register 2 Unitmode
ELSIF Cnt=1 THEN DATA:=S2; % Register 21 SetPoint_M20
ELSIF Cnt=2 THEN DATA:=S3; % Register 22 SetPoint_M15
ELSIF Cnt=3 THEN DATA:=S4; % Register 23 MinSupplyTemp
ELSIF Cnt=4 THEN DATA:=S5; % Register 24 MaxSupplyTemp
ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = BYTE(6);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for REGIN EXOLINE Digital inputs/outputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2008-10-23 initial version
%
DEVICETYPE ReginDigital NAMED "Regin DI/DU" TYPEID 21407 IS
PARAMETER
Id : "Adress";
Ack : "Kvittera";
PUBLIC
DI0 : "Unit_OffOn"; % Off, On
DI1 : "Fan_alarm"; % On, Off, Inverted
DI2 : "Overheat"; % Off, On
DI3 : "Timer_push"; % Off, On
DI4 : "AlarmExchanger"; % Off, On
DI5 : "FireAlarm"; % Off, On
DI6 : "Fanspeed_Low"; % Off, On
DI7 : "Fanspeed_Medium"; % Off, On
DI8 : "Fanspeed_High"; % Off, On
DI9 : "Exchanger"; % Off, On
DI10 : "Alarm_Filter"; % Alarm no. 1
DI11 : "Alarm_Fan_motor"; % Alarm no. 2
DI12 : "Alarm_Overheat"; % Alarm no. 3
DI13 : "Alarm_Exchanger"; % Alarm no. 4
DI14 : "Alarm_Fire"; % Alarm no. 6
DI15 : "Alarm_FrostProt"; % Alarm no. 7
DI16 : "SensErrorSupply"; % Alarm no. 8
DI17 : "SensErrorExhaust"; % Alarm no. 9
DI18 : "SensErrorFrost"; % Alarm no. 10
DI19 : "SensErrorOuttemp"; % Alarm no. 11
PRIVATE
Started;
MAck;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM DigitalInput NAMED "Digital status" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(1); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(10); % Number of inputs
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
DATA[3] -> BYTE(IF (DATA & 1) THEN DI0 := 1; ELSE DI0 := 0; ENDIF;
IF (DATA & 2) THEN DI1 := 1; ELSE DI1 := 0; ENDIF;
IF (DATA & 4) THEN DI2 := 1; ELSE DI2 := 0; ENDIF;
IF (DATA & 8) THEN DI3 := 1; ELSE DI3 := 0; ENDIF;
IF (DATA & 16) THEN DI4 := 1; ELSE DI4 := 0; ENDIF;
IF (DATA & 32) THEN DI5 := 1; ELSE DI5 := 0; ENDIF;
IF (DATA & 64) THEN DI6 := 1; ELSE DI6 := 0; ENDIF;
IF (DATA & 128) THEN DI7 := 1; ELSE DI7 := 0; ENDIF;
);
DATA[4] -> BYTE(IF (DATA & 1) THEN DI8 := 1; ELSE DI8 := 0; ENDIF;
IF (DATA & 2) THEN DI9 := 1; ELSE DI9 := 0; ENDIF;
);
TIMEOUT 2000
END;
TELEGRAM AlarmInput NAMED "Alarm status" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(02); % Modbus command "02h" read discrete input (bit)
DATA[2] := RWORD(50); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(11); % Number of inputs
ANSWER SIZE 7
DATA[0] = BYTE(Id);
DATA[1] = HEX(02);
DATA[3] -> BYTE(IF (DATA & 1) THEN DI10 := 1; ELSE DI10 := 0; ENDIF; %1
IF (DATA & 2) THEN DI11 := 1; ELSE DI11 := 0; ENDIF; %2
IF (DATA & 4) THEN DI12 := 1; ELSE DI12 := 0; ENDIF; %3
IF (DATA & 8) THEN DI13 := 1; ELSE DI13 := 0; ENDIF; %4
%IF (DATA & 16) THEN DIxx := 1; ELSE DIxx := 0; ENDIF; % Hoppa över 5 (16) eftersom den inte används
IF (DATA & 32) THEN DI14 := 1; ELSE DI14 := 0; ENDIF; %6
IF (DATA & 64) THEN DI15 := 1; ELSE DI15 := 0; ENDIF; %7
IF (DATA & 128) THEN DI16 := 1; ELSE DI16 := 0; ENDIF; %8
);
DATA[4] -> BYTE(IF (DATA & 1) THEN DI17 := 1; ELSE DI17 := 0; ENDIF; %9
IF (DATA & 2) THEN DI18 := 1; ELSE DI18 := 0; ENDIF; %10
IF (DATA & 4) THEN DI19 := 1; ELSE DI19 := 0; ENDIF; %11
);
TIMEOUT 2000
END;
TELEGRAM SendAcknowledge NAMED "Kvittera larm" IS
QUESTION
DATA[0] := BYTE(Id);
DATA[1] := BYTE(6); %Write singel register
DATA[2] := RWORD(150); %Adress 150, OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(1); %Set RESET
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = BYTE(6);
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GROUP SendAckGroup OF MAX 5 DEVICE TYPEID 21407
SELECT ALL
ITERATOR SendAck
ALIAS
BEGIN
IF (Started) THEN
IF (Ack > MAck) THEN
SEND SendAcknowledge;
ELSE
SILENCE SendAcknowledge;
ENDIF;
MAck := Ack;
ELSE
SILENCE SendAcknowledge;
MAck := Ack;
Started := 1;
ENDIF;
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ROUTINE Acknowledge
BEGIN
CALL SendAckGroup.SendAck;
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.