Novenco Luftbehandlingsaggregat

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
3
Uppdaterad
2013-08-28
Skapad
2013-08-27
Kategori
Kyla, Modbus, Värme, Ventilation
Visningar
2940

Beskrivning

Drivrutin baserad på ZCF_gen2_mu14159

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for NOVENCO read input registers 1-56
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU
%
% Note! Telegram for reading Analog status
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2008-01-03 inital version
%
DEVICETYPE NovencoRead1 NAMED "Novenco ReadAI1" TYPEID 21320 IS

  PARAMETER
    Id         : "Address";

  PUBLIC
                          %Address Min  Max  Factor Desription

    R1  : "DriftMode"      [""]   ; %3x0001  0    500         Current DriftMode 000-099:Agg Stop
                                    %                                           100-199:Agg Lo Speed
                                    %                                           200-299:Agg Hi Speed
                                    %                                           300-399:Spec RegMode
    R3  : "SupDuctPa"      ["Pa"] ; %3x0003  0   2000         Supply DuctPressure (Calc from PressSignal)
   %R4  : "SupDuctPaRgSet" ["Pa"] ; %3x0004  0   2000         Regulator SetPoint for DuctPressReg
    R5  : "ExtDuctPa"      ["Pa"] ; %3x0005  0   2000         Extract DuctPressure (Calc from PressSignal)
   %R6  : "ExtDuctPaRgSet" ["Pa"] ; %3x0006  0   2000         Regulator SetPoint for DuctPressReg
    R7  : "SupFlow"        ["l/s"]; %3x0007  0   30000        Current SupplyFlow
   %R8  : "SupFlowRegSet"  ["l/s"]; %3x0008  250 30000        Regulator SupplyFlow-Set
    R9  : "ExtFlow"        ["l/s"]; %3x0009  0   30000        Current ExtractFlow
   %R10 : "ExtFlowRegSet"  ["l/s"]; %3x0010  0   30000        Regulator ExtractFlow-Set
    R11 : "CO2_ppmMeasure" ["ppm"]; %3x0011  0   10000        CO2 Sensor ppm Measure
    R20 : "SupTemp"        ["°C"] ; %3x0020  0   4000  1/100  Current SupplyTemp
   %R21 : "SupTempRegSet"  ["°C"] ; %3x0021  0   4000  1/100  Regulator SupplyTemp-Set
    R22 : "ExtTemp"        ["°C"] ; %3x0022  0   4000  1/100  Current ExtractTemp
   %R23 : "ExtTempRegSet"  ["°C"] ; %3x0023  10  4000  1/100  Regulator ExtractTemp-Set
    R24 : "OutDoorTemp"    ["°C"] ; %3x0024  0   4000  1/100  Current OutDoorTemp
    R25 : "RoomTemp"       ["°C"] ; %3x0025  0   4000  1/100  Current RoomTemp (External Sens)
    R26 : "ExhaustTemp"    ["°C"] ; %3x0026  0   4000  1/100  Current ExhaustTemp
    R29 : "BattEXC_Temp"   ["°C"] ; %3x0029  0   6000  1/100  WaterBatt Temp after EXC
    R30 : "HW_BattTemp "   ["°C"] ; %3x0030  0   4000  1/100  Current HeatWaterBattTemp
    R31 : "SupFiltPaAvr"   ["Pa"] ; %3x0031  0   2000         Supply FilterPressure (Avr-Meas)
    R32 : "ExtFiltPaAvr"   ["Pa"] ; %3x0032  0   2000         Extract FilterPressure (Avr-Meas)
    R34 : "SupMotorSet"    ["%"]  ; %3x0034  0   10000        Supply MotorSignal
    R36 : "ExtMotorSet"    ["%"]  ; %3x0036  0   10000        Extract MotorSignal
    R53 : "HeatEXCPower"   ["%"]  ; %3x0053  0   10000 1/100  EXC-Regulator HeatPower
    R54 : "HeatPower"      ["%"]  ; %3x0054  0   10000 1/100  AfterHeat-Regulator Power
    R55 : "CoolPower"      ["%"]  ; %3x0055  0   10000 1/100  Cool Regulator Power
   %R56 : "CoolActPower"   ["%"]  ; %3x0056  0   10000 1/100  Actual Cool-Power
                                    %                         By ON/OFF (DX) Cool Reg are actual power depending on
                                    %                         RE ON (Step)

  PRIVATE

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;

  TELEGRAM AnalogInput1 NAMED "Read reg. 1-56" 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(56);     % Number of registers

    ANSWER SIZE 117
      DATA[0]   = BYTE(Id);      % ID
      DATA[1]   = HEX(04);       % Modbus command "04h" Read registers
     %DATA[2]   = BYTE(112);     % Byte count
      DATA[3]  -> RWORD(R1  := DATA;);        %DriftMode
      DATA[7]  -> RWORD(R3  := DATA;);        %SupDuctPa
     %DATA[9]  -> RWORD(R4  := DATA;);        %SupDuctPaRgSet
      DATA[11] -> RWORD(R5  := DATA;);        %ExtDuctPa
     %DATA[13] -> RWORD(R6  := DATA;);        %ExtDuctPaRgSet
      DATA[15] -> RWORD(R7  := DATA;);        %SupFlow
     %DATA[17] -> RWORD(R8  := DATA;);        %SupFlowRegSet
      DATA[19] -> RWORD(R9  := DATA;);        %ExtFlow
     %DATA[21] -> RWORD(R10  := DATA;);       %ExtFlowRegSet
      DATA[23] -> RWORD(R11 := DATA;);        %CO2_ppmMeas
      DATA[41] -> RWORD(R20 := DATA /100;);   %SupTemp       1/100
     %DATA[43] -> RWORD(R21 := DATA /100;);   %SupTempRegSet 1/100
      DATA[45] -> RWORD(R22 := DATA /100;);   %ExtTemp       1/100
     %DATA[47] -> RWORD(R23 := DATA /100;);   %ExtTempRegSet 1/100
      DATA[49] -> RWORD(R24 := DATA /100;);   %OutDoorTemp   1/100
      DATA[51] -> RWORD(R25 := DATA /100;);   %RoomTemp      1/100
      DATA[53] -> RWORD(R26 := DATA /100;);   %ExhaustTemp   1/100
      DATA[59] -> RWORD(R29 := DATA /100;);   %BattEXC_Temp  1/100
      DATA[61] -> RWORD(R30 := DATA /100;);   %HW_BattTemp   1/100
      DATA[63] -> RWORD(R31 := DATA;);        %SupFiltPaAvr
      DATA[65] -> RWORD(R32 := DATA;);        %ExtFiltPaAvr
      DATA[69] -> RWORD(R34 := DATA;);        %SupMotorSet
      DATA[73] -> RWORD(R36 := DATA;);        %ExtMotorSet
      DATA[107]-> RWORD(R53 := DATA /100;);   %HeatEXCPower  1/100
      DATA[109]-> RWORD(R54 := DATA /100;);   %HeatPower     1/100
      DATA[111]-> RWORD(R55 := DATA /100;);   %CoolPower     1/100
     %DATA[113]-> RWORD(R56 := DATA /100;);   %CoolActPower  1/100

    TIMEOUT 1000

  END;

