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