TIA SCL / State machine erstellen funktioniert nicht (nicht zyklisch)

cayen

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forummitglieder,
habe eine s7 1500 SPS will unter SCL eine normale State maschine erstellen

Hier mal ein Muster Code:
CASE #state OF
0:
IF #irgendwas= 1 THEN
#state := 1; // #state := 1 wird geschrieben, will aber nicht weiter zu state 1
END_IF;
1:
IF #state = 1 THEN
#state := 2;
END_IF;
2:
IF #state = 2 THEN
#state := 3;
END_IF;
3:
#state := 0;
END_CASE;

Leider läuft das alles nichtt zyklisch ab, meine main ist ein OB mit program cycle. er geht in den state 0 rein aber will einfach nicht in den state 1 usw.

Bitte um Hilfe, danke
 
Zuletzt bearbeitet:
Wie hast du #state denn deklariert? Das müsste eine statische Variable sein!?

Aber eigentlich machst du ja nichts großes außer dein #state auf 1 zu setzen und dann in deiner Schleife soweit zu laufen, dass du wieder auf 0 kommst, um beim nächsten Durchlaufen wieder von vorne zu beginnen.
 
Zuletzt bearbeitet:
Hallo kurz eine Frage dazu:

ein FB kann eine statische Variable deklarieren, aber warum NICHT im MAIN (OB mit program cycle)?

kann ich im MAIN auch eine state maschine erzeugen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Daten werden in einer Siemens-SPS in einem DB gespeichert. Nur ein FB hat auch einen IDB. OBs und FCs haben das nicht...

Fixed for you!

Edit: ICh sehe gerade, dass du Explizit darauf himweist, dass das du dein Programm mit OB1 (Main) aufrufst. Das sollte immer der Fall sein, es sei denn, du willst auf spezielle Situationen reagieren (Hardwareausfall usw). OB1 ist bei Siemens immer die sog. Main-Funktion.
 
Zuletzt bearbeitet:
Fixed for you!

Edit: ICh sehe gerade, dass du Explizit darauf himweist, dass das du dein Programm mit OB1 (Main) aufrufst. Das sollte immer der Fall sein, es sei denn, du willst auf spezielle Situationen reagieren (Hardwareausfall usw). OB1 ist bei Siemens immer die sog. Main-Funktion.
Der Kontext diesen Threads gibt bereits an, dass ducati von einer Siemens CPU spricht, oder hast du schon mal ne Beckhoff mit TIA programmiert ;-)

Außerdem geht es dem Fragesteller nicht darum, ob er etwas im OB1 aufrufen muss, sondern warum er dort keine statischen Varibalen deklarieren kann...

Btw: @Cayen:

Ich würde ohnehin nicht alles im OB1 ausprogrammieren. Spätestens, wenn du mal größere Programme schreibst, wird das total unübersichtlich, um nur einen der Gründe dafür zu nenne.
 
Zuletzt bearbeitet:
Fixed for you!

Edit: ICh sehe gerade, dass du Explizit darauf himweist, dass das du dein Programm mit OB1 (Main) aufrufst. Das sollte immer der Fall sein, es sei denn, du willst auf spezielle Situationen reagieren (Hardwareausfall usw). OB1 ist bei Siemens immer die sog. Main-Funktion.

Das stimmt mittlerweile nicht mehr so ganz.
Ab der 1500 kann man ja mehrere Main OB haben die unabhängig arbeiten daraus folgt das es nicht immer einen OB1 gibt der kann dann auch z.B. OB200 sein.


Gruß

Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle nochmal,

also meine case anweisung funktioniert soweit ,nur wollte ich folgendes machen, und ich weiß nicht wie ich es programmieren soll:

Zur Zeit:
CASE #state OF
0:
IF #irgendwas= 1 THEN
#state := 1;
END_IF;
1:
IF #state = 1 THEN
#state := 2;
END_IF; //usw


Folgende Case Anweisung will ich programmieren:

CASE #state OF
hallo1:
IF #irgendwas= 1 THEN
#state := hallo2;
END_IF;

hallo2:
IF #irgendwas= 2 THEN
#state := hallo3;
END_IF; //usw

Also für den Datentyp #state kann ich nur Interger, richtig? Bytes wird ja anscheinend nicht unterstützt.
Wie könnte ich das Problem lösen.

Gruß
 
State kann nur ein Integer sein - richtig. Das kann man aber auch in der Beschreibung des CASE-Befehls nachlesen ...

Wenn du mit deinem State symbolisch arbeiten willst dann ginge das z.B. mit Konstanten, die du im Baustein definierst - in deinem Fall also Hallo1 - 3 - ihnen müßtest du dann den gewünschten Zahlenwert zuweisen ...

Gruß
Larry
 
Das stimmt mittlerweile nicht mehr so ganz.
Ab der 1500 kann man ja mehrere Main OB haben die unabhängig arbeiten daraus folgt das es nicht immer einen OB1 gibt der kann dann auch z.B. OB200 sein.


Gruß

Jens

Den OB1 gibt es aber trotzdem immer. Man kann jetzt nur mehrere benutzen. Jede Funktion kann also einen eigenen OB haben, was dem Gedanken nach zumindest der Idee "Konfigurieren statt Programmieren" dienen soll.
Trotzdem hab ich noch nie mehr wie 3 OBs gebraucht für meine Programme, was sind das für DInger die 79 Zyklische OBs haben?
 
Zurück
Oben