END;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for NOVENCO read input registers 73-97
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU
%
% Note! Telegram for reading Analog status
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2008-01-03 inital version
%
DEVICETYPE NovencoRead2 NAMED "Novenco ReadAI2" TYPEID 21321 IS

  PARAMETER
    Id         : "Address";

  PUBLIC
                          %Address Min  Max  Factor Desription

    R73 : "FCsupMtrPrcOut" ["%"]   ; %3x0073  0   10000 1/100  SupplyMotor Percent Output
    R74 : "FCsupMtrHzOut"  ["Hz"]  ; %3x0074  0   10000 1/100  SupplyMotor Frequency Output
    R75 : "FCsupMtrIout"   ["mA"]  ; %3x0075  0   30000        SupplyMotor Output Current
    R76 : "FCsupMtrPowOut" ["W"]   ; %3x0076  0   6000         SupplyMotor Output Power
    R77 : "FCsupMtrPrcSet" ["%"]   ; %3x0077  0   10000        SupplyMotor Output Set
    R78 : "SupSFP"         ["J/m3"]; %3x0078  0   10000        Supply SFP
    R83 : "FCextMtrPrcOut" ["%"]   ; %3x0083  0   10000 1/100  ExtractMotor Percent Output
    R84 : "FCextMtrHzOut"  ["Hz"]  ; %3x0084  0   10000 1/100  ExtractMotor Frequency Output
    R85 : "FCextMtrIout"   ["mA"]  ; %3x0085  0   30000        ExtractMotor Output Current
    R86 : "FCextMtrPowOut" ["W"]   ; %3x0086  0   6000         ExtractMotor Output Power
    R87 : "FCextMtrPrcSet" ["%"]   ; %3x0087  0   10000        ExtractMotor Output Set
    R88 : "ExtSFP"         ["J/m3"]; %3x0088  0   10000        Extract SFP
    R92 : "EXC_PrcOut"     ["%"]   ; %3x0092  0   10000 1/100  EXC-Percent Out
    R93 : "EXC_RpmOut"     ["RPM"] ; %3x0093  0   20000 1/100  EXC-RpmOutput
    R97 : "EXC_PrcSet"     ["%"]   ; %3x0097  0   10000 1/100  EXC-PercentSet

  PRIVATE

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;

  TELEGRAM AnalogInput2 NAMED "Read reg. 73-97" IS
    QUESTION
      DATA[0]  := BYTE(Id);      % Modbus unit address
      DATA[1]  := HEX(04);       % Modbus command "04h" Read registers
      DATA[2]  := RWORD(72);     % Start address register 73
      DATA[4]  := RWORD(25);     % Number of registers    73-97

    ANSWER SIZE 55
      DATA[0]   = BYTE(Id);      % ID
      DATA[1]   = HEX(04);       % Modbus command "04h" Read registers
     %DATA[2]   = BYTE(50);      % Byte count
      DATA[3]  -> RWORD(R73 := DATA / 100;);  %FCsupMtrPrcOut 1/100
      DATA[5]  -> RWORD(R74 := DATA / 100;);  %FCsupMtrHzOut  1/100
      DATA[7]  -> RWORD(R75 := DATA;);        %FCsupMtrIout
      DATA[9]  -> RWORD(R76 := DATA;);        %FCsupMtrPowOut
      DATA[11] -> RWORD(R77 := DATA;);        %FCsupMtrPrcSet
      DATA[13] -> RWORD(R78 := DATA;);        %SupSFP
      DATA[23] -> RWORD(R83 := DATA / 100;);  %FCextMtrPrcOut 1/100
      DATA[25] -> RWORD(R84 := DATA / 100;);  %FCextMtrHzOut  1/100
      DATA[27] -> RWORD(R85 := DATA;);        %FCextMtrIout
      DATA[29] -> RWORD(R86 := DATA;);        %FCextMtrPowOut
      DATA[31] -> RWORD(R87 := DATA;);        %FCextMtrPrcSet
      DATA[33] -> RWORD(R88 := DATA;);        %ExtSFP
      DATA[41] -> RWORD(R92 := DATA / 100;);  %EXC_PrcOut     1/100
      DATA[43] -> RWORD(R93 := DATA / 100;);  %EXC_RpmOut     1/100
      DATA[51] -> RWORD(R97 := DATA / 100;);  %EXC_PrcSet     1/100

    TIMEOUT 1000

  END;

