Files

57 lines
2.0 KiB
Plaintext

FUNCTION_BLOCK "MSensoren"
{ S7_Optimized_Access := 'FALSE' }
// Mechanische AWL->SCL-Konvertierung (awl2scl.py). Kontrollfluss per GOTO,
// wo im Original mit Sprungmarken gearbeitet wurde. Vor Uebernahme in TIA
// Portal pruefen/kompilieren (siehe SCL-Export/README.md).
VAR_INPUT
ESensor { ExternalWritable := 'False'} : Bool; // Eingang des zu überwachenden Sensors
T_Ein { ExternalWritable := 'False'} : Int := 1; // Einschaltzeitverzögerung (*100ms)
T_Aus { ExternalWritable := 'False'} : Int := 5; // Ausschaltzeitverzögerung (*100ms)
tein_aktiv { ExternalWritable := 'False'} : Bool := TRUE; // Einschaltzeit aktivieren
taus_aktiv { ExternalWritable := 'False'} : Bool := TRUE; // Ausschaltzeit aktivieren
g_100ms_Impuls : Word; // war "100ms-Impuls"
MW2 : Word; // war "MW2"
END_VAR
VAR
Stat { ExternalWritable := 'False'} : "USensor_Ein_Aus"; // Status des Endschalters
END_VAR
BEGIN
REGION Zeitwert löschen
IF NOT ((#ESensor AND #Stat.B_Akt) OR (NOT (#ESensor) AND NOT (#Stat.B_Akt))) THEN GOTO Nw02; END_IF;
#Stat.T_Zelle := 0;
RETURN;
END_REGION
REGION Einschaltzeit abgelaufen ?
IF #Stat.T_Ein_Akt = 9999 THEN #Stat.T_Ein_Akt := #T_Ein; END_IF;
IF #Stat.B_Akt THEN GOTO Nw03; END_IF;
IF #Stat.T_Zelle >= #Stat.T_Ein_Akt THEN
#Stat.B_Akt := TRUE;
GOTO tdel;
END_IF;
GOTO Nw04;
END_REGION
REGION Ausschaltzeit abgelaufen ?
IF #Stat.T_Aus_Akt = 9999 THEN #Stat.T_Aus_Akt := #T_Aus; END_IF;
IF NOT (#Stat.B_Akt) THEN GOTO Nw04; END_IF;
IF #Stat.T_Zelle >= #Stat.T_Aus_Akt THEN
#Stat.B_Akt := FALSE;
GOTO tdel;
END_IF;
END_REGION
REGION Zeit läuft
IF (NOT (#g_100ms_Impuls) OR (NOT (#Stat.B_Akt) AND NOT (#tein_aktiv))) OR (#Stat.B_Akt AND NOT (#taus_aktiv)) THEN RETURN; END_IF;
#Stat.T_Zelle := #Stat.T_Zelle + #MW2;
END_REGION
REGION Ende
RETURN;
END_REGION
END_FUNCTION_BLOCK