HK Instruments Model DPT-MOD-2000-IN-AZ

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
1
Uppdaterad
2013-04-07
Skapad
2013-04-07
Kategori
IO enheter, Modbus
Visningar
2349

Beskrivning

drivrutin för IO modul

Bruksanvisning

When using the kalibration command it will only give a zero calibration command when the DO1 value changes from 0 to another value.

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 HK Instruments
%
% Settings module:   Parity: None
%                    Mode:   RTU
%                    Baud:    9.60
%
% Note! When using the kalibration command it will only
%       give a zero calibration command when the DO1 value
%       changes from 0 to another value. 

% Author:  Peter Widetun, ABELKO AB Luleå 
% History: 2009-05-20 inital version
%
DEVICETYPE HKInstruments NAMED "HK Instruments1" TYPEID 21330 IS

  PARAMETER
    Id  : "Adress";

    % Write singel coil (function 5)
    DO1 : "Ny kalibrering";  %R1 Kalibrering nollpunkt Zero point kalibration

  PUBLIC

    % Input registers (function 4)
    IR1       : "Program version" [""];
    IR2       : "Tryck"           ["kPa"];

  PRIVATE
    start;
    DO1_old;
    
  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;

  TELEGRAM AnalogRead NAMED "Läs tryck" IS

    QUESTION
      DATA[0]  := BYTE(Id);      % Modbus unit address
      DATA[1]  := HEX(04);       % Modbus command "04h" Read registers
      DATA[2]  := RWORD(0);      % Select register
      DATA[4]  := RWORD(2);      % Number of registers
      
    ANSWER SIZE 9
      DATA[0]   = BYTE(Id);      % ID
      DATA[1]   = HEX(04);       % Modbus command "04h" Read registers
      DATA[2]   = BYTE(4);       % Byte count
      DATA[3]  -> RWORD(IR1:=DATA/100;);    % Program version
      DATA[5]  -> RWORD(IF DATA>32767 THEN  % Pressure
                          IR2:=0;
                        ELSE
                          IR2:=DATA/1000;
                        ENDIF;
                        );

    TIMEOUT 1000

  END;

  TELEGRAM DigitalOut NAMED "Kalibrering" IS
    QUESTION
      DATA[0] := BYTE(Id);      % Modbus unit address
      DATA[1] := HEX(05);       % Modbus command "05h" Write singel coil (bit)
      DATA[2] := RWORD(0);      % Start adress
      DATA[4] <- BYTE(IF start=0 THEN
                        start   := 1;
                        DO1_old := DO1;
                      ENDIF;
                      IF (DO1<>DO1_old) AND (DO1_old=0) THEN 
                        DATA    := 255;
                      ELSE
                        DATA:=0;
                      ENDIF;
                      DO1_old := DO1;
                      );
      DATA[5] := BYTE(0);

    ANSWER SIZE 8
      DATA[0]  = BYTE(Id);
      DATA[1]  = HEX(05);
      DATA[2]  = RWORD(0);      % Start adress
     %DATA[4]  = BYTE(IF DO1=0 THEN DATA:=0;
     %                ELSE          DATA:=255;
     %                ENDIF;
     %                );
      DATA[5]  = HEX(00);

    TIMEOUT 1000

  END;

END;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for HK Instruments Model DPT-MOD-2000-IN-AZ
%
% Settings module:   Parity: None
%                    Mode:    RTU
%                    Baud:    9.60
%
% Note! When using the kalibration command it will only
%       give a zero calibration command when the DO1 value
%       changes from 0 to another value. 

