Seneca Z-10-DIN

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
2
Uppdaterad
2013-08-31
Skapad
2013-04-06
Kategori
IO enheter, Modbus
Visningar
2736

Beskrivning

Aermec enhet med 10 st digitala ingångar.

Bruksanvisning

Se till att anropa "readCounters" minst vart tionde minut om frekvensen är i närheten av 100 Hz
Filter skall ha värden mellan 1-255 ju högre frekvens desto lägre filtervärde.

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 Seneca Z-10-D-IN used as 10 status inputs
%
% Se till att anropa "readCounters" minst vart tionde minut om frekvensen
% är i närheten av 100 Hz
% Filter skall ha värden mellan 1-255 ju högre frekvens desto lägre filtervärde
%
DEVICETYPE SenecaZ10DIN NAMED "Seneca Z-10-DIN" TYPEID 21010
IS 
  PARAMETER
    Id :"Address";
    Filter :"Filter";
  PUBLIC
    DI_1 :"DI1";
    DI_2 :"DI2";
    DI_3 :"DI3";
    DI_4 :"DI4";
    DI_5 :"DI5";
    DI_6 :"DI6";
    DI_7 :"DI7";
    DI_8 :"DI8";
    DI_9 :"DI9";
    DI_10 :"DI10";
    C1:  "Räknare 1";
    C2:  "Räknare 2";
    C3:  "Räknare 3";
    C4:  "Räknare 4";
    C5:  "Räknare 5";
    C6:  "Räknare 6";
    C7:  "Räknare 7";
    C8:  "Räknare 8";
    C9:  "Räknare 9";
    C10: "Räknare 10";
  PRIVATE
    state;
    ovf1;
    ovf2;
    ovf3;
    ovf4;
    ovf5;
    ovf6;
    ovf7;
    ovf8;
    ovf9;
    ovf10;
    tmp;
  BAUDRATE 38400;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM ReadInputs NAMED "Read Inputs" IS
    QUESTION
      DATA[0] := BYTE(Id);
      DATA[1] := HEX(03);
      DATA[2] := HEX(00);
      DATA[3] := HEX(01);
      DATA[4] := HEX(00);
      DATA[5] := HEX(01);
    ANSWER SIZE 7
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(03);   % modbus funktion
      DATA[2] = HEX(02);   % antal byte
      DATA[3] -> RWORD(IF (DATA & 1) > 0 THEN DI_1 := 1; ELSE DI_1 := 0; ENDIF;
  IF (DATA & 2) > 0 THEN DI_2 := 1; ELSE DI_2 := 0; ENDIF;
                       IF (DATA & 4) > 0 THEN DI_3 := 1; ELSE DI_3 := 0; ENDIF;
                       IF (DATA & 8) > 0 THEN DI_4 := 1; ELSE DI_4 := 0; ENDIF;
                       IF (DATA & 16) > 0 THEN DI_5 := 1; ELSE DI_5 := 0; ENDIF;
                       IF (DATA & 32) > 0 THEN DI_6 := 1; ELSE DI_6 := 0; ENDIF;
                       IF (DATA & 64) > 0 THEN DI_7 := 1; ELSE DI_7 := 0; ENDIF;
                       IF (DATA & 128) > 0 THEN DI_8 := 1; ELSE DI_8 := 0; ENDIF;
                       IF (DATA & 256) > 0 THEN DI_9 := 1; ELSE DI_9 := 0; ENDIF;
                       IF (DATA & 512) > 0 THEN DI_10 := 1; ELSE DI_10 := 0; ENDIF;
                      );
    TIMEOUT 300
  END;
  TELEGRAM ReadCounters NAMED "Read Counters" IS
    QUESTION
      DATA[0] := BYTE(Id);
      DATA[1] := HEX(03);
      DATA[2] <- RWORD(
IF (state>6) THEN state:=1; ENDIF;
  DATA:=state*2;
);
      DATA[4] := HEX(00);
      DATA[5] := HEX(02);
    ANSWER SIZE 9
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(03);
      DATA[2] = HEX(04);
      DATA[3] -> RWORD( 
IF    (state=1) THEN tmp:=DATA+ovf1*65536;
  IF (tmp<C1) THEN ovf1:=ovf1+1; C1:=DATA+ovf1*65536; ELSE C1:=tmp; ENDIF;
ELSIF (state=2) THEN tmp:=DATA+ovf3*65536;
  IF (tmp<C3) THEN ovf3:=ovf3+1; C3:=DATA+ovf3*65536; ELSE C3:=tmp; ENDIF;
ELSIF (state=3) THEN tmp:=DATA+ovf5*65536;
  IF (tmp<C5) THEN ovf5:=ovf5+1; C5:=DATA+ovf5*65536; ELSE C5:=tmp; ENDIF;
ELSIF (state=4) THEN tmp:=DATA+ovf7*65536;
  IF (tmp<C7) THEN ovf7:=ovf7+1; C7:=DATA+ovf7*65536; ELSE C7:=tmp; ENDIF;
ELSIF (state=5) THEN C9:=DATA;
ELSIF (state=6) THEN C10:=DATA;
ENDIF;
);
       DATA[5] -> RWORD( 
IF (state=1) THEN tmp:=DATA+ovf2*65536;
  IF (tmp<C2) THEN ovf2:=ovf2+1; C2:=DATA+ovf2*65536; ELSE C2:=tmp; ENDIF;
ELSIF (state=2) THEN tmp:=DATA+ovf4*65536;
  IF (tmp<C4) THEN ovf4:=ovf4+1; C4:=DATA+ovf4*65536; ELSE C4:=tmp; ENDIF;
ELSIF (state=3) THEN tmp:=DATA+ovf6*65536;
  IF (tmp<C6) THEN ovf6:=ovf6+1; C6:=DATA+ovf6*65536; ELSE C6:=tmp; ENDIF;
ELSIF (state=4) THEN tmp:=DATA+ovf8*65536;
  IF (tmp<C8) THEN ovf8:=ovf8+1; C8:=DATA+ovf8*65536; ELSE C8:=tmp; ENDIF;
ELSIF (state=5) THEN C9:=C9+DATA*65536;
ELSIF (state=6) THEN C10:=C10+DATA*65536;
ENDIF;
state:=state+1;
);
    TIMEOUT 300
  END;
  TELEGRAM WriteFilt NAMED "Write Filt" IS
    QUESTION
      DATA[0] := BYTE(Id);
      DATA[1] := HEX(06);
      DATA[2] <- RWORD(DATA := 18;);
      DATA[4] <- RWORD(DATA := Filter;);
    ANSWER SIZE 8
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(06);
    TIMEOUT 300
  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.