Seneca Z6-D-In & 2-D-OUT

Detaljer

Typ
Drivrutin
Upplaggd av
Jens Marklund, Abelko Innovation
Version
2
Uppdaterad
2014-12-01
Skapad
2014-12-01
Kategori
IO enheter
Visningar
2038

Beskrivning

Seneca modul med 6 Digitala ingångar och 2st Digital utgångar.

Bruksanvisning

Seneca modul med 6 Digitala ingångar och 2st Digital utgångar.

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

DEVICETYPE SenecaZDIOUT NAMED "Seneca Z-D-IO" TYPEID 21019 IS 
% Device definition for Z-6D-IN &-2D-OUT 
% 6 digital inputs and 2 digital outputs
%
% History: 2008-03-17
%
  PARAMETER
    Id     :"Adress";
    A_Led  :"Larmdiod";
    DO_1   :"DU1";
    DO_2   :"DU2";
  PUBLIC
    DI_1 :"DI1";
    DI_2 :"DI2";
    DI_3 :"DI3";
    DI_4 :"DI4";
    DI_5 :"DI5";
    DI_6 :"DI6";
  PRIVATE
    Tmp;

  BAUDRATE 9600;
  CHECKSUM MODBUS SWAPPED;
  
  TELEGRAM WriteDOut NAMED "Write Output" IS

    QUESTION
      DATA[0] := BYTE(Id);    % Modbus unit address
      DATA[1] := HEX(10);     % Modbus command "$10" write multiple registers
      DATA[2] := RWORD(1);    % start register
      DATA[4] := RWORD(1);    % number of registers to write 
      DATA[6] := HEX(02);     % number of bytes to send 
      
      DATA[7] <- RWORD(       % "Outputs" 40002 
                       Tmp := 0;
                       IF DO_2  THEN Tmp := Tmp + 1; ENDIF; % Set DO2
                       IF DO_1  THEN Tmp := Tmp + 2; ENDIF; % Set DO1
                       IF A_Led THEN Tmp := Tmp + 4; ENDIF; % Set Alarmled
                       DATA := Tmp;
                       );                 

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

    TIMEOUT 500

  END;

  TELEGRAM ReadInputs NAMED "Read Inputs" IS

    QUESTION
      DATA[0] := BYTE(Id);
      DATA[1] := HEX(03);
      DATA[2] := RWORD(1);  % start register
      DATA[4] := RWORD(1);  % number of registers to read 

    ANSWER SIZE 7
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(03);    % modbus funktion
      DATA[2] = HEX(02);    % antal byte
      DATA[3] -> RWORD(IF (DATA & 32768) > 0 THEN DI_1 := 1; ELSE DI_1 := 0; ENDIF;
                       IF (DATA & 16384) > 0 THEN DI_2 := 1; ELSE DI_2 := 0; ENDIF;
                       IF (DATA &  8192) > 0 THEN DI_3 := 1; ELSE DI_3 := 0; ENDIF;
                       IF (DATA &  4096) > 0 THEN DI_4 := 1; ELSE DI_4 := 0; ENDIF;
                       IF (DATA &  2048) > 0 THEN DI_5 := 1; ELSE DI_5 := 0; ENDIF;
                       IF (DATA &  1024) > 0 THEN DI_6 := 1; ELSE DI_6 := 0; ENDIF;
                      );

    TIMEOUT 500

  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.