% Author:  Peter Widetun, ABELKO AB Luleå 
% History: 2010-02-03 inital version
%
DEVICETYPE HKInstruments NAMED "HK Instruments2" TYPEID 21331 IS

  PARAMETER
    Id  : "Adress";

    % Write singel coil (function 5)
    DO1 : "Ny kalibrering";  %R1 Kalibrering nollpunkt Zero point kalibration

  PUBLIC

    % Input registers (function 4)
    IR1       : "Program version" [""];
    IR2       : "Tryck"           ["kPa"];
   %IR3 Not used
    IR4       : "IN1 0-10 Volt"   ["%"];
    IR5       : "IN1 Temp PT1000" ["°C"];
    IR6       : "IN1 Temp NI1000" ["°C"];
    IR7       : "IN1 Temp NTC10k" ["°C"];
    IR8       : "IN2 0-10 Volt"   ["%"];
    IR9       : "IN2 Temp PT1000" ["°C"];
    IR10      : "IN2 Temp NI1000" ["°C"];
    IR11      : "IN2 Temp NTC10k" ["°C"];

    DI1       : "IN1 Status";
    DI2       : "IN2 Status";

  PRIVATE
    start;
    DO1_old;
    
  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;

  TELEGRAM AnalogRead NAMED "Läs tryck/temp" IS

    QUESTION
      DATA[0]  := BYTE(Id);      % Modbus unit address
      DATA[1]  := HEX(04);       % Modbus command "04h" Read registers
      DATA[2]  := RWORD(0);      % Select register
      DATA[4]  := RWORD(11);     % Number of registers
      
    ANSWER SIZE 27
      DATA[0]   = BYTE(Id);      % ID
      DATA[1]   = HEX(04);       % Modbus command "04h" Read registers
     %DATA[2]   = BYTE(22);      % Byte count
      DATA[3]  -> RWORD(IR1:=DATA/100;);    % Program version
      DATA[5]  -> RWORD(IF DATA>32767 THEN  % Pressure
                          IR2:=0;
                        ELSE
                          IR2:=DATA/1000;
                        ENDIF;
                        );
     %DATA[7]  -> RWORD(IR3:=DATA);

      DATA[9]  -> RWORD(IR4 := DATA;);      % 0-100%
      DATA[11] -> RWORD(IF (DATA>=32768) THEN IR5 :=(DATA-65536); ELSE IR5 :=DATA; ENDIF;);  % Temp -50 - +50 °C
      DATA[13] -> RWORD(IF (DATA>=32768) THEN IR6 :=(DATA-65536); ELSE IR6 :=DATA; ENDIF;);  % Temp -50 - +50 °C
      DATA[15] -> RWORD(IF (DATA>=32768) THEN IR7 :=(DATA-65536); ELSE IR7 :=DATA; ENDIF;);  % Temp -50 - +50 °C

      DATA[9]  -> RWORD(IR8 := DATA;);      % 0-100%
      DATA[19] -> RWORD(IF (DATA>=32768) THEN IR9 :=(DATA-65536); ELSE IR9 :=DATA; ENDIF;);  % Temp -50 - +50 °C
      DATA[21] -> RWORD(IF (DATA>=32768) THEN IR10:=(DATA-65536); ELSE IR10:=DATA; ENDIF;);  % Temp -50 - +50 °C
      DATA[23] -> RWORD(IF (DATA>=32768) THEN IR11:=(DATA-65536); ELSE IR11:=DATA; ENDIF;);  % Temp -50 - +50 °C

    TIMEOUT 1000

  END;

  TELEGRAM Digital1 NAMED "Läs statusIN1-2" 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 address
      DATA[4]  := RWORD(2);      % Number of inputs

    ANSWER SIZE 6
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
     %DATA[2]   = BYTE(1);
      DATA[3]  -> BYTE(IF (DATA & 1)   THEN DI1 := 1; ELSE DI1 := 0; ENDIF;
                       IF (DATA & 2)   THEN DI2 := 1; ELSE DI2 := 0; ENDIF;
                       );

    TIMEOUT 1000

  END;

  TELEGRAM DigitalOut NAMED "Kalibrering" IS
    QUESTION
      DATA[0] := BYTE(Id);      % Modbus unit address
      DATA[1] := HEX(05);       % Modbus command "05h" Write singel coil (bit)
      DATA[2] := RWORD(0);      % Start adress
      DATA[4] <- BYTE(IF start=0 THEN
                        start   := 1;
                        DO1_old := DO1;
                      ENDIF;
                      IF (DO1<>DO1_old) AND (DO1_old=0) THEN 
                        DATA    := 255;
                      ELSE
                        DATA:=0;
                      ENDIF;
                      DO1_old := DO1;
                      );
      DATA[5] := BYTE(0);

    ANSWER SIZE 8
      DATA[0]  = BYTE(Id);
      DATA[1]  = HEX(05);
      DATA[2]  = RWORD(0);      % Start adress
     %DATA[4]  = BYTE(IF DO1=0 THEN DATA:=0;
     %                ELSE          DATA:=255;
     %                ENDIF;
     %                );
      DATA[5]  = HEX(00);

    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.