END;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for NOVENCO set register 1-55
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU
%
% Note! Telegram for setting register values
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2009-09-03 inital version
%
DEVICETYPE NovencoSetReg1 NAMED "Novenco SetPRES" TYPEID 21322 IS

  PARAMETER

   Id   : "Address";

  %%%%%%%%%%%%%%%%
                                    %Address Min  Max  Factor Desription
   SR1  : "ManDriftMode"          ; %4x0001  0    3           0-Auto, 1-ManStop, 2-ManLo, 3-ManHi
   SR2  : "MtrRegMode"            ; %4x0002  0    6           0-Press, 1-Flow, 2-ExtSlave, 3-SupSlave,
                                    %                         4-External VDC Set, 5 FAN-Opt Sup/Ext,
                                    %                         6 FAN-Opt whit Ext Slave
   SR3  : "SupDuctPaLoSet" ["Pa"] ; %4x0003  0    2000        LoSpeed DuctPressure Set
   SR4  : "SupDuctPaHiSet" ["Pa"] ; %4x0004  0    2000        HiSpeed DuctPressure Set

   SR7  : "ExtDuctPaLoSet" ["Pa"] ; %4x0007  0    2000        LoSpeed DuctPressure Set
   SR8  : "ExtDuctPaHiSet" ["Pa"] ; %4x0008  0    2000        HiSpeed DuctPressure Set
                                  
   SR35 : "SupFlowFireSet" ["%"]  ; %4x0035  0    10000 1/100 User Supply Motor Percent Set at Fire
   SR36 : "ExtFlowFireSet" ["%"]  ; %4x0036  0    10000 1/100 User Extract Motor Percent Set at Fire
                                  
  %SR50 : "TimeSw-Year"    ["y"]  ; %4x0050  2000 2099        Current Year
  %SR51 : "TimeSw-Month"   ["m"]  ; %4x0051  1    12          Current Month
  %SR52 : "TimeSw-Date"    ["d"]  ; %4x0052  1    31          Current Date
  %SR53 : "TimeSw-Hour"    ["h"]  ; %4x0053  0    23          Current Hour
  %SR54 : "TimeSw-Minute"  ["Min"]; %4x0054  0    59          Current Minute
  %SR55 : "TimeSw-Second"  ["Sec"]; %4x0055  0    59          Current Second

  PUBLIC

  PRIVATE
   Cnt;

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;

  TELEGRAM Settings1 NAMED "Setvalue Pres." IS

    QUESTION
      DATA[0]  := BYTE(Id);
      DATA[1]  := HEX(06);   %Write singel register
      DATA[2]  <- RWORD(     %Start adress (regnr-1)
        IF    Cnt>7 THEN Cnt:=0;
        ENDIF;
        IF    Cnt=0 THEN DATA := 0;         %SR1 ManDriftMode
        ELSIF Cnt=1 THEN DATA := 1;         %SR2 MtrRegMode
        ELSIF Cnt=2 THEN DATA := 2;         %SR3 SupDuctPaLoSet
        ELSIF Cnt=3 THEN DATA := 3;         %SR4 SupDuctPaHiSet
        ELSIF Cnt=4 THEN DATA := 6;         %SR7 ExtDuctPaLoSet
        ELSIF Cnt=5 THEN DATA := 7;         %SR8 ExtDuctPaHiSet
        ELSIF Cnt=6 THEN DATA := 34;        %SR35 SupFlowFireSet
        ELSIF Cnt=7 THEN DATA := 35;        %SR36 ExtFlowFireSet
        ENDIF;
      );
      
      DATA[4]  <- RWORD(
        IF    Cnt=0 THEN
          IF SR1<0 OR SR1>3  THEN DATA := 1;      %ManDriftMode 0-3
          ELSE                    DATA := SR1;
          ENDIF;
        ELSIF Cnt=1 THEN
          IF SR2<0 OR SR2>6  THEN DATA := 0;      %MtrRegMode   0-6
          ELSE                    DATA := SR2;
          ENDIF;
        ELSIF Cnt=2 THEN
          IF SR3<0 OR SR3>2000 THEN DATA := 1000; %SupDuctPaLoSet 0-2000 Pa
          ELSE                      DATA := SR3;
          ENDIF;
        ELSIF Cnt=3 THEN
          IF SR4<0 OR SR4>2000 THEN DATA := 1000; %SupDuctPaHiSet 0-2000 Pa
          ELSE                      DATA := SR4;
          ENDIF;
        ELSIF Cnt=4 THEN
          IF SR7<0 OR SR7>2000 THEN DATA := 1000; %ExtDuctPaLoSet 0-2000 Pa
          ELSE                      DATA := SR7;
          ENDIF;
        ELSIF Cnt=5 THEN
          IF SR8<0 OR SR8>2000 THEN DATA := 1000; %ExtDuctPaHiSet 0-2000 Pa
          ELSE                      DATA := SR8;
          ENDIF;
        ELSIF Cnt=6 THEN
          IF    SR35<0      THEN DATA := 0;       %SupFlowFireSet 0-100.00%
          ELSIF SR35>100.00 THEN DATA := 10000;
          ELSE                   DATA := SR35*100;
          ENDIF;
        ELSIF Cnt=7 THEN
          IF    SR36<0      THEN DATA := 0;       %ExtFlowFireSet 0-100.00%
          ELSIF SR36>100.00 THEN DATA := 10000;
          ELSE                   DATA := SR36*100;
          ENDIF;
        ENDIF;

        Cnt := Cnt + 1;
        IF Cnt>7 THEN Cnt := 0;
        ENDIF;
      
      );

    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(06);

    TIMEOUT 1000

  END;

