Parallel laufende Programme - Timerproblem?

ogstyle

Level-1
Beiträge
50
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo erstmal,
habe mich jetzt eineige Zeit mit dem Forum beschäftigt und viele Sachen daraus gelernt. Danke schonmal dafür.

Bin neu in dem Thema SIMATIC und muss mich von Grund auf darin einarbeiten. Bitte nachsichtig sein.

Erstmal worum es geht:

Ich habe hier Versuchsstände, in denen Geräte getestet werden sollen.

Zwei Versuchsstände sollen durch eine CPU gesteuert werden. (aus Platzgründen). Für jeden Stand stehen eigene Ein- und Ausgabegruppen zur verfügung und somit jeweils andere Adressen.

Auf beiden Ständen soll jeweils eines von vier Programmen gleichzeitig laufen können, d.h. z.B. auf Stand1 -> Prog1 und auf Stand2 -> Prog3

Wie gesagt sollen die Programme gleichzeitig laufen können.
Wollte diese Programme mit Instant-DBs aufrufen, um die unterschiedlichen Adressen zuordnen zu können.


Nun zu meinem Problem:

In den Programmen sollen Timer laufen die eine Wartezeit "erzeugen" bis die nächste Aktion ausgeführt werden soll.

Wenn beide Programme glechzietig laufen und das eine durch einen Timer unterbrochen ist, so wird doch das andere auch nicht weiter bearbeitet?? Oder sehe ich das falsch?
Sprich z.B.:
- OB1 ruft FB1, DB1 auf, darin befindet sich ein Timer der 10s "warten" soll
- solange der Timer läuft kann der OB1 nicht den FB1, DB2 aufrufen

Die Programme (das Programm mit den Unterprogrammen) werden doch zyklisch sequeltiell abgearbeitet.
Ist mein Vorhaben also gar nicht möglich?


Ich bitte um Aufklärung.
 
- OB1 ruft FB1, DB1 auf, darin befindet sich ein Timer der 10s "warten" soll
- solange der Timer läuft kann der OB1 nicht den FB1, DB2 aufrufen

Näm mich wunder wie du das "warten" programmierst. Mit einem rücksprung bist der Timer abgelaufen ist? Sehr gefährlich.

Was du allerdings machen kannst wär mit dem Timer den Programmteil zu überspringen so wird das Zyklische Arbeiten nicht behindert.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du musst unterschiedliche Timer nutzen.

Also, in deinem Baustein entweder die IEC SFB Timer nutzen oder die S5Timer von aussen parametrieren.
Das geht bei FC bzw. FB´s.

pt
 
Hallo ogstyle,

so wie ich das sehe , hast du die SPS noch nicht richtig verstanden.
Das Programm wird immer zyklisch bearbeitet , und nicht wie z.B. eine NC sequenziell.
Alle Programme werden nacheinander bearbeitet, aber z.B. bleibt die Schrittkette stehen bis die Zeit abläuft, das Programm läuft aber weiter.
Wenn Du dann FB´s machen willst, die immer gleich sind, kann man z.B. auch die Zeiten von aussen dranschreiben als Parameter, so das immer verschieden Zeiten für die Programme benutzt werden.
 
so wie ich das sehe , hast du die SPS noch nicht richtig verstanden.

Das glaube ich allerding auch langsam.

Alle Programme werden nacheinander bearbeitet, aber z.B. bleibt die Schrittkette stehen bis die Zeit abläuft, das Programm läuft aber weiter.

Soll das heißen, dass der OB1 immer komplett durchlaufen wird, egal was in den aufgerufenen FBs und FCs passiert? Also ein Timer in einem FB würde nicht zur Unterbrechung des OB1-Ablaufs führen?

Dann wäre das ja echt gut, weil sich mein Problem dann erledigt hätte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das glaube ich allerding auch langsam.



Soll das heißen, dass der OB1 immer komplett durchlaufen wird, egal was in den aufgerufenen FBs und FCs passiert? Also ein Timer in einem FB würde nicht zur Unterbrechung des OB1-Ablaufs führen?

