Strukturierter Text (ST) , naive Frage

amos

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry für meine naive Frage, wenn ich folgendes laufen lasse, wird SOLLPOS ständig sehr schnell um 1 erhöht, so lange Schalter true ist:

IF (Schalter = TRUE) THEN
SOLLPOS := SOLLPOS + 1;
AUSGANG1 := EINGANG1 AND EINGANG2;
ELSE
AUSGANG1 := FALSE;
END_IF;

Offensichtlich arbeitet die WAGO 750-881 das in einer Dauerschleife ab. Dieses Verhalten, ist mir von der Linux Programmierung her nicht bekannt und ich muss mich erst noch daran gewöhnen.
Was muss ich ändern, damit SOLLPOS := SOLLPOS + 1; nur dann erfolgt wenn eine Zustandsänderung am Schalter erkannt wird?

Vielen Dank
amos
 
Du hast die Möglichkeit dafür einen eigenen Task zu verwenden der entsprechend nur einmal durchlaufen würde oder aber was ich denke was einfacher und sinnvoller ist (vorallem für dich als Anfänger) dein Taster muss entprellt werden.
Du definierst dir eine Var tasterTrig :R_Trig; und rufst in deinem Programm zuerst mal den Triger auf. TasterTrig(Clk:=DEINTASTER). Dann änderst du dein Prog etwas ab indem du nicht mehr sagt If DEINTASTER=True... Sondern If TasterTrig.Q then... Dann sollte das passen.
Sorry für DEINTASTER aber bin nur mit dem Smarty online und kann deinen Var Namen nicht nachlesen, aber sollte ja kein Problem sein :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Offensichtlich arbeitet die WAGO 750-881 das in einer Dauerschleife ab. Dieses Verhalten, ist mir von der Linux Programmierung her nicht bekannt und ich muss mich erst noch daran gewöhnen.
amos


Das hast du schon richtig erkannt. Die SPS arbeitet zyklisch, das bedeutet eine Art Dauerschleife. Du brauchst eine Positive Flanke.
 
Du brauchst eine State-Machine, weil wie schon angesprochen, die SPS den Kode zyklisch ausführt. Du braucht soetwas wie

Wenn Schalter auf 0 war und jetzt auf 1 ist, dann erhöhe den Zähler um eins.

Der angesprochene Funktionsbaustein R_TRIG() (Raising Flank Trigger) ist die Implementation davon.

Da eine SPS wegen des zyklischen Betriebs keine Wartekommandos haben darf, gibt es auch kein Sleep etc und Prozesse - wie deiner - müssen per State-Machine implementiert werden.
 
Zuletzt bearbeitet:
Zurück
Oben