-> Hier kostenlos registrieren
Ich hab mir jetzt innerhalb von wenigen Wochen komplett AWL beigebracht und programmier grade eine doch sehr komplexe Steuerung mit mehreren State Maschines und vielen Timer abläufen.
Ich muss sagen das ich anfangs etwas Assembler geschädigt war und manche abläufe in der SPS fehl interpretiert habe. Inzwischen läuft das wie am schnürchen nur mit den Timern habe ich immer wieder probleme.
Eine Statemaschine wertet z.B. den Öldruck Sensor eines Verdichters aus. Wenn der Verdichter gestartet ist dauert es ca 5s (soviel Zeit geben wir ihm derzeit) bis der Öldruck da sein MUSS.
Hier wird GAS Verdichtet kein ÖL. Wenn der Öldruck nicht da ist hat der Verdichter wohl ein defekt.
State 0 = Idle - warten auf Verdichter start, bei verdichter start zu state 1 und timer laden
State 1 = wait - warten bis timer abgelaufen dann zu State 2, zurück springen bei "verdichter aus" zu State 0.
State 2 = check - Verdichter läuft nun und der Öldruck muss da sein. Ist er ist nicht sprung zu State 3. Ansonsten Idlen und beim Verdichter stopp wieder in State 0 Springen.
State 3 = FehlerMeldung liegt an und bei Service Bestätigung wieder in State 0 Springen
Funktioniert Prima, bis auf den Timer. Der funktioniert beim ersten starten, aber beim 2ten mal bleib ich im state 1 hängen da der Timer nicht abläuft.
nochma zum ablauf des timers:
Wenn Verdichter gestartet wird lade ich schon im State 0 den Timer, im state 1 wird auf das ablaufen gewartet und im 2 und 3 ist er nicht mehr relevant.
Spring ich das 2te mal in State 0 und löse Verdichter start aus läd der Timer aus irgendeinem grund nicht.
Soll ich im State 0 vllt abfragen ob der Timer schonmal geladen wurde und ihn nur resetten?!
Also ganz schlau werd ich daraus nicht.
Was bewirkt den R T 1 und FR T 1 genau?
Ist bei FR der Timer dann wie beim ersten starten und beim R einfach "zwangs-abgelaufen"??
wär über eure hilfe sehr dankbar.
achso ich poste mal den State 0 dazu.
Hatte da schon einiges Probiert. Deshalb steht da jetzt auch R und FR drin und 2x SET
Ich muss sagen das ich anfangs etwas Assembler geschädigt war und manche abläufe in der SPS fehl interpretiert habe. Inzwischen läuft das wie am schnürchen nur mit den Timern habe ich immer wieder probleme.
Eine Statemaschine wertet z.B. den Öldruck Sensor eines Verdichters aus. Wenn der Verdichter gestartet ist dauert es ca 5s (soviel Zeit geben wir ihm derzeit) bis der Öldruck da sein MUSS.
Hier wird GAS Verdichtet kein ÖL. Wenn der Öldruck nicht da ist hat der Verdichter wohl ein defekt.
State 0 = Idle - warten auf Verdichter start, bei verdichter start zu state 1 und timer laden
State 1 = wait - warten bis timer abgelaufen dann zu State 2, zurück springen bei "verdichter aus" zu State 0.
State 2 = check - Verdichter läuft nun und der Öldruck muss da sein. Ist er ist nicht sprung zu State 3. Ansonsten Idlen und beim Verdichter stopp wieder in State 0 Springen.
State 3 = FehlerMeldung liegt an und bei Service Bestätigung wieder in State 0 Springen
Funktioniert Prima, bis auf den Timer. Der funktioniert beim ersten starten, aber beim 2ten mal bleib ich im state 1 hängen da der Timer nicht abläuft.
nochma zum ablauf des timers:
Wenn Verdichter gestartet wird lade ich schon im State 0 den Timer, im state 1 wird auf das ablaufen gewartet und im 2 und 3 ist er nicht mehr relevant.
Spring ich das 2te mal in State 0 und löse Verdichter start aus läd der Timer aus irgendeinem grund nicht.
Soll ich im State 0 vllt abfragen ob der Timer schonmal geladen wurde und ihn nur resetten?!
Also ganz schlau werd ich daraus nicht.
Was bewirkt den R T 1 und FR T 1 genau?
Ist bei FR der Timer dann wie beim ersten starten und beim R einfach "zwangs-abgelaufen"??
wär über eure hilfe sehr dankbar.
achso ich poste mal den State 0 dazu.
Code:
L #STATE_OIL // sprungerverteiler anfang
SPL err // error unterprogramm aufrufen
SPA OIL0 // IDLE
SPA OIL1 // WAIT
SPA OIL2 // CHECK
SPA OIL3 // FAIL
err :NOP 1 // sprungverteiler ende
SPA OILE
OIL0 :NOP 1 // STATE 0 IDLE
UN E 124.0 // Abfrage ob Verdichter gestartet ist
SPB OILE // wenn nicht zum Ende der FSM springen und alles belassen
SET
L 1 // Nächsten Starte Laden
T #STATE_OIL // In State Variable Laden
SET
R T 1
FR T 1
L S5T#5S
SS T 1 // wenn zeit abgelaufen geht Timer auf 1
NOP 1
NOP 1
NOP 1
SPA OILE // Rausspringen