FIDELIX Digital inputs 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
3102

Beskrivning

Drivrutin för Fidelix Digital inputs i UltraBase

Bruksanvisning

Telegram "Läs DI".
Aktivera för inläsning av digital status 1-16. Lämpligt uppdateringsintervall t.ex 5 sekunder eller mindre.

Telegram "Läs DI pulser".
Aktivera för inläsning av pulsregister 1-16. Lämpligt uppdateringsintervall t.ex 5 sekunder eller mindre.

Telegram "Läs DI funktion" (Input jumper mode).
Aktivera för inläsning av bygelinställning för ingång DI 1-16. Lämpligt uppdateringsintervall 60 sekunder eller mer.
Funktion = 0, Counting mode (No jumper connected) Pulses longer than min pulsewidth are counted.
Funktion = 1, Alarm mode (Jumper upper position) Pulses longer than min pulsewidth indicates on RED led.
Funktion = 2, Pulse Indication mode (Jumper lower position) Pulses longer than min pulsewidth indicates on GREEN led.

Telegram "Sätt LED-status".
Aktivera telegram "Sätt LED-status" för indikering på lysdioder. Kan användas när Funktion = 1, Alarm mode (Jumper upper position). Lämpligt uppdateringsintervall 10 sekunder för larm-indikering.
LED status 0 = Led OFF, 1 = Red, 2 = Green, 3 = Reg+Green, 4 = Led OFF, 5 = Red flashing, 6 = Green flashing.

Telegram "Sätt Min Pulstid".
Aktivera för inställning av min pulsetid när funktion 1 eller 2 är vald för ingångar enligt telegram
"Läs DI funktion" (Input jumper mode) ovan. Lämpligt uppdateringsintervall 60 sekunder eller mer.
Ställbar tid är 5 till 1275 ms.

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 inputs
%
% Settings module:
%       Parity: None
%       Baud:   9600
%       Mode:   RTU
%
% OBS! Använd "Read holding registers" kommando 3 för Fidelix
%
% If input is connected longer than minimum pulse width
% status is cleared, otherwise set.
% Register 0

