FIDELIX Digital outputs UltraBase

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
3
Uppdaterad
2019-01-07
Skapad
2013-04-07
Kategori
IO enheter, Modbus
Visningar
2514

Beskrivning

Drivrutin för Fidelix Digital output i UltraBase

Bruksanvisning

Aktivera telegram "Ställ DU" för att uppdatera utgångar. Alla utgångar kommer att ställas. Sätt lämpligt uppdateringsintervall t.ex 5 sekunder.

Aktivera telegram "Ställ DU start" bara om startvärdet för utgångar måste anta ett visst värde när Fidelix modulen startas. Lämpligt uppdateringsintervall 60 sekunder eller mer.
Ställ startvärde 0 eller 1 för aktivering. Alla andra värden (t.ex. -1) deaktiverar startvärdet.

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" INT;

   DU1  : "Digital ut 1" INT;
   DU2  : "Digital ut 2" INT;
   DU3  : "Digital ut 3" INT;
   DU4  : "Digital ut 4" INT;
   DU5  : "Digital ut 5" INT;
   DU6  : "Digital ut 6" INT;
   DU7  : "Digital ut 7" INT;
   DU8  : "Digital ut 8" INT;
   
   DU1_Start  : "Startvärde DU1" INT;
   DU2_Start  : "Startvärde DU2" INT;
   DU3_Start  : "Startvärde DU3" INT;
   DU4_Start  : "Startvärde DU4" INT;
   DU5_Start  : "Startvärde DU5" INT;
   DU6_Start  : "Startvärde DU6" INT;
   DU7_Start  : "Startvärde DU7" INT;
   DU8_Start  : "Startvärde DU8" INT;

   
  PUBLIC

  PRIVATE
    Tmp;

  BAUDRATE 9600;
  CHRGAPTIMEOUT 5;
  CHECKSUM MODBUS SWAPPED;
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Ställ digital ut 1-8
  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;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Device definition for FIDELIX Digital outputs startvalue
  %
  % Aktivera och ställ startvärde för utgång 1-8.
  % Startvärde 0  = Aktivera startvärde 0
  % Startvärde 1  = Aktivera startvärde 1
  % Alla andra startvärden avaktiverar startvärdet.
  %
  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_Start=0 THEN Tmp:=Tmp+256;   % Bit 0 och 8
                       ELSIF DU1_Start=1 THEN Tmp:=Tmp+257;
                       ENDIF;
                       IF    DU2_Start=0 THEN Tmp:=Tmp+512;   % Bit 1 och 9
                       ELSIF DU2_Start=1 THEN Tmp:=Tmp+514;
                       ENDIF;
                       IF    DU3_Start=0 THEN Tmp:=Tmp+1024;  % Bit 2 och 10
                       ELSIF DU3_Start=1 THEN Tmp:=Tmp+1028;
                       ENDIF;
                       IF    DU4_Start=0 THEN Tmp:=Tmp+2048;  % Bit 3 och 11
                       ELSIF DU4_Start=1 THEN Tmp:=Tmp+2056;
                       ENDIF;
                       IF    DU5_Start=0 THEN Tmp:=Tmp+4096;  % Bit 4 och 12
                       ELSIF DU5_Start=1 THEN Tmp:=Tmp+4112;
                       ENDIF;
                       IF    DU6_Start=0 THEN Tmp:=Tmp+8192;  % Bit 5 och 13
                       ELSIF DU6_Start=1 THEN Tmp:=Tmp+8224;
                       ENDIF;
                       IF    DU7_Start=0 THEN Tmp:=Tmp+16384; % Bit 6 och 14
                       ELSIF DU7_Start=1 THEN Tmp:=Tmp+16448;
                       ENDIF;
                       IF    DU8_Start=0 THEN Tmp:=Tmp+32768; % Bit 7 och 15
                       ELSIF DU8_Start=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.