-> Hier kostenlos registrieren
Hi,
als erstes muss ich gestehen, dass ich absoluter Noob bin
Ich habe quasi die Programmierung einer S7-1200 aufs Auge gedrückt bekommen.
Das ganze im TIA 11.
Nun zum Problem, welches wohl eher der Sache geschuldet ist dass ich normalerweise C und C# programmiere:
Ich habe eine Maschine, welche ein paar Achsen in ein Gehäuse einpresst.
Dafür durchläuft das Ding einen gewissen Zyklus (Ventil 1 auf, Ventil 1 zu, Ventil 2 auf, Motor verfahren, etc...).
Intuitiv dachte ich nun an eine StateMachine, welche "einfach" nur die einzelnen Zustände durch tackert.
Dafür habe ich mir einen FB in FUP mit einer Reihe von TON und ein paar Merkern erstellt, welches in definierten Zeitabständen meinen "Token" durch die Merker reicht.
Aus der OB1 aufgerufen mit
Funktioniert auch, allerdings nur solange wie IN0 TRUE ist.
Klar, steht ja auch da, allerdings dachte ich, dass die Funktion zuende ausgeführt wird, so wie man das von C kennt.
Da kommt nun mein Fachnichtwissen zum Einsatz...
Die Timer in der FB hören auf zu laufen, wenn IN0 = FALSE.
Habe hier schon ein wenig rum gelesen, läuft die S7 zyklisch durch OB1 und führt die FB nicht mehr aus, wenn sie unerreichbar ist vom Code, auch wenn die FB eigentlich noch nicht "zuende" gelaufen ist?
Wie macht man so etwas klassischer Weise?
Ich hatte versucht in der IF Schleife einen Merker zu setzen FB_ACTIVE und dann in einer WHILE Schleife die FB aufzurufen bis FB_ACTIVE = FALSE.
Ist wohl eher eine schlechte Idee...
Wie könnte ich dann nach dem Ende der FB den Merker auf FALSE setzen, evtl aus dem FB heraus?
Ich danke euch schon mal und bin auch nicht böse, wenn es gleich heißt "Lern erst mal XY"
Gute Literatur gern gesehen, denn die Siemens Dokumentation ist echt nicht das Gelbe vom Ei....
THX
als erstes muss ich gestehen, dass ich absoluter Noob bin
Ich habe quasi die Programmierung einer S7-1200 aufs Auge gedrückt bekommen.
Das ganze im TIA 11.
Nun zum Problem, welches wohl eher der Sache geschuldet ist dass ich normalerweise C und C# programmiere:
Ich habe eine Maschine, welche ein paar Achsen in ein Gehäuse einpresst.
Dafür durchläuft das Ding einen gewissen Zyklus (Ventil 1 auf, Ventil 1 zu, Ventil 2 auf, Motor verfahren, etc...).
Intuitiv dachte ich nun an eine StateMachine, welche "einfach" nur die einzelnen Zustände durch tackert.
Dafür habe ich mir einen FB in FUP mit einer Reihe von TON und ein paar Merkern erstellt, welches in definierten Zeitabständen meinen "Token" durch die Merker reicht.
Aus der OB1 aufgerufen mit
Code:
IF "IN0" = TRUE THEN // Statement section IF
"PressFit_DB"();
END_IF;
Funktioniert auch, allerdings nur solange wie IN0 TRUE ist.
Klar, steht ja auch da, allerdings dachte ich, dass die Funktion zuende ausgeführt wird, so wie man das von C kennt.
Da kommt nun mein Fachnichtwissen zum Einsatz...
Die Timer in der FB hören auf zu laufen, wenn IN0 = FALSE.
Habe hier schon ein wenig rum gelesen, läuft die S7 zyklisch durch OB1 und führt die FB nicht mehr aus, wenn sie unerreichbar ist vom Code, auch wenn die FB eigentlich noch nicht "zuende" gelaufen ist?
Wie macht man so etwas klassischer Weise?
Ich hatte versucht in der IF Schleife einen Merker zu setzen FB_ACTIVE und dann in einer WHILE Schleife die FB aufzurufen bis FB_ACTIVE = FALSE.
Ist wohl eher eine schlechte Idee...
Wie könnte ich dann nach dem Ende der FB den Merker auf FALSE setzen, evtl aus dem FB heraus?
Ich danke euch schon mal und bin auch nicht böse, wenn es gleich heißt "Lern erst mal XY"
Gute Literatur gern gesehen, denn die Siemens Dokumentation ist echt nicht das Gelbe vom Ei....
THX