FIDELIX Digital outputs

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
1
Uppdaterad
2013-08-27
Skapad
2013-08-27
Kategori
IO enheter, Modbus
Visningar
2839

Beskrivning

Device definition for FIDELIX Digital outputs

Bruksanvisning

See Fidelix I/O-module specifications (pdf)

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 FIDELIX Digital outputs
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU

% Author:  Peter Widetun, ABELKO AB Luleå 
% History: 2009-01-12
%
DEVICETYPE FidelixDOUT NAMED "Fidelix DU" TYPEID 21225 IS 
  
  PARAMETER

   Id   : "Adress";

   DU1  : "Digital ut 1";
   DU2  : "Digital ut 2";
   DU3  : "Digital ut 3";
   DU4  : "Digital ut 4";
   DU5  : "Digital ut 5";
   DU6  : "Digital ut 6";
   DU7  : "Digital ut 7";
   DU8  : "Digital ut 8";
   
  PUBLIC

  PRIVATE
    Tmp;

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;
  
  TELEGRAM DigitalOutput NAMED "Ställ DU" IS
  
    QUESTION
      DATA[0] := BYTE(Id);  % Modbus unit address
      DATA[1] := HEX(10);   % Modbus command "0x10" write multiple registers
      DATA[2] := RWORD(0);  % start register
      DATA[4] := RWORD(1);  % number of registers to write
      DATA[6] := BYTE(2);  % number of bytes
      DATA[7] <- RWORD(IF DU1 THEN Tmp := 1; ELSE Tmp := 0; ENDIF;
                       IF DU2 THEN Tmp := Tmp + 2;   ENDIF;
                       IF DU3 THEN Tmp := Tmp + 4;   ENDIF;
                       IF DU4 THEN Tmp := Tmp + 8;   ENDIF;
                       IF DU5 THEN Tmp := Tmp + 16;  ENDIF;
                       IF DU6 THEN Tmp := Tmp + 32;  ENDIF;
                       IF DU7 THEN Tmp := Tmp + 64;  ENDIF;
                       IF DU8 THEN Tmp := Tmp + 128; ENDIF;
                       DATA := Tmp;
                       );

    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(10);
     %DATA[2] = RWORD(0);     % start register
     %DATA[4] = RWORD(1);     % number of registers to write

    TIMEOUT 1000

  END;

END;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for FIDELIX Digital outputs startvalue
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU

% Ställ startvärde 0 eller 1 för aktivering
% Alla andra värden deaktiverar startvärdet.
%
% Author:  Peter Widetun, ABELKO AB Luleå 
% History: 2009-01-12
%
DEVICETYPE FidelixDOUT NAMED "Fidelix DUstart" TYPEID 21226 IS 
  
  PARAMETER

   Id   : "Adress";

   DU1  : "Startvärde DU1";
   DU2  : "Startvärde DU2";
   DU3  : "Startvärde DU3";
   DU4  : "Startvärde DU4";
   DU5  : "Startvärde DU5";
   DU6  : "Startvärde DU6";
   DU7  : "Startvärde DU7";
   DU8  : "Startvärde DU8";
   
  PUBLIC

  PRIVATE
    Tmp;

  BAUDRATE 9600;

  CHECKSUM MODBUS SWAPPED;
  
  TELEGRAM DigitalOutStart NAMED "Ställ DU start" IS
  
    QUESTION
      DATA[0] := BYTE(Id);  % Modbus unit address
      DATA[1] := HEX(10);   % Modbus command "0x10" write multiple registers
      DATA[2] := RWORD(1);  % start register
      DATA[4] := RWORD(1);  % number of registers to write
      DATA[6] := BYTE(2);   % number of bytes
      DATA[7] <- RWORD(Tmp := 0;
                       IF    DU1=0 THEN Tmp:=Tmp+256;   % Bit 0 och 8
                       ELSIF DU1=1 THEN Tmp:=Tmp+257;
                       ENDIF;
                       IF    DU2=0 THEN Tmp:=Tmp+512;   % Bit 1 och 9
                       ELSIF DU2=1 THEN Tmp:=Tmp+514;
                       ENDIF;
                       IF    DU3=0 THEN Tmp:=Tmp+1024;  % Bit 2 och 10
                       ELSIF DU3=1 THEN Tmp:=Tmp+1028;
                       ENDIF;
                       IF    DU4=0 THEN Tmp:=Tmp+2048;  % Bit 3 och 11
                       ELSIF DU4=1 THEN Tmp:=Tmp+2056;
                       ENDIF;
                       IF    DU5=0 THEN Tmp:=Tmp+4096;  % Bit 4 och 12
                       ELSIF DU5=1 THEN Tmp:=Tmp+4112;
                       ENDIF;
                       IF    DU6=0 THEN Tmp:=Tmp+8192;  % Bit 5 och 13
                       ELSIF DU6=1 THEN Tmp:=Tmp+8224;
                       ENDIF;
                       IF    DU7=0 THEN Tmp:=Tmp+16384; % Bit 6 och 14
                       ELSIF DU7=1 THEN Tmp:=Tmp+16448;
                       ENDIF;
                       IF    DU8=0 THEN Tmp:=Tmp+32768; % Bit 7 och 15
                       ELSIF DU8=1 THEN Tmp:=Tmp+32896;
                       ENDIF;
                       DATA := Tmp;
                       );

    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(10);
     %DATA[2] = RWORD(1);     % start register
     %DATA[4] = RWORD(1);     % number of registers to write

    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.