Produal HLS 44-CO2

Detaljer

Typ
Drivrutin
Upplaggd av
Peter Widetun, Abelko Innovation
Version
1
Uppdaterad
2019-06-25
Skapad
2019-06-25
Kategori
Allmän automation, Kyla, Modbus, Värme, Ventilation
Visningar
4618

Beskrivning

Regulator för styrning värme och kyla ventilation

Bruksanvisning

Skriptet går bara att använda i ULTRA BASE.
Det innehåller telegram för inläsning av samtliga registervärden (coil, discreat input, input registers och holding registers). Aktivera de registergrupper som önskas.
Det finns också ett telegram för att ställa några register (holding registers). Där går det att lägga till eller dra ifrån register.
Ett telegram för att ställa digital status (coils) finns med i skriptet men är bort-kommenterat. Om man skulle behöva göra coil-inställningar finns alltså en grundstomme för det i skriptet.i

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

  1 = On
    R3     : ">Heat PWM overdrive enable (A2)"   ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R4     : ">Heat 0…10V overdrive enable (Y4)" ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R5     : ">VAV overdrive enable (Y1)"        ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R6     : ">FAN overdrive enable (Y2)"        ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R7     : ">Not in use"                       ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R8     : ">Not in use"                       ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R9     : ">Not in use"                       ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R10    : ">Not in use"                       ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R11    : ">Service alarm reset"              ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R12    : ">Cool disabled"                    ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R13    : ">Heat disabled"                    ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R14    : ">Night mode"                       ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R15    : ">Cool output mode"                 ["Off,On"] ENUM;  % 0 = DIR,  1 = REV
    R16    : ">Heat output mode"                 ["Off,On"] ENUM;  % 0 = DIR,  1 = REV
    R17    : ">Cool stages"                      ["1-stage,2-stage"]       ENUM;  % 0 = 1 stage,     1 = 2 stages
    R18    : ">Sequence cool stages"             ["Valve_first,VAV_first"] ENUM;  % 0 = valve first, 1 = VAV first
    R19    : ">Fan stage = valve stage"          ["Off,On"]                ENUM;  % 0 = Off,  1 = On
    R20    : ">Night operation mode"             ["Dead_zone,Frost_guard"] ENUM;  % 0 = dead zone,   1 = frost guard
    R21    : ">Eff. set point night>day change"  ["User,Modbus"]           ENUM;  % 0 = user, 1 = Modbus
    R22    : ">Valve jam prevention"             ["Off,On"]                ENUM;  % 0 = Off,  1 = On
    R23    : ">Fan type"                         ["3-speed_fan,EC_fan"]    ENUM;  % 0 = 3-speed fan, 1 = EC fan
    R24    : ">Fan speed 3 disabled"             ["Off,On"]                ENUM;  % 0 = Off,  1 = On
    R25    : ">Eff. fan speed night>day change"  ["User,Modbus"]           ENUM;  % 0 = user, 1 = Modbus
    R26    : ">VAV for heating"                  ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R27    : ">Display"                          ["Off,On"] ENUM;  % 0 = temperatur,  1 = börvärde
    R28    : ">DI2 operation direction"          ["Off,On"] ENUM;  % 0 = NC,   1 = NO
    R29    : ">Thermostat func. cool"            ["Off,On"] ENUM;  % 0 = P/PI, 1 = thermostat
    R30    : ">Thermostat func. heat"            ["Off,On"] ENUM;  % 0 = P/PI, 1 = thermostat
    R31    : ">Y1 output"                        ["Off,On"] ENUM;  % 0 = VAV,  1 = cooling
    R32    : ">Y2 output"                        ["Off,On"] ENUM;  % 0 = fan,  1 = heating
    R33    : ">Heat stages"                      ["Off,On"] ENUM;  % 0 = 1 stage,     1 = 2 stages
    R34    : ">Not in use"                       ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R35    : ">Not in use"                       ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R36    : ">Sequence heat stages"             ["Off,On"] ENUM;  % 0 = valve first,  1 = VAV first
    R37    : ">ABC calibration"                  ["Off,On"] ENUM;  % 0 = Off,  1 = On
    R38    : ">Indicate CO2 measuring"           ["Off,On"] ENUM;  % 0 = Off,  1 = On
                                              
    R10001 : "Occupied by PIR"                   ["Off,On"] ENUM;  % 0 = Off, 1 = On
    R10002 : "Occupied by “man in a house”"      ["Off,On"] ENUM;  % 0 = Off, 1 = On
    R10003 : "Day mode extension"                ["Off,On"] ENUM;  % 0 = Off, 1 = On
    R10004 : "DI1 input state"                   ["Off,On"] ENUM;  % 0 = Off, 1 = On
    R10005 : "DI2 input state"                   ["Off,On"] ENUM;  % 0 = Off, 1 = On
    R10006 : "CO2 overdrive"                     ["Off,On"] ENUM;  % 0 = Off, 1 = On
                                                 
    R30001 : "Discrete inputs (16-1)"            [""]    INT;  % Unsigned 16 bits
    R30002 : "Coils (16-1)"                      [""]    INT;  % Unsigned 16 bits
    R30003 : "Coils (32-17)"                     [""]    INT;  % Unsigned 16 bits
    R30004 : "Temperatur"                        ["°C"]  DEC1; % Signed -600…600 > -60,0…60.0°C
    R30005 : "External temp"                     ["°C"]  DEC1; % Signed -600…600 > -60,0…60,0°C
    R30006 : "CO2"                               ["ppm"] INT;  % Signed 0…2000   > 0…2000 ppm
    R30007 : "Effective set point"               ["°C"]  DEC1; % Signed 50…500   > 5,0…50,0°C
    R30008 : "Current cool (ctrl)"               ["V"]   DEC2; % Signed 0…1000   > 0…10,00 V
    R30009 : "Current heat (ctrl)"               ["V"]   DEC2; % Signed 0…1000   > 0…10,00 V
    R30010 : "Current fan speed (ctrl)"          ["Off,Speed-1,Speed-2,Speed-3,Automatic"] ENUM; %***********
    R30011 : "Fan speed (conn.Y2)"               ["V"]   DEC2; % Signed 0…1000   > 0…10,00 V
    R30012 : "VAV control (conn. Y1)"            ["V"]   DEC2; % Signed 0…1000   > 0…10,00 V
    R30013 : "Cool control (conn. Y3)"           ["V"]   DEC2; % Signed 0…1000   > 0…10,00 V
    R30014 : "Heat control (conn. Y4)"           ["V"]   DEC2; % Signed 0…1000   > 0…10,00 V
    R30015 : "U1 input value"                    ["V"]   DEC2; % Signed 0…1000   > 0…10,00 V
    R30016 : "Ext. NTC sensor value (conn.)"     ["°C"]  DEC1; % Signed -600…600 > -60,0…60,0°C
    R30017 : "VAV/Boosting control"              ["CO2,Temp,PIR"] ENUM;
    R30018 : "Set point by user"                 ["°C"]  INT;  % Signed ±SP ºC   > ±SP ºC 
    R30019 : "Fan control by user"               ["Off,Speed-1,Speed-2,Speed-3,Automatic"] ENUM; %***********
    R30020 : "User set point deviation"          ["°C"]  INT;  % Signed ±SP ºC   > ±SP ºC
    R30021 : "Cool control (conn. A1)"           ["%"]   DEC1; % Signed 0…1000   > 0,00…100,0%
    R30022 : "Heat control (conn. A2)"           ["%"]   DEC1; % Signed 0…1000   > 0,00…100,0%

    R40001 : ">Modbus FAN Speed"                 ["Off,Speed-1,Speed-2,Speed-3,Automatic"] ENUM; %***********
    R40002 : ">Modbus Set point"                 ["°C"]  DEC1; % Signed 80…500    8,0…50,0 °C   210
    R40003 : ">Modbus Overd. Cool PWM   (A1)"    ["%"]   DEC1; % Signed 0…1000    0,0…100,0 %   0
    R40004 : ">Modbus Overd. Cool 0…10V (Y3)"    ["V"]   DEC2; % Signed 0…1000   0,00…10,00 V   0
    R40005 : ">Modbus Overd. Heat PWM   (A2)"    ["%"]   DEC1; % Signed 0…1000    0,0…100,0 %   0
    R40006 : ">Modbus Overd. Heat 0…10V (Y4)"    ["V"]   DEC2; % Signed 0…1000   0,00…10,00 V   0
    R40007 : ">Modbus Overd. VAV (Y1)"           ["V"]   DEC2; % Signed 0…1000   0,00…10,00 V   0
    R40008 : ">Modbus Overd. FAN (Y2)"           ["V"]   DEC2; % Signed 0…1000   0,00…10,00 V   0
    R40009 : ">DI2 input mode"                   ["Not_used,Ext.temp.,Door/Window,Condens_switch"] ENUM; %***
    R40010 : ">Temp sensor adjustment"           ["°C"]  DEC1; % Signed -30…30   -3,0…3,0  °C    0
    R40011 : ">User set point"                   ["°C"]  DEC1; % Signed 180…260  18,0…26,0 °C    230
    R40012 : ">User set point area"              ["°C"]  DEC1; % Signed 0…160     0,0…16,0 °C    40
    R40013 : ">Control mode"                     ["P,PI"]ENUM; % Signed 0 = P, 1 = PI            1
    R40014 : ">Dead zone"                        ["°C"]  DEC1; % Signed 0…30     0,0…3,0 °C      10
    R40015 : ">Set point in dead zone"           ["%"]   DEC1; % Signed 0…100    0…100 %         50
    R40016 : ">Proportional band"                ["°C"]  DEC1; % Signed 10…320   1,0…32,0 °C     10
    R40017 : ">Integral time"                    ["s"]   INT;  % Signed 50…5000  50…5000 s       150
    R40018 : ">Fresh air control"                ["CO2/T,Day-mode/T,CO2,Day-mode"] ENUM; %*******************
    R40019 : ">Night mode dead zone"             ["°C"]  DEC1; % Signed 0…100    0,0…10,0 °C     60
    R40020 : ">Frost guard set point"            ["°C"]  DEC1; % Signed 80…500   8,0…50,0 °C     170
    R40021 : ">DI1 mode"                         ["Not_used,Day/night mode"] ENUM; %*************************
    R40022 : ">DI1 operation direction"          ["NC,NO"]ENUM;% Signed 0 = NC, 1 = NO           0
    R40023 : ">DI1 delay passive to active"      ["min"] INT;  % Signed 0…60     0…60 min        0
    R40024 : ">DI1 delay active to passive"      ["min"] INT;  % Signed 0…60     0…60 min        5
    R40025 : ">Duration of temporary day mode"   ["min"] INT;  % Signed 1…480    1…480 min       120
    R40026 : ">Minimum VAV output in day mode"   ["%"]   DEC1; % Signed 0…1000   0,0…100,0%      0
    R40027 : ">U1 mode"                          ["Not_used,T_setpoint,T_measure"] ENUM; %*******************
    R40028 : ">Min cooling actuator"             ["%"]   DEC1; % Signed 0…500     0,0…50,0%      0
    R40029 : ">Max cooling actuator"             ["%"]   DEC1; % Signed 500…1000 50,0…100,0%     1000
    R40030 : ">Min heating actuator"             ["%"]   DEC1; % Signed 0…500     0,0…50,0%      0
    R40031 : ">Max heating actuator"             ["%"]   DEC1; % Signed 500…1000 50,0…100,0%     1000
    R40032 : ">Min fan output"                   ["%"]   DEC1; % Signed 0…500     0,0…50,0%      0
    R40033 : ">Max fan output"                   ["%"]   DEC1; % Signed 500…1000 50,0…100,0%     1000
    R40034 : ">Min VAV-utgång"                   ["%"]   DEC1; % Signed 0…500     0,0…50,0%      0
    R40035 : ">Max VAV-utgång"                   ["%"]   DEC1; % Signed 500…1000 50,0…100,0%     1000
    R40036 : ">Fan output scal. high end"        ["%"]   DEC1; % Signed 0…1000    0,0…100,0%     1000
    R40037 : ">Fan output scal. low end"         ["%"]   DEC1; % Signed 0…1000    0,0…100,0%     0
    R40038 : ">Fan usage"                        ["Off,Cooling,Heating,Heating/Cooling"] ENUM; %*************
    R40039 : ">Low  limit P-band CO2 control"    ["ppm"] INT;  % Signed 400…1000 400…1000 ppm    700
    R40040 : ">High limit P-band CO2 control"    ["ppm"] INT;  % Signed 500…2000 500…2000 ppm    1250
    R40041 : ">CO2 sensor offset adjust."        ["ppm"] INT;  % Signed -200…200 -200…200 ppm    0

  PRIVATE
    cnt1;
    cnt2;

  BAUDRATE 38400;
  PARITY NONE;
  CHRGAPTIMEOUT 4;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM ReadCoil NAMED "Read DU status" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(01);         % Modbus command "01h" read coils
      DATA[2] := RWORD(0);        % Start register
      DATA[4] := RWORD(38);       % Number of coils to read
    ANSWER SIZE 10                % Answer zize = 5 + (number of coils / 8) + 1
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(01);
     %DATA[2] = BYTE(5);
      DATA[3] -> RWORD(
        IF (DATA & 1)   THEN R1 :=1; ELSE R1 :=0; ENDIF;    % off/on
        IF (DATA & 2)   THEN R2 :=1; ELSE R2 :=0; ENDIF;    % off/on
        IF (DATA & 4)   THEN R3 :=1; ELSE R3 :=0; ENDIF;    % off/on
        IF (DATA & 8)   THEN R4 :=1; ELSE R4 :=0; ENDIF;    % off/on
        IF (DATA & 16)  THEN R5 :=1; ELSE R5 :=0; ENDIF;    % off/on
        IF (DATA & 32)  THEN R6 :=1; ELSE R6 :=0; ENDIF;    % off/on
        IF (DATA & 64)  THEN R7 :=1; ELSE R7 :=0; ENDIF;    % off/on
        IF (DATA & 128) THEN R8 :=1; ELSE R8 :=0; ENDIF;    % off/on
      );
      DATA[4] -> RWORD(
        IF (DATA & 1)   THEN R9 :=1; ELSE R9 :=0; ENDIF;    % off/on
        IF (DATA & 2)   THEN R10:=1; ELSE R10:=0; ENDIF;    % off/on
        IF (DATA & 4)   THEN R11:=1; ELSE R11:=0; ENDIF;    % off/on
        IF (DATA & 8)   THEN R12:=1; ELSE R12:=0; ENDIF;    % off/on
        IF (DATA & 16)  THEN R13:=1; ELSE R13:=0; ENDIF;    % off/on
        IF (DATA & 32)  THEN R14:=1; ELSE R14:=0; ENDIF;    % off/on
        IF (DATA & 64)  THEN R15:=1; ELSE R15:=0; ENDIF;    % 0 = DIR,  1 = REV
        IF (DATA & 128) THEN R16:=1; ELSE R16:=0; ENDIF;    % 0 = DIR,  1 = REV
      );
      DATA[5] -> RWORD(
        IF (DATA & 1)   THEN R17:=1; ELSE R17:=0; ENDIF;    % 0 = 1 stage,     1 = 2 stages
        IF (DATA & 2)   THEN R18:=1; ELSE R18:=0; ENDIF;    % 0 = valve first, 1 = VAV first
        IF (DATA & 4)   THEN R19:=1; ELSE R19:=0; ENDIF;    % off/on
        IF (DATA & 8)   THEN R20:=1; ELSE R20:=0; ENDIF;    % 0 = dead zone,   1 = frost guard
        IF (DATA & 16)  THEN R21:=1; ELSE R21:=0; ENDIF;    % 0 = user, 1 = Modbus
        IF (DATA & 32)  THEN R22:=1; ELSE R22:=0; ENDIF;    % off/on
        IF (DATA & 64)  THEN R23:=1; ELSE R23:=0; ENDIF;    % 0 = 3-speed fan, 1 = EC fan
        IF (DATA & 128) THEN R24:=1; ELSE R24:=0; ENDIF;    % off/on
      );
      DATA[6] -> RWORD(
        IF (DATA & 1)   THEN R25:=1; ELSE R25:=0; ENDIF;    % 0 = user, 1 = Modbus
        IF (DATA & 2)   THEN R26:=1; ELSE R26:=0; ENDIF;    % off/on
        IF (DATA & 4)   THEN R27:=1; ELSE R27:=0; ENDIF;    % 0 = temperatur,  1 = börvärde
        IF (DATA & 8)   THEN R28:=1; ELSE R28:=0; ENDIF;    % 0 = NC,   1 = NO
        IF (DATA & 16)  THEN R29:=1; ELSE R29:=0; ENDIF;    % 0 = P/PI, 1 = thermostat
        IF (DATA & 32)  THEN R30:=1; ELSE R30:=0; ENDIF;    % 0 = P/PI, 1 = thermostat
        IF (DATA & 64)  THEN R31:=1; ELSE R31:=0; ENDIF;    % 0 = VAV,  1 = cooling
        IF (DATA & 128) THEN R32:=1; ELSE R32:=0; ENDIF;    % 0 = fan,  1 = heating
      );
      DATA[7] -> RWORD(
        IF (DATA & 1)   THEN R33:=1; ELSE R33:=0; ENDIF;    % 0 = 1 stage,     1 = 2 stages
        IF (DATA & 2)   THEN R34:=1; ELSE R34:=0; ENDIF;    % off/on
        IF (DATA & 4)   THEN R35:=1; ELSE R35:=0; ENDIF;    % off/on
        IF (DATA & 8)   THEN R36:=1; ELSE R36:=0; ENDIF;    % 0 = valve first,  1 = VAV first
        IF (DATA & 16)  THEN R37:=1; ELSE R37:=0; ENDIF;    % off/on
        IF (DATA & 32)  THEN R38:=1; ELSE R38:=0; ENDIF;    % off/on
       %IF (DATA & 64)  THEN R39:=1; ELSE R39:=0; ENDIF;    %
       %IF (DATA & 128) THEN R40:=1; ELSE R40:=0; ENDIF;    %
      );
    TIMEOUT 1000
  END;

  TELEGRAM ReadDI NAMED "Read DI status" 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 register
      DATA[4] := RWORD(6);        % Number of registers to read
    ANSWER SIZE 6                 % Answer zize = 5 + (number of DI / 8) + 1
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(02);
     %DATA[2] = BYTE(1);
      DATA[3] -> RWORD(
        IF (DATA & 1)   THEN R10001:=1; ELSE R10001:=0; ENDIF;    % "Occupied by PIR
        IF (DATA & 2)   THEN R10002:=1; ELSE R10002:=0; ENDIF;    % "Occupied by “man in a house”
        IF (DATA & 4)   THEN R10003:=1; ELSE R10003:=0; ENDIF;    % "Day mode extension
        IF (DATA & 8)   THEN R10004:=1; ELSE R10004:=0; ENDIF;    % "DI1 input state
        IF (DATA & 16)  THEN R10005:=1; ELSE R10005:=0; ENDIF;    % "DI2 input state
        IF (DATA & 32)  THEN R10006:=1; ELSE R10006:=0; ENDIF;    % "CO2 overdrive
       %IF (DATA & 64)  THEN R10007:=1; ELSE R10007:=0; ENDIF;    %
       %IF (DATA & 128) THEN R10008:=1; ELSE R10008:=0; ENDIF;    %
      );
    TIMEOUT 1000
  END;


  TELEGRAM ReadHolding NAMED "Read Output reg" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(03);         % Modbus command "03h" read multiple holding registers
      DATA[2] := RWORD(0);        % Start register
      DATA[4] := RWORD(22);       % Number of registers to read
    ANSWER SIZE 49                % Answer zize = 5 + (number of registers * 2)
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(03);
     %DATA[2] = BYTE(82);
      DATA[3]   -> RWORD( R30001 := DATA;    );   % 16-1  Digital inputs
      DATA[5]   -> RWORD( R30002 := DATA;    );   % 16-1  Digital outputs
      DATA[7]   -> RWORD( R30003 := DATA;    );   % 32-17 Digital outputs
      DATA[9]   -> RINT ( R30004 := DATA/10; );   % -600…600 > -60,0…60,0°C
      DATA[11]  -> RINT ( R30005 := DATA/10; );   % -600…600 > -60,0…60,0°C
      DATA[13]  -> RINT ( R30006 := DATA;    );   % 0…2000   > 0…2000 ppm
      DATA[15]  -> RINT ( R30007 := DATA/10; );   % 50…500   > 5,0…50,0°C
      DATA[17]  -> RINT ( R30008 := DATA/100;);   % 0…1000   > 0…10,00 V
      DATA[19]  -> RINT ( R30009 := DATA/100;);   % 0…1000   > 0…10,00 V
      DATA[21]  -> RINT ( R30010 := DATA;    );   % 0 = off, 1 = speed 1, 2 = speed 2, 3 = speed 3, 4 = automatic
      DATA[23]  -> RINT ( R30011 := DATA/100;);   % 0…1000   > 0…10,00 V
      DATA[25]  -> RINT ( R30012 := DATA/100;);   % 0…1000   > 0…10,00 V
      DATA[27]  -> RINT ( R30013 := DATA/100;);   % 0…1000   > 0…10,00 V
      DATA[29]  -> RINT ( R30014 := DATA/100;);   % 0…1000   > 0…10,00 V
      DATA[31]  -> RINT ( R30015 := DATA/100;);   % 0…1000   > 0…10,00 V
      DATA[33]  -> RINT ( R30016 := DATA/10; );   % -600…600 > -60,0…60,0°C
      DATA[35]  -> RINT ( R30017 := DATA;    );   % 0 = CO2, 1 = temperatur,
      DATA[37]  -> RINT ( R30018 := DATA;    );   % ±SP ºC   > ±SP ºC
      DATA[39]  -> RINT ( R30019 := DATA;    );   % 0 = off, 1 = speed 1, 2 = speed 2, 3 = speed 3, 4 = automatic
      DATA[41]  -> RINT ( R30020 := DATA;    );   % ±SP ºC   > ±SP ºC
      DATA[43]  -> RINT ( R30021 := DATA/10; );   % 0…1000   > 0,00…100,0%
      DATA[45]  -> RINT ( R30022 := DATA/10; );   % 0…1000   > 0,00…100,0%
    TIMEOUT 1000
  END;

  TELEGRAM ReadInputs NAMED "Read Input reg" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(04);         % Modbus command "04h" read multiple inputregisters
      DATA[2] := RWORD(0);        % Start register
      DATA[4] := RWORD(41);       % number of registers to read
    ANSWER SIZE 87                % Answer zize = 5 + (number of registers * 2) 
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(04);
     %DATA[2] = BYTE(82);
      DATA[3]   -> RINT( R40001 := DATA;    );   % ["Off,Speed-1,Speed-2,Speed-3,Automatic"] ENUM; %***********
      DATA[5]   -> RINT( R40002 := DATA/10; );   % Signed 80…500    8,0…50,0 °C   210          
      DATA[7]   -> RINT( R40003 := DATA/10; );   % Signed 0…1000    0,0…100,0 %   0            
      DATA[9]   -> RINT( R40004 := DATA/100;);   % Signed 0…1000   0,00…10,00 V   0            
      DATA[11]  -> RINT( R40005 := DATA/10; );   % Signed 0…1000    0,0…100,0 %   0            
      DATA[13]  -> RINT( R40006 := DATA/100;);   % Signed 0…1000   0,00…10,00 V   0            
      DATA[15]  -> RINT( R40007 := DATA/100;);   % Signed 0…1000   0,00…10,00 V   0            
      DATA[17]  -> RINT( R40008 := DATA/100;);   % Signed 0…1000   0,00…10,00 V   0            
      DATA[19]  -> RINT( R40009 := DATA;    );   % ["Not_used,Ext.temp.,Door/Window,Condens_switch"] ENUM; %***
      DATA[21]  -> RINT( R40010 := DATA/10; );   % Signed -30…30   -3,0…3,0  °C    0           
      DATA[23]  -> RINT( R40011 := DATA/10; );   % Signed 180…260  18,0…26,0 °C    230         
      DATA[25]  -> RINT( R40012 := DATA/10; );   % Signed 0…160     0,0…16,0 °C    40          
      DATA[27]  -> RINT( R40013 := DATA;    );   % Signed 0 = P, 1 = PI            1           
      DATA[29]  -> RINT( R40014 := DATA/10; );   % Signed 0…30     0,0…3,0 °C      10          
      DATA[31]  -> RINT( R40015 := DATA;    );   % Signed 0…100    0…100 %         50          
      DATA[33]  -> RINT( R40016 := DATA/10; );   % Signed 10…320   1,0…32,0 °C     10          
      DATA[35]  -> RINT( R40017 := DATA;    );   % Signed 50…5000  50…5000 s       150         
      DATA[37]  -> RINT( R40018 := DATA;    );   % ["CO2/T,Day-mode/T,CO2,Day-mode"] ENUM; %*******************
      DATA[39]  -> RINT( R40019 := DATA/10; );   % Signed 0…100    0,0…10,0 °C     60          
      DATA[41]  -> RINT( R40020 := DATA/10; );   % Signed 80…500   8,0…50,0 °C     170         
      DATA[43]  -> RINT( R40021 := DATA;    );   % ["Not_used,Day/night mode"] ENUM; %*************************
      DATA[45]  -> RINT( R40022 := DATA;    );   % Signed 0 = NC, 1 = NO           0           
      DATA[47]  -> RINT( R40023 := DATA;    );   % Signed 0…60     0…60 min        0           
      DATA[49]  -> RINT( R40024 := DATA;    );   % Signed 0…60     0…60 min        5           
      DATA[51]  -> RINT( R40025 := DATA;    );   % Signed 1…480    1…480 min       120         
      DATA[53]  -> RINT( R40026 := DATA/10; );   % Signed 0…1000   0,0…100,0%      0           
      DATA[55]  -> RINT( R40027 := DATA;    );   % ["Not_used,T_setpoint,T_measure"] ENUM; %*******************
      DATA[57]  -> RINT( R40028 := DATA/10; );   % Signed 0…500     0,0…50,0%      0           
      DATA[59]  -> RINT( R40029 := DATA/10; );   % Signed 500…1000 50,0…100,0%     1000        
      DATA[61]  -> RINT( R40030 := DATA/10; );   % Signed 0…500     0,0…50,0%      0           
      DATA[63]  -> RINT( R40031 := DATA/10; );   % Signed 500…1000 50,0…100,0%     1000        
      DATA[65]  -> RINT( R40032 := DATA/10; );   % Signed 0…500     0,0…50,0%      0           
      DATA[67]  -> RINT( R40033 := DATA/10; );   % Signed 500…1000 50,0…100,0%     1000        
      DATA[69]  -> RINT( R40034 := DATA/10; );   % Signed 0…500     0,0…50,0%      0           
      DATA[71]  -> RINT( R40035 := DATA/10; );   % Signed 500…1000 50,0…100,0%     1000        
      DATA[73]  -> RINT( R40036 := DATA/10; );   % Signed 0…1000    0,0…100,0%     1000        
      DATA[75]  -> RINT( R40037 := DATA/10; );   % Signed 0…1000    0,0…100,0%     0           
      DATA[77]  -> RINT( R40038 := DATA;    );   % ["Off,Cooling,Heating,Heating/Cooling"] ENUM; %*************
      DATA[79]  -> RINT( R40039 := DATA;    );   % Signed 400…1000 400…1000 ppm    700         
      DATA[81]  -> RINT( R40040 := DATA;    );   % Signed 500…2000 500…2000 ppm    1250        
      DATA[83]  -> RINT( R40041 := DATA;    );   % Signed -200…200 -200…200 ppm    0           
                                                                                                             
    TIMEOUT 1000
  END;

 %TELEGRAM WriteCoil NAMED "Write DU status" IS
 % QUESTION
 %  DATA[0] := BYTE(Id); % Enhetens Modbus adress
 %  DATA[1] := HEX(05);  % Modbus kommando för att skriva digital status (Coil)
 %  DATA[2] <- RWORD(
 %   cnt1 := cnt1 + 1;   % Register adress 
 %   IF(cnt1>3) THEN cnt1 := 0; ENDIF;
 %   IF    (cnt1=0) THEN DATA := 0;          % W1 : "Cool PWM overdrive enable (A1)"   
 %   ELSIF (cnt1=1) THEN DATA := 1;          % W2 : "Cool 0…10V overdrive enable (Y3)" 
 %   ELSIF (cnt1=2) THEN DATA := 2;          % W3 : "Heat PWM overdrive enable (A2)"   
 %   ELSE                DATA := 3;          % W4 : "Heat 0…10V overdrive enable (Y4)" 
 %   ENDIF;                          
 %  ); 
 %  DATA[4] <- RWORD(    % Register value 
 %   IF    (cnt1=0) THEN IF (W1 > 0) THEN DATA := 65280; ELSE DATA := 0; ENDIF;  % 0 = Off,  1 = On 
 %   ELSIF (cnt1=1) THEN IF (W2 > 0) THEN DATA := 65280; ELSE DATA := 0; ENDIF;  % 0 = Off,  1 = On 
 %   ELSIF (cnt1=2) THEN IF (W3 > 0) THEN DATA := 65280; ELSE DATA := 0; ENDIF;  % 0 = Off,  1 = On 
 %   ELSE                IF (W4 > 0) THEN DATA := 65280; ELSE DATA := 0; ENDIF;  % 0 = Off,  1 = On 
 %   ENDIF;
 %  );
 % ANSWER SIZE 8
 %  DATA[0] = BYTE(Id);
 %  DATA[1] = BYTE(05);
 % TIMEOUT 1000
 %END;

  TELEGRAM WriteRegister NAMED "Write Output reg" IS
    QUESTION
      DATA[0] := BYTE(Id); % Modbus unit address
      DATA[1] := HEX(06);  % Modbus command "06h" write singel holding register
      DATA[2] <- RWORD(    % Set register adress
        cnt2 := cnt2 + 1;
        IF (cnt2>4) THEN cnt2 := 0; ENDIF;
        IF    (cnt2=0) THEN DATA := 1;          % W40002 : "Modbus Set point"              ["°C"]  
        ELSIF (cnt2=1) THEN DATA := 33;         % W40034 : "Min VAV-utgång"                ["%"]   
        ELSIF (cnt2=2) THEN DATA := 34;         % W40035 : "Max VAV-utgång"                ["%"]   
        ELSIF (cnt2=3) THEN DATA := 38;         % W40039 : "Low  limit P-band CO2 control" ["ppm"] 
        ELSE                DATA := 39;         % W40040 : "High limit P-band CO2 control" ["ppm"] 
        ENDIF;
      );
      DATA[4] <- RWORD(    % Set register value (use scale)
        IF    (cnt2=0) THEN DATA := W40002*10;  %  80…500  >  8,0…50,0   °C  
        ELSIF (cnt2=1) THEN DATA := W40034*10;  %   0…500  >  0,0…50,0   %   
        ELSIF (cnt2=2) THEN DATA := W40035*10;  % 500…1000 > 50,0…100,0  %  
        ELSIF (cnt2=3) THEN DATA := W40039;     % 400…1000 >  400…1000   ppm 
        ELSE                DATA := W40040;     % 500…2000 >  500…2000   ppm 
        ENDIF;
      );
    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = BYTE(06);
    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.