Dann wäre das ja echt gut, weil sich mein Problem dann erledigt hätte.

Genau das heisst es!
Jeder einzelne Befehl wird in ns - µs ausgeführt und nach dessen Bearbeitung eben der nächste. Es gibt keinen Befehl der ein Programm anhält- geht nur im Programm mit zB einer Schleife.
 
Danke schonmal für die Aufklärung!

Aber, wie genau funktioniert denn dann das mit den Timern?

Wenn man z.B. eine Einschaltverzögerung programmiert - das Programm startet den Timer, das Prog läuft weiter (wo läuft es weiter? oder springt es aus der Schrittkette eine Programmebene zurück?) und weiß beim nächsten Durchlauf, dass der Timer schon eine besimmte Zeit läuft.

Ist das so in etwa richtig?
 
Nein nicht so, DU gehts immer noch von sequentieller Bearbeitung aus.

Ich versuche es mal mit einfachen Worten zu beschreiben.

Jede Zeile (Ausnahme unten) wird bei jedem Zyklus ausgeführt.
Die Bedingung wird geprüft, und eventuell ein Merker oder Ausgang gesetzt.

Du setzt jetzt die Zeit :
Code:
      U     M      0.0
      L     S5T#5S
      SE    T      0
      NOP   0
      NOP   0
      NOP   0
      U     T      0
      =     M      0.1
Mit dem Merker 0.0 wird die Zeit T0 gestartet, das Programm bearbeitet jetzt aber alle Zeile dahinter weiter.
Unten steht U T1 =M0.1 , T1 läuft ja noch also wird M0.1 nicht gesetzt.
Jetzt laufen (durch den OB1) die Zyklen halt z.B. alle 10ms durch.
Irgendwann ist dann die Zeit T1 abgelaufen, und der Merker 0.1 wird gesetzt.
FAZIT: Nur die Bedingung zum schalten des Merkers ist von der Zeit abhängig , nicht das Programm.
*** Du kannst natürlich über Umwege den Programmcode von der Bearbeitung ausschliessen, oder den Programmcode für eine bestimmte Zeit überspringen.
Oder: Den Aufruf der Bausteine abhängig machen.
z.B.
Code:
U M1.0  // Programm 1
SPB FC1  // Programmaublauf 1
U M1.1 // Programm 2
SPB FC2 // Programmablauf 2
Hier würde abhängig vom Merker das jeweilige Programm ausgeführt.

Ich hoffe ein wenig zur Verwirrung beigetragen zu haben :ROFLMAO:
 
Die Unterlagen kenne ich.
Da ist ja auch schön erklärt, wie man Programme srukturieren kann.
Aber ich hatte ein Verständnisproblem im Bezug auf einen Timeraufruf und wie dieser dann arbeitet.

Hat sich ja jetzt geklärt.
Danke nochmal.
 
Hallo,
du must dir zum Verständnis der Angelegenheit ein Hilfsbild schaffen. Ursprünglich kam die SPS-Programmierung aus der Umsetzung von Schützschaltungen. Viele Komponenten funktionieren immer noch so.
Ein Zeitrelais wird gestartet und nach Ablauf der Zeit schaltet ein Kontakt um. Das beeinflusst aber an sich noch keine andere Schaltung. Erst das Umschalten des Kontakts lösst neue Funktionen aus. So in der Art funktioniert auch ein Timer. Das Programm wird während der Bearbeitung desselben nicht angehalten sondern der Timer läuft so nebenher weiter und gibt ein zusätzliches Signal, wenn er abgelaufen ist.
In der Hochsprachen-Welt kenne ich im Augenblick kein Pondon dazu ...
 

Ich hatte beim Schreiben gemerkt, dass es nicht passte, aber die richtige Schreibweise fiel mir dann auch nicht ein.
Das kommt davon, wenn man mit Fremdwörtern imprägnieren will ...

@argv_user : Ereignis wäre gleich oder ähnlich Interrupt, aber das passt m.E. auch nicht so ganz ...
 
Zurück
Oben