END;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for NOVENCO set register 148-248
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU
%
% Note! Telegram for setting register values
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2009-09-03 inital version
%
DEVICETYPE NovencoSetReg1 NAMED "Novenco SetTEMP" TYPEID 21323 IS

  PARAMETER

   Id   : "Address";

  %%%%%%%%%%%%%%%%
                                    %Address Min  Max  Factor Desription
   SR148: "TempRegMode"          ;  %4x0148  0    3           0-Sup, 1-Ext, 2-Room, 3-Sup/Ext -Diff
   SR149: "TempRegSet"     ["°C"];  %4x0149  0    4000  1/100 TempSet for actual RegMode
   SR150: "SupTempMinSet"  ["°C"];  %4x0150  0    1800  1/100 Min Allowed SupplyTemp
   SR151: "SupTempMaxSet"  ["°C"];  %4x0151  2000 5000  1/100 Max Allowed SupplyTemp
   SR152: "SupTempDiffSet" ["°C"];  %4x0152  100  1500  1/100 TempDiff Set between Extract/Supply
                                    %                         Used for TempRegMide = 3 (Const Sup/Ext -TempReg)
                                 
   SR233: "HW_FrzStopSet"  ["°C"];  %4x0233  500  4000  1/100 SetVal for AntiFrost Reg when Agg. = Stop
   SR234: "HW_FrzDriftSet" ["°C"];  %4x0234  200  2000  1/100 SetVal for AntiFrost Reg when Agg. = Drift
   SR235: "HW_FreezePB"    ["°C"];  %4x0235  200  2000  1/100 P-Band for AntiFrost Reg
   SR236: "HW_FrzAlrTpSet" ["°C"];  %4x0236  200  2000  1/100 SetVal for AntiFrost TempAlarm
                                 
  %SR245: "FiltSupStatAlr" ["Pa"];  %4x0245  10   500         Filter Pressure Alr Limit for SupFilter (static mode)
  %SR246: "FiltExtStatAlr" ["Pa"];  %4x0246  10   500         Filter Pressure Alr Limit for ExtFilter (static mode)
  %SR247: "FiltSupDynAlr"  ["%"] ;  %4x0247  1000 10000 1/100 Filter Pressure Alr Limit for SupFilter (dynamic mode)
  %SR248: "FiltExtDynAlr"  ["%"] ;  %4x0248  1000 10000 1/100 Filter Pressure Alr Limit for ExtFilter (dynamic mode)

  PUBLIC

  PRIVATE
   Cnt;

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;

  TELEGRAM Settings1 NAMED "Setvalue Temp" 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;
        IF    Cnt=0 THEN DATA := 147;       %SR148
        ELSIF Cnt=1 THEN DATA := 148;       %SR149
        ELSIF Cnt=2 THEN DATA := 149;       %SR150
        ELSIF Cnt=3 THEN DATA := 150;       %SR151
        ELSIF Cnt=4 THEN DATA := 151;       %SR152
        ELSIF Cnt=5 THEN DATA := 232;       %SR233
        ELSIF Cnt=6 THEN DATA := 233;       %SR234
        ELSIF Cnt=7 THEN DATA := 234;       %SR235
        ELSIF Cnt=8 THEN DATA := 235;       %SR236

       %ELSIF Cnt=x THEN DATA := 244;       %SR245
       %ELSIF Cnt=x THEN DATA := 245;       %SR246
       %ELSIF Cnt=x THEN DATA := 246;       %SR247
       %ELSIF Cnt=x THEN DATA := 247;       %SR248

        ENDIF;
      );

      DATA[4]  <- RWORD(
        IF    Cnt=0 THEN
          IF SR148<0 OR SR148>3 THEN DATA := 0;     %SR148 TempRegMode 0-3
          ELSE                       DATA := SR148;
          ENDIF;
        ELSIF Cnt=1  THEN
          IF    SR149<0     THEN DATA := 0;         %SR149 TempRegSet 0-40.00 °C
          ELSIF SR149>40.00 THEN DATA := 4000;
          ELSE                   DATA := SR149*100;
          ENDIF;
        ELSIF Cnt=2 THEN
          IF    SR150<0     THEN DATA := 0;         %SR150 SupTempMinSet 0-18.00 °C
          ELSIF SR150>18.00 THEN DATA := 1800;
          ELSE                   DATA := SR150*100;
          ENDIF;
        ELSIF Cnt=3 THEN
          IF    SR151<20.00 THEN DATA := 2000;      %SR151 SupTempMaxSet 20.00-50.00 °C
          ELSIF SR151>50.00 THEN DATA := 5000;
          ELSE                   DATA := SR151*100;
          ENDIF;
        ELSIF Cnt=4 THEN
          IF    SR152< 1.00 THEN DATA := 100;       %SR152 SupTempDiffSet 1.00-15.00 °C
          ELSIF SR152>15.00 THEN DATA := 1500;
          ELSE                   DATA := SR152*100;
          ENDIF;
        ELSIF Cnt=5 THEN
          IF    SR233< 5.00 THEN DATA := 500;       %SR233 HW_FrzStopSet 5.00-40.00 °C
          ELSIF SR233>40.00 THEN DATA := 4000;
          ELSE                   DATA := SR233*100;
          ENDIF;
        ELSIF Cnt=6 THEN
          IF    SR234< 2.00 THEN DATA := 200;       %SR234 HW_FrzDriftSet 2.00-20.00 °C
          ELSIF SR234>20.00 THEN DATA := 2000;
          ELSE                   DATA := SR234*100;
          ENDIF;
        ELSIF Cnt=7 THEN
          IF    SR235< 2.00 THEN DATA := 200;       %SR235 HW_FreezePB 2.00-20.00 °C
          ELSIF SR235>20.00 THEN DATA := 2000;
          ELSE                   DATA := SR235*100;
          ENDIF;
        ELSIF Cnt=8 THEN
          IF    SR236< 2.00 THEN DATA := 200;       %SR236 HW_FrzAlrTpSet 2.00-20.00 °C
          ELSIF SR236>20.00 THEN DATA := 2000;
          ELSE                   DATA := SR236*100;
          ENDIF;

       %ELSIF Cnt=x THEN
       %  IF    SR245<10    THEN DATA := 10;        %SR245 FiltSupStatAlr 10-500 Pa
       %  ELSIF SR245>500   THEN DATA := 500;
       %  ELSE                   DATA := SR245;
       %  ENDIF;
       %ELSIF Cnt=x THEN
       %  IF    SR246<10    THEN DATA := 10;        %SR246 FiltExtStatAlr 10-500 Pa
       %  ELSIF SR246>500   THEN DATA := 500;
       %  ELSE                   DATA := SR246;
       %  ENDIF;
       %ELSIF Cnt=x THEN
       %  IF    SR247<10.00  THEN DATA := 1000;     %SR247 FiltSupDynAlr 1000-10000 %
       %  ELSIF SR247>100.00 THEN DATA := 10000;
       %  ELSE                    DATA := SR247*100;
       %  ENDIF;
       %ELSIF Cnt=x THEN
       %  IF    SR248<10.00  THEN DATA := 1000;     %SR248 FiltExtDynAlr 1000-10000 %
       %  ELSIF SR248>100.00 THEN DATA := 10000;
       %  ELSE                    ATA := SR248*100;
       %  ENDIF;

        ENDIF;

        Cnt := Cnt + 1;
        IF Cnt>8 THEN Cnt := 0;
        ENDIF;
      );

    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(06);

    TIMEOUT 1000

  END;

