148 lines
4.1 KiB
Plaintext
148 lines
4.1 KiB
Plaintext
FUNCTION_BLOCK "MImpulsGeber"
|
|
TITLE = Modul Zähler über Zahnrad-Sensor Wert in Zähler-DB eintragen
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
Ink_DB { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int; // DB-Nr des Inkremental-Gebers (Zählerbaugruppe) Neu-Sync-Zähler
|
|
B_Zaehlen : Bool; // Sensor zum Zählen
|
|
Antrieb_aktiv : Bool; // Antrieb ist aktiv
|
|
Quit : Bool;
|
|
Zeit_Signal_zu_lang : Time := T#350ms;
|
|
Zeit_Kein_Signal : Time := T#500ms;
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
Signal : Bool; // Falls kein InkDB
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
Err_Kein_Signal : Bool; // Kein_Signal bei laufenden Antrieb
|
|
Err_Signal_zu_lang : Bool; // Signal bei laufenden Antrieb zu lang
|
|
END_VAR
|
|
|
|
VAR
|
|
Sensor_entprellen : Bool;
|
|
Timer_1 {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
|
|
Timer_2 {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
|
|
Timer_3 {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
NETWORK
|
|
TITLE = Initialisierung
|
|
SET;
|
|
R #Signal;
|
|
|
|
NETWORK
|
|
TITLE = Störungen
|
|
|
|
//Störung quittieren:
|
|
U #Quit;
|
|
R #Err_Signal_zu_lang;
|
|
R #Err_Kein_Signal;
|
|
|
|
//Signal zu lang:
|
|
U #B_Zaehlen ;//Sensor zum Zählen
|
|
U #Antrieb_aktiv ;//Antrieb ist aktiv
|
|
UN #Quit;
|
|
= "M200.0";
|
|
|
|
CALL #Timer_2
|
|
{time_type := 'Time'}
|
|
( IN := "M200.0" ,
|
|
PT := #Zeit_Signal_zu_lang
|
|
);
|
|
|
|
U #Timer_2.Q;
|
|
S #Err_Signal_zu_lang;
|
|
|
|
//Kein Signal:
|
|
UN #B_Zaehlen ;//Sensor zum Zählen
|
|
U #Antrieb_aktiv ;//Antrieb ist aktiv
|
|
UN #Quit;
|
|
= "M200.0";
|
|
|
|
CALL #Timer_3
|
|
{time_type := 'Time'}
|
|
( IN := "M200.0" ,
|
|
PT := #Zeit_Kein_Signal
|
|
);
|
|
|
|
U #Timer_3.Q;
|
|
S #Err_Kein_Signal;
|
|
|
|
NETWORK
|
|
TITLE = Zählen über Sensor
|
|
UN #B_Zaehlen ;//Sensor zum Zählen
|
|
U #Sensor_entprellen ;//Sperre Auswertung schon erfolgt
|
|
U #Antrieb_aktiv ;//Antrieb ist aktiv
|
|
= "M200.0";
|
|
|
|
CALL #Timer_1
|
|
{time_type := 'Time'}
|
|
( IN := "M200.0" ,
|
|
PT := t#50ms
|
|
);
|
|
|
|
U #Timer_1.Q;
|
|
R #Sensor_entprellen ;//Sperre Auswertung schon erfolgt
|
|
|
|
UN #B_Zaehlen ;//Sensor zum Zählen
|
|
O #Sensor_entprellen;
|
|
BEB;
|
|
|
|
SET;
|
|
S #Sensor_entprellen ;//Sperre Auswertung schon erfolgt
|
|
S #Signal ;//Für Signal-Auswertung ohne InkDB
|
|
|
|
NETWORK
|
|
TITLE = Übergabe an Inkrement-Baustein / max.Wert erreicht?
|
|
L #Ink_DB;
|
|
T "MW200";
|
|
|
|
L 0;//Sinnvolle Angabe?
|
|
<=I;//Nein!
|
|
BEB;//Also nur Signal-Auswertung !
|
|
|
|
AUF DB[ "MW200"] ;//Zähler-DB öffnen
|
|
|
|
L %DBD80;
|
|
+ DINT#1 ;//Aktueller Zählerwert +1
|
|
T %DBD80;
|
|
|
|
L %DBD80 ;//Aktueller Zählerwert
|
|
L %DBD76 ;//Max. Wert erreicht ?
|
|
<=D ;//Nein !
|
|
R %DBX74.5 ;//Ohne Flag-Lauf wurde beendet
|
|
R %DBX74.4 ;//Flag-Lauf wurde beendet
|
|
BEB;
|
|
|
|
-D ;//Restwert als Startwert nehmen !
|
|
T %DBD80 ;//Keine Inkrementalgeber verbaut, sondern nur Sensor
|
|
|
|
UN %DBX74.3 ;//Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= %DBX74.5 ;//Ohne Flag-Lauf wurde beendet
|
|
U %DBX74.3 ;//Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= %DBX74.4 ;//Flag-Lauf wurde beendet
|
|
|
|
UN %DBX74.3 ;//Umschaltung Zähl-Lauf ohne-mit-ohne Flag
|
|
= %DBX74.3;
|
|
|
|
//Zähler auf 000 setzen ?:
|
|
UN %DBX74.6 ;//Zähler Zero-Load
|
|
BEB;
|
|
|
|
SET;
|
|
R %DBX74.6;
|
|
|
|
L 0;
|
|
T %DBD80 ;//Zählerwert zum Setzen
|
|
|
|
NETWORK
|
|
TITLE = Ende
|
|
BE;
|
|
|
|
END_FUNCTION_BLOCK
|
|
|