Files
HundM_awl/=A01+UH07-KF00/Programmbausteine/Module/MImpulsGeber.awl
T

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