END;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for NOVENCO read input digital input 1-93
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU
%
% Note! Telegram for reading digital inputs
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2009-09-03 inital version
%
DEVICETYPE NovencoDIN NAMED "Novenco Read DI" TYPEID 21324 IS

  PARAMETER
    Id         : "Address";

  PUBLIC
                                %Address Description

    DI1  : "Operation"       ; %1x0001  Operation ON/OFF
   %DI2  : "ExtStop"         ; %1x0002  External Stop
   %DI3  : "ExtHiSpeed"      ; %1x0003  External HiSpeed
    DI31 : "Heat_RE1"        ; %1x0031  Heat Relay 1
    DI32 : "Cool_RE1"        ; %1x0032  Cool Relay 1
    DI33 : "BattEXC_PumpRE"  ; %1x0033  WaterBatt EXC PumpRelay
    DI34 : "AlrActive"       ; %1x0034  Least one Active Alarm
    DI35 : "Alr_RE1"         ; %1x0035  AlarmRelay-1 (A-Alarm)
    DI36 : "Alr_RE2"         ; %1x0036  AlarmRelay-2 (B-Alarm)
    DI37 : "Alr_FireSignal"  ; %1x0037  FireAlarm-Signal (sensor in room)
    DI38 : "Alr_SmokeSignal" ; %1x0038  SmokeAlarm-Signal (sensor in duct)
    DI40 : "ElBattOverHeat"  ; %1x0040  EL-Batt OverHeat Signal
    DI41 : "FiltSupAlarm"    ; %1x0041  Filter Alarm for Sup-Filter (pressure above Limit)
    DI42 : "FiltExtAlarm"    ; %1x0042  Filter Alarm for Ext-Filter (pressure above Limit)
    DI57 : "HW_FrostAlarm"   ; %1x0057  HeatWaterTemp -FrostReg Alarm
    DI61 : "Cool_DI1_Alarm"  ; %1x0061  Cool Digital Alarm-1 Input
    DI62 : "Cool_DI2_Alarm"  ; %1x0062  Cool Digital Alarm-2 Input
   %DI70 : "SupMotorON"      ; %1x0070  SupplyMotor ON/OFF
    DI71 : "SupMotorAlarm"   ; %1x0071  SupplyMotor ON/OFF
    DI74 : "FCsupMtrAlrIhi"  ; %1x0074  SupplyMotor Ihi Alarm
   %DI80 : "ExtMotorON"      ; %1x0080  ExtractMotor ON/OFF
    DI81 : "ExtMotorAlarm"   ; %1x0081  ExtractMotor ON/OFF
    DI84 : "FCextMtrAlrIhi"  ; %1x0084  ExtractMotor Ihi Alarm
   %DI90 : "EXC_ON"          ; %1x0090  EXC-MotorCtrl ON/OFF
    DI93 : "EXC_RotAlarm"    ; %1x0093  EXC-Rotation Alarm

  PRIVATE

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;

  TELEGRAM DigitalInput1 NAMED "Read DI 1-20" 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
      DATA[4]  := RWORD(93);     % Number of inputs

    ANSWER SIZE 17
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
     %DATA[2]   = BYTE(12);
                                                                            %1-8
      DATA[3]  -> BYTE(IF (DATA & 1)   THEN DI1 := 1; ELSE DI1 := 0; ENDIF; %1  Operation
     %                 IF (DATA & 2)   THEN DI2 := 1; ELSE DI2 := 0; ENDIF; %2  ExtStop
     %                 IF (DATA & 4)   THEN DI3 := 1; ELSE DI3 := 0; ENDIF; %3  ExtHiSpeed
                       );                                                   %4-8 Not used

     %DATA[4]  -> BYTE(IF (DATA & 1)   THEN DIx := 1; ELSE DIx := 0; ENDIF; %9-16  Not used

     %DATA[5]  -> BYTE(IF (DATA & 1)   THEN DIx := 1; ELSE DIx := 0; ENDIF; %17-24 Not used

                                                                            %25-32
      DATA[6]  -> BYTE(IF (DATA & 64)  THEN DI31:= 1; ELSE DI31:= 0; ENDIF; %31 : "Heat_RE1"
                       IF (DATA & 128) THEN DI32:= 1; ELSE DI32:= 0; ENDIF; %32 : "Cool_RE1"
                       );
                                                                            %33-40
      DATA[7]  -> BYTE(IF (DATA & 1)   THEN DI33:= 1; ELSE DI33:= 0; ENDIF; %33 : "BattEXC_PumpRE"
                       IF (DATA & 2)   THEN DI34:= 1; ELSE DI34:= 0; ENDIF; %34 : "AlrActive"
                       IF (DATA & 4)   THEN DI35:= 1; ELSE DI35:= 0; ENDIF; %35 : "Alr_RE1"
                       IF (DATA & 8)   THEN DI36:= 1; ELSE DI36:= 0; ENDIF; %36 : "Alr_RE2"
                       IF (DATA & 16)  THEN DI37:= 1; ELSE DI37:= 0; ENDIF; %37 : "Alr_FireSignal"
                       IF (DATA & 32)  THEN DI38:= 1; ELSE DI38:= 0; ENDIF; %38 : "Alr_SmokeSig"
                       IF (DATA & 128) THEN DI40:= 1; ELSE DI40:= 0; ENDIF; %40 : "ElBattOverHeat"
                       );
                                                                            %41-48
      DATA[8]  -> BYTE(IF (DATA & 1)   THEN DI41:= 1; ELSE DI41:= 0; ENDIF; %41 : "FiltSupAlarm"
                       IF (DATA & 2)   THEN DI42:= 1; ELSE DI42:= 0; ENDIF; %42 : "FiltExtAlarm"
                       );

     %DATA[9]  -> BYTE(IF (DATA & 1)   THEN DIx := 1; ELSE DIx := 0; ENDIF; %49-56 Not used

                                                                            %57-64
      DATA[10] -> BYTE(IF (DATA & 1)   THEN DI57:= 1; ELSE DI57:= 0; ENDIF; %57 : "HW_FrostAlr"
                       IF (DATA & 16)  THEN DI61:= 1; ELSE DI61:= 0; ENDIF; %61 : "Cool_DI1_Alarm"
                       IF (DATA & 32)  THEN DI62:= 1; ELSE DI62:= 0; ENDIF; %62 : "Cool_DI2_Alarm"
                       );
                                                                            %65-72
     %DATA[11] -> BYTE(IF (DATA & 32)  THEN DI70:= 1; ELSE DI70:= 0; ENDIF; %70 : "SupMotorON"
      DATA[11] -> BYTE(IF (DATA & 64)  THEN DI71:= 1; ELSE DI71:= 0; ENDIF; %71 : "SupMotorAlarm"
                       );
                                                                            %73-80
      DATA[12] -> BYTE(IF (DATA & 2)   THEN DI74:= 1; ELSE DI74:= 0; ENDIF; %74 : "FCsupMtrAlrIhi"
     %                 IF (DATA & 128) THEN DI80:= 1; ELSE DI80:= 0; ENDIF; %80 : "ExtMotorON"
                       );
                                                                            %81-88
      DATA[13] -> BYTE(IF (DATA & 1)   THEN DI81:= 1; ELSE DI81:= 0; ENDIF; %81 : "ExtMotorAlarm"
                       IF (DATA & 8)   THEN DI84:= 1; ELSE DI84:= 0; ENDIF; %84 : "FCextMtrAlrIhi"
                       );
                                                                            %89-96
     %DATA[14] -> BYTE(IF (DATA & 2)   THEN DI90:= 1; ELSE DI90:= 0; ENDIF; %90 : "EXC_ON"
      DATA[14] -> BYTE(IF (DATA & 16)  THEN DI93:= 1; ELSE DI93:= 0; ENDIF; %93 : "EXC_RotAlarm"
                       );

    TIMEOUT 1000

  END;

END;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for NOVENCO digital output 1
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU
%
% Note! Telegram for reading digital inputs
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2009-09-03 inital version
%
DEVICETYPE NovencoDOUT NAMED "Novenco Set DO" TYPEID 21325 IS 
  
  PARAMETER

   Id   : "Adress";

   DU6  : "RecircFunction";   %0x0006 0/1  Recirc Function ON/OFF
   
  PUBLIC

  PRIVATE

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;
  
  TELEGRAM DigitalOutput NAMED "Recirc ON/OFF" IS
  
    QUESTION
      DATA[0] := BYTE(Id);  % Modbus unit address
      DATA[1] := HEX(05);   % Modbus command "0x05" force singel coil
      DATA[2] := RWORD(5);  % start coil (adress-1)
      DATA[4] <- RWORD(IF DU6=0 THEN DATA:=0;         % 0x0000 OFF
                       ELSE          DATA:=65280;     % 0xFF00 ON
                       ENDIF;
                       );

    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(05);
     %DATA[2] = RWORD(0);     % start coil
     %DATA[4] = RWORD(1);     % value
     
    TIMEOUT 1000

  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.