% Author:  Peter Widetun, ABELKO AB Luleå 
% History: 2009-12-14 Ändrat kommando 4 till kommando 3 Read holding registers
%
DEVICETYPE FidelixDI NAMED "Fidelix DI" TYPEID 21230 IS 
  
  PARAMETER
   Id   : "Adress" INT;
   
   Led1  : "LED-status DI1"  INT;
   Led2  : "LED-status DI2"  INT;
   Led3  : "LED-status DI3"  INT;
   Led4  : "LED-status DI4"  INT;
   Led5  : "LED-status DI5"  INT;
   Led6  : "LED-status DI6"  INT;
   Led7  : "LED-status DI7"  INT;
   Led8  : "LED-status DI8"  INT;
   Led9  : "LED-status DI9"  INT;
   Led10 : "LED-status DI10" INT;
   Led11 : "LED-status DI11" INT;
   Led12 : "LED-status DI12" INT;
   Led13 : "LED-status DI13" INT;
   Led14 : "LED-status DI14" INT;
   Led15 : "LED-status DI15" INT;
   Led16 : "LED-status DI16" INT;

   P1  : "Minsta puls DI1"  ["ms"] INT;
   P2  : "Minsta puls DI2"  ["ms"] INT;
   P3  : "Minsta puls DI3"  ["ms"] INT;
   P4  : "Minsta puls DI4"  ["ms"] INT;
   P5  : "Minsta puls DI5"  ["ms"] INT;
   P6  : "Minsta puls DI6"  ["ms"] INT;
   P7  : "Minsta puls DI7"  ["ms"] INT;
   P8  : "Minsta puls DI8"  ["ms"] INT;
   P9  : "Minsta puls DI9"  ["ms"] INT;
   P10 : "Minsta puls DI10" ["ms"] INT;
   P11 : "Minsta puls DI11" ["ms"] INT;
   P12 : "Minsta puls DI12" ["ms"] INT;
   P13 : "Minsta puls DI13" ["ms"] INT;
   P14 : "Minsta puls DI14" ["ms"] INT;
   P15 : "Minsta puls DI15" ["ms"] INT;
   P16 : "Minsta puls DI16" ["ms"] INT;
   
  PUBLIC
   DI1  : "Status DI1"  INT;
   DI2  : "Status DI2"  INT;
   DI3  : "Status DI3"  INT;
   DI4  : "Status DI4"  INT;
   DI5  : "Status DI5"  INT;
   DI6  : "Status DI6"  INT;
   DI7  : "Status DI7"  INT;
   DI8  : "Status DI8"  INT;
   DI9  : "Status DI9"  INT;
   DI10 : "Status DI10" INT;
   DI11 : "Status DI11" INT;
   DI12 : "Status DI12" INT;
   DI13 : "Status DI13" INT;
   DI14 : "Status DI14" INT;
   DI15 : "Status DI15" INT;
   DI16 : "Status DI16" INT;
   
   P_DI1  : "Pulser DI1"  INT;
   P_DI2  : "Pulser DI2"  INT;
   P_DI3  : "Pulser DI3"  INT;
   P_DI4  : "Pulser DI4"  INT;
   P_DI5  : "Pulser DI5"  INT;
   P_DI6  : "Pulser DI6"  INT;
   P_DI7  : "Pulser DI7"  INT;
   P_DI8  : "Pulser DI8"  INT;
   P_DI9  : "Pulser DI9"  INT;
   P_DI10 : "Pulser DI10" INT;
   P_DI11 : "Pulser DI11" INT;
   P_DI12 : "Pulser DI12" INT;
   P_DI13 : "Pulser DI13" INT;
   P_DI14 : "Pulser DI14" INT;
   P_DI15 : "Pulser DI15" INT;
   P_DI16 : "Pulser DI16" INT;
   
   F_DI1  : "Funktion DI1"  INT;
   F_DI2  : "Funktion DI2"  INT;
   F_DI3  : "Funktion DI3"  INT;
   F_DI4  : "Funktion DI4"  INT;
   F_DI5  : "Funktion DI5"  INT;
   F_DI6  : "Funktion DI6"  INT;
   F_DI7  : "Funktion DI7"  INT;
   F_DI8  : "Funktion DI8"  INT;
   F_DI9  : "Funktion DI9"  INT;
   F_DI10 : "Funktion DI10" INT;
   F_DI11 : "Funktion DI11" INT;
   F_DI12 : "Funktion DI12" INT;
   F_DI13 : "Funktion DI13" INT;
   F_DI14 : "Funktion DI14" INT;
   F_DI15 : "Funktion DI15" INT;
   F_DI16 : "Funktion DI16" INT;

  PRIVATE
    Tmp;
    Tmp1;
    Tmp2;
    TmpL;
    TmpP1;
    TmpP2;
    
  BAUDRATE 9600;
  CHRGAPTIMEOUT 5;
  CHECKSUM MODBUS SWAPPED;
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Device definition for FIDELIX Digital inputs
  %
  % Register 0
  % If input is connected longer than minimum pulse width
  % status is cleared, otherwise set.
  % 
  TELEGRAM DigitalInput NAMED "Läs DI" IS
  
    QUESTION
      DATA[0]  := BYTE(Id);     % Modbus unit address
      DATA[1]  := HEX(03);      % Modbus command "03h" Read holding registers
      DATA[2]  := RWORD(0);     % Start address register
      DATA[4]  := RWORD(1);     % Number of registers
    ANSWER SIZE 7
      DATA[0]   = BYTE(Id);     % ID
      DATA[1]   = HEX(03);      % Modbus command "03h" Read holding registers
      DATA[2]   = BYTE(2);      % Byte count
      DATA[3]  -> RWORD(
        Tmp := DATA;
        IF (Tmp & 1)     THEN DI1 :=0; ELSE DI1 :=1; ENDIF;
        IF (Tmp & 2)     THEN DI2 :=0; ELSE DI2 :=1; ENDIF;
        IF (Tmp & 4)     THEN DI3 :=0; ELSE DI3 :=1; ENDIF;
        IF (Tmp & 8)     THEN DI4 :=0; ELSE DI4 :=1; ENDIF;
        IF (Tmp & 16)    THEN DI5 :=0; ELSE DI5 :=1; ENDIF;
        IF (Tmp & 32)    THEN DI6 :=0; ELSE DI6 :=1; ENDIF;
        IF (Tmp & 64)    THEN DI7 :=0; ELSE DI7 :=1; ENDIF;
        IF (Tmp & 128)   THEN DI8 :=0; ELSE DI8 :=1; ENDIF;
        IF (Tmp & 256)   THEN DI9 :=0; ELSE DI9 :=1; ENDIF;
        IF (Tmp & 512)   THEN DI10:=0; ELSE DI10:=1; ENDIF;
        IF (Tmp & 1024)  THEN DI11:=0; ELSE DI11:=1; ENDIF;
        IF (Tmp & 2048)  THEN DI12:=0; ELSE DI12:=1; ENDIF;
        IF (Tmp & 4096)  THEN DI13:=0; ELSE DI13:=1; ENDIF;
        IF (Tmp & 8192)  THEN DI14:=0; ELSE DI14:=1; ENDIF;
        IF (Tmp & 16384) THEN DI15:=0; ELSE DI15:=1; ENDIF;
        IF (Tmp & 32768) THEN DI16:=0; ELSE DI16:=1; ENDIF;
      );
        
    TIMEOUT 1000
  END;
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Device definition for FIDELIX Digital pulse counter
  %
  % Pulses longer than corresponding pulse width register are counted.
  % Register 14-29
  % 
  TELEGRAM DigitalPulse NAMED "Läs DI pulser" IS
    
    QUESTION
      DATA[0]  := BYTE(Id);     % Modbus unit address
      DATA[1]  := HEX(03);      % Modbus command "03h" Read holding registers
      DATA[2]  := RWORD(14);    % Start address register
      DATA[4]  := RWORD(16);    % Number of registers
    ANSWER SIZE 37
      DATA[0]   = BYTE(Id);     % ID
      DATA[1]   = HEX(03);      % Modbus command "03h" Read holding registers
      DATA[2]   = BYTE(32);     % Byte count
      DATA[3]  -> RWORD(P_DI1  := DATA;);
      DATA[5]  -> RWORD(P_DI2  := DATA;);
      DATA[7]  -> RWORD(P_DI3  := DATA;);
      DATA[9]  -> RWORD(P_DI4  := DATA;);
      DATA[11] -> RWORD(P_DI5  := DATA;);
      DATA[13] -> RWORD(P_DI6  := DATA;);
      DATA[15] -> RWORD(P_DI7  := DATA;);
      DATA[17] -> RWORD(P_DI8  := DATA;);
      DATA[19] -> RWORD(P_DI9  := DATA;);
      DATA[21] -> RWORD(P_DI10 := DATA;);
      DATA[23] -> RWORD(P_DI11 := DATA;);
      DATA[25] -> RWORD(P_DI12 := DATA;);
      DATA[27] -> RWORD(P_DI13 := DATA;);
      DATA[29] -> RWORD(P_DI14 := DATA;);
      DATA[31] -> RWORD(P_DI15 := DATA;);
      DATA[33] -> RWORD(P_DI16 := DATA;);
                        
    TIMEOUT 1000
  END;
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Device definition for FIDELIX Digital input Jumper mode
  %
  % Register 1-2
  %
  % No jumper connected        0 = Pulse counting mode
  %                                Pulses longer than minimum pulsewidth are counted.
  % Jumper mode upper position 1 = Alarm mode, 
  %                                Pulses longer than minimum pulsewidth indicates om RED led
  % Jumper mode lower position 2 = Pulse indication mode
  %                                Pulses longer than minimum pulsewidth indicates om GREEN led
  % Funktion = 0, Counting mode
  % Funktion = 1, Alarm mode
  % Funktion = 2, Pulse Indication mode
  %
  TELEGRAM DigitalMode NAMED "Läs DI funktion" IS
  
    QUESTION
      DATA[0]  := BYTE(Id);     % Modbus unit address
      DATA[1]  := HEX(03);      % Modbus command "03h" Read holding registers
      DATA[2]  := RWORD(1);     % Start address register
      DATA[4]  := RWORD(2);     % Number of registers
    ANSWER SIZE 9
      DATA[0]   = BYTE(Id);     % ID
      DATA[1]   = HEX(03);      % Modbus command "03h" Read holding registers
      DATA[2]   = BYTE(4);      % Byte count
      DATA[3]  -> RWORD(Tmp1 := DATA;);
      DATA[5]  -> RWORD(
        Tmp2 := DATA;
        IF(Tmp1&1)    =0 THEN F_DI1 :=1; ELSIF(Tmp2&1)    =0 THEN F_DI1 :=2; ELSE F_DI1 :=0; ENDIF;
        IF(Tmp1&2)    =0 THEN F_DI2 :=1; ELSIF(Tmp2&2)    =0 THEN F_DI2 :=2; ELSE F_DI2 :=0; ENDIF;
        IF(Tmp1&4)    =0 THEN F_DI3 :=1; ELSIF(Tmp2&4)    =0 THEN F_DI3 :=2; ELSE F_DI3 :=0; ENDIF;
        IF(Tmp1&8)    =0 THEN F_DI4 :=1; ELSIF(Tmp2&8)    =0 THEN F_DI4 :=2; ELSE F_DI4 :=0; ENDIF;
        IF(Tmp1&16)   =0 THEN F_DI5 :=1; ELSIF(Tmp2&16)   =0 THEN F_DI5 :=2; ELSE F_DI5 :=0; ENDIF;
        IF(Tmp1&32)   =0 THEN F_DI6 :=1; ELSIF(Tmp2&32)   =0 THEN F_DI6 :=2; ELSE F_DI6 :=0; ENDIF;
        IF(Tmp1&64)   =0 THEN F_DI7 :=1; ELSIF(Tmp2&64)   =0 THEN F_DI7 :=2; ELSE F_DI7 :=0; ENDIF;
        IF(Tmp1&128)  =0 THEN F_DI8 :=1; ELSIF(Tmp2&128)  =0 THEN F_DI8 :=2; ELSE F_DI8 :=0; ENDIF;
        IF(Tmp1&256)  =0 THEN F_DI9 :=1; ELSIF(Tmp2&256)  =0 THEN F_DI9 :=2; ELSE F_DI9 :=0; ENDIF;
        IF(Tmp1&512)  =0 THEN F_DI10:=1; ELSIF(Tmp2&512)  =0 THEN F_DI10:=2; ELSE F_DI10:=0; ENDIF;
        IF(Tmp1&1024) =0 THEN F_DI11:=1; ELSIF(Tmp2&1024) =0 THEN F_DI11:=2; ELSE F_DI11:=0; ENDIF;
        IF(Tmp1&2048) =0 THEN F_DI12:=1; ELSIF(Tmp2&2048) =0 THEN F_DI12:=2; ELSE F_DI12:=0; ENDIF;
        IF(Tmp1&4096) =0 THEN F_DI13:=1; ELSIF(Tmp2&4096) =0 THEN F_DI13:=2; ELSE F_DI13:=0; ENDIF;
        IF(Tmp1&8192) =0 THEN F_DI14:=1; ELSIF(Tmp2&8192) =0 THEN F_DI14:=2; ELSE F_DI14:=0; ENDIF;
        IF(Tmp1&16384)=0 THEN F_DI15:=1; ELSIF(Tmp2&16384)=0 THEN F_DI15:=2; ELSE F_DI15:=0; ENDIF;
        IF(Tmp1&32768)=0 THEN F_DI16:=1; ELSIF(Tmp2&32768)=0 THEN F_DI16:=2; ELSE F_DI16:=0; ENDIF;
      );
                        
    TIMEOUT 1000
  END;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Device definition for FIDELIX Set digital leds
  % 
  % Register 3-5
  % Indicate Led OFF            = 0
  %          Red                = 1
  %          Green              = 2
  %          Red+Green          = 3
  %          Red flashing       = 1+4 = 5
  %          Green flashing     = 2+4 = 6
  %          Red+Green flashing = 1+2+4 = 7
  %
  TELEGRAM LedStatusOut NAMED "Sätt LED-status" IS
  
    QUESTION
      DATA[0] := BYTE(Id);  % Modbus unit address
      DATA[1] := HEX(10);   % Modbus command "0x10" write multiple registers
      DATA[2] := RWORD(3);  % start register
      DATA[4] := RWORD(3);  % number of registers to write
      DATA[6] := BYTE(6);   % number of bytes
      DATA[7] <- RWORD(
        TmpL := 65535;
        IF (Led1  & 1) THEN TmpL:=TmpL-1;     ENDIF;
        IF (Led2  & 1) THEN TmpL:=TmpL-2;     ENDIF;
        IF (Led3  & 1) THEN TmpL:=TmpL-4;     ENDIF;
        IF (Led4  & 1) THEN TmpL:=TmpL-8;     ENDIF;
        IF (Led5  & 1) THEN TmpL:=TmpL-16;    ENDIF;
        IF (Led6  & 1) THEN TmpL:=TmpL-32;    ENDIF;
        IF (Led7  & 1) THEN TmpL:=TmpL-64;    ENDIF;
        IF (Led8  & 1) THEN TmpL:=TmpL-128;   ENDIF;
        IF (Led9  & 1) THEN TmpL:=TmpL-256;   ENDIF;
        IF (Led10 & 1) THEN TmpL:=TmpL-512;   ENDIF;
        IF (Led11 & 1) THEN TmpL:=TmpL-1024;  ENDIF;
        IF (Led12 & 1) THEN TmpL:=TmpL-2048;  ENDIF;
        IF (Led13 & 1) THEN TmpL:=TmpL-4096;  ENDIF;
        IF (Led14 & 1) THEN TmpL:=TmpL-8192;  ENDIF;
        IF (Led15 & 1) THEN TmpL:=TmpL-16384; ENDIF;
        IF (Led16 & 1) THEN TmpL:=TmpL-32768; ENDIF;
        DATA := TmpL;
      );
      DATA[9] <- RWORD(
        TmpL := 65535;
        IF (Led1  & 2) THEN TmpL:=TmpL-1;     ENDIF;
        IF (Led2  & 2) THEN TmpL:=TmpL-2;     ENDIF;
        IF (Led3  & 2) THEN TmpL:=TmpL-4;     ENDIF;
        IF (Led4  & 2) THEN TmpL:=TmpL-8;     ENDIF;
        IF (Led5  & 2) THEN TmpL:=TmpL-16;    ENDIF;
        IF (Led6  & 2) THEN TmpL:=TmpL-32;    ENDIF;
        IF (Led7  & 2) THEN TmpL:=TmpL-64;    ENDIF;
        IF (Led8  & 2) THEN TmpL:=TmpL-128;   ENDIF;
        IF (Led9  & 2) THEN TmpL:=TmpL-256;   ENDIF;
        IF (Led10 & 2) THEN TmpL:=TmpL-512;   ENDIF;
        IF (Led11 & 2) THEN TmpL:=TmpL-1024;  ENDIF;
        IF (Led12 & 2) THEN TmpL:=TmpL-2048;  ENDIF;
        IF (Led13 & 2) THEN TmpL:=TmpL-4096;  ENDIF;
        IF (Led14 & 2) THEN TmpL:=TmpL-8192;  ENDIF;
        IF (Led15 & 2) THEN TmpL:=TmpL-16384; ENDIF;
        IF (Led16 & 2) THEN TmpL:=TmpL-32768; ENDIF;
        DATA := TmpL;
      );
      DATA[11]<- RWORD(
        TmpL := 0;
        IF (Led1  & 4) THEN TmpL:=TmpL+1;     ENDIF;
        IF (Led2  & 4) THEN TmpL:=TmpL+2;     ENDIF;
        IF (Led3  & 4) THEN TmpL:=TmpL+4;     ENDIF;
        IF (Led4  & 4) THEN TmpL:=TmpL+8;     ENDIF;
        IF (Led5  & 4) THEN TmpL:=TmpL+16;    ENDIF;
        IF (Led6  & 4) THEN TmpL:=TmpL+32;    ENDIF;
        IF (Led7  & 4) THEN TmpL:=TmpL+64;    ENDIF;
        IF (Led8  & 4) THEN TmpL:=TmpL+128;   ENDIF;
        IF (Led9  & 4) THEN TmpL:=TmpL+256;   ENDIF;
        IF (Led10 & 4) THEN TmpL:=TmpL+512;   ENDIF;
        IF (Led11 & 4) THEN TmpL:=TmpL+1024;  ENDIF;
        IF (Led12 & 4) THEN TmpL:=TmpL+2048;  ENDIF;
        IF (Led13 & 4) THEN TmpL:=TmpL+4096;  ENDIF;
        IF (Led14 & 4) THEN TmpL:=TmpL+8192;  ENDIF;
        IF (Led15 & 4) THEN TmpL:=TmpL+16384; ENDIF;
        IF (Led16 & 4) THEN TmpL:=TmpL+32768; ENDIF;
        DATA := TmpL;
      );

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

    TIMEOUT 1000

  END;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Device definition for FIDELIX Set minimum pulsewidth
  %
  % Register 6-13
  % Filter funnction for digital input.
  % Minimum pulse width for digital input is set 5 to 1275 ms (1-255).
  % 
  TELEGRAM Pulsewidth1 NAMED "Sätt Min Pulstid" IS
  
    QUESTION
      DATA[0] := BYTE(Id);  % Modbus unit address
      DATA[1] := HEX(10);   % Modbus command "0x10" write multiple registers
      DATA[2] := RWORD(6);  % start register
      DATA[4] := RWORD(8);  % number of registers to write
      DATA[6] := BYTE(16);  % number of bytes
      DATA[7] <- RWORD(
        TmpP1 := P1/5;
        IF    TmpP1<1   THEN TmpP1:=1; 
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P2/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
      DATA[9] <- RWORD(
        TmpP1 := P3/5;
        IF    TmpP1<1   THEN TmpP1:=1;
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P4/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
      DATA[11] <- RWORD(
        TmpP1 := P5/5;
        IF    TmpP1<1   THEN TmpP1:=1;
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P6/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
      DATA[13] <- RWORD(
        TmpP1 := P7/5;
        IF    TmpP1<1   THEN TmpP1:=1;
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P8/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
      DATA[15] <- RWORD(
        TmpP1 := P9/5;
        IF    TmpP1<1   THEN TmpP1:=1;
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P10/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
      DATA[17] <- RWORD(
        TmpP1 := P11/5;
        IF    TmpP1<1   THEN TmpP1:=1;
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P12/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
      DATA[19] <- RWORD(
        TmpP1 := P13/5;
        IF    TmpP1<1   THEN TmpP1:=1;
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P14/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
      DATA[21] <- RWORD(
        TmpP1 := P15/5;
        IF    TmpP1<1   THEN TmpP1:=1;
        ELSIF TmpP1>255 THEN TmpP1:=255;
        ENDIF;
        TmpP2 := P16/5;
        IF    TmpP2<1   THEN TmpP2:=1;
        ELSIF TmpP2>255 THEN TmpP2:=255;
        ENDIF;
        DATA := TmpP1 + (TmpP2*256);
      );
    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(10);
     %DATA[2] = RWORD(0);     % start register
     %DATA[4] = RWORD(8);     % 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.