Seneca-modul Z-10-D-IN
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 3
- Uppdaterad
- 2013-08-27
- Skapad
- 2013-08-27
- Kategori
- IO enheter, Modbus
- Visningar
- 2626
Beskrivning
Seneca-modul Z-10-D-IN - Den här snippetsfilen innehåller typdefinitioner för Seneca modulen Z-10-D-IN använd som tio statusingångar.
Bruksanvisning
Typdefinitionen klarar inte av att ställa om adressen i modulen, utan använder grundinställningen med adress ett och baudrate 38400. För att använda fler moduler måste dessa adresseras via RS-485 från PC. I övrigt liknar tillvägagångssättet det för övriga Seneca-moduler.
Det finns ett skript för att konfigurera Seneca enheter
Hur man installerar typdefinitionerna och driftsätter modulerna finns beskrivet i användarmanualen, kapitel 18.7. För inkopplingsanvisningar och liknande, se modulens manual. Den kan hämtas från Senecas hemsida: http://www.seneca.it/
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.