Step 7 Verzögerung für nachfolgende Netzwerke

Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deinen Vorschlag, René.

Puh, so ganz blicke ich das noch nicht... alle 3ms wird also dieser #INIT gebildet.

#INIT startet einen Timer, mittels den ich dann die NW überspringen kann. Nehme an, das mache ich dann mit den Sprungbefehlen?

Zwei Fragen noch:

- Welchen Einfluss haben jetzt die 100ms auf meine gewünschten 3ms?
- Wo kann ich die Fkt. #OB1_SCAN_1 nachlesen?

Ach - nicht er, sondern sie! :p

Lieben Dank...
 
Ich hab bisher ganz selten in einer Anlage (nicht auf dem Schreibtisch) eine SPS gesehen, welche eine Zykluszeit unter 3ms hatte. Von daher macht ein Timer mit 3ms eher selten einen Sinn...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deinen Vorschlag, René.

Puh, so ganz blicke ich das noch nicht... alle 3ms wird also dieser #INIT gebildet.

Nein wie ich schrieb #INIT steht genau nur einen zyklus an und zwar genau nur den allerersten durchlauf nach Stop/Run übergang.

#INIT startet einen Timer, mittels den ich dann die NW überspringen kann. Nehme an, das mache ich dann mit den Sprungbefehlen?

Genau dafür kannst du das benutzten. Daneben eben dafür um eine Routine beim Start der CPU ablaufen zu lassen (Grundstellungen setzen, Kommunikation zurücksetzen etc.)

Zwei Fragen noch:

- Welchen Einfluss haben jetzt die 100ms auf meine gewünschten 3ms?
- Wo kann ich die Fkt. #OB1_SCAN_1 nachlesen?

Die 100ms war ein Beispiel für einen Puls der eben die gewünschte Zeit ansteht 3ms geht glaub ich garnicht. Bin ich mir aber nicht sicher.

#OB1_SCAN_1 ist keine Funktion sondern die interne Schnittstelle vom OB1. Die Werte kannst du mit beherztem Druck auf F1 nachlesen wenn du OB1 markierst.

mfG René
 
Ok, schon etwas klarer; nur:

Wenn #INIT nur genau einmalig ansteht; dann klappt das Überspringen der NW auch nur einmalig, oder?

Die NW sollen aber bei jedem Aufruf der FC für eine kurze Zeit nicht bearbeitet (übersprungen) werden.
 
Wenn #INIT nur genau einmalig ansteht; dann klappt das Überspringen der NW auch nur einmalig, oder?

Natürlich

Die NW sollen aber bei jedem Aufruf der FC für eine kurze Zeit nicht bearbeitet (übersprungen) werden.

Okay jetzt rückst du mit etwas mehr Infos raus.
Vorweg wenn du beim Aufruf des FC einige Netzwerke für 3ms überspringst dann arbeitet die CPU mit den nächsten Funktionen weiter die nach diesem FC kommen (oder nach dem Sprungziel) und kommt demnächst wieder am Anfang deines FC an was willst du dann tun? Den FC wieder von anfang an abarbeiten? Oder direkt überspringen bis die 3ms ablaufen? An einer bestimmten Stelle weitermachen?

Deine Fragestellung ist Wirr. Nach dem genauen Grund warum du das machen willst traue ich mich nun nichtmal mehr zu fragen.

mfG René
 
Deine Fragestellung ist Wirr. Nach dem genauen Grund warum du das machen willst traue ich mich nun nichtmal mehr zu fragen.

mfG René

Ja, ich bin auch sehr verwirrt! ;)

Sorry, dass ich mich nicht klarer ausdrücken kann. Es werden Daten vom Rechner zur SPS und von der SPS zum Rechner gesendet. Da aber der Rechner die Daten nicht so schnell verarbeiten/empfangen kann, muss der Sendebefehl einfach bei jedem Aufruf des entsprechenden FC's für eine kurze Zeit verzögert werden. Das klappt ja mittlerweile auch mit dem von mir anfänglich dargestellten SA-Timer.

Jetzt geht es im Grunde nur noch um eine elegantere Möglichkeit!

Weiß jetzt echt grad nicht wie ich mich noch klarer ausdrücken soll: In einer FC1 ist der Sendeverkehr programmiert. Immer wenn die FC1 zyklisch aufgerufen wird, sollen einige NW darin etwas verspätet bearbeitet werden. Einzig die 3ms klappen nicht, da zu kurz. Aber das wurde ja schon bemängelt.

Ist diese Aussage echt so undeutlich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist diese Aussage echt so undeutlich?

Nee, die Aussage ist nicht undeutlich, so hatte ich es auch verstanden. Nur leider funktioniert eine SPS nicht so, d.h. Deine Aussage ist fachlich falsch.

Du kannst die Ausführung einiger Befehle nicht verzögern! Du kannst sie nur für einen oder mehrere SPS-Zyklen überspringen.

Also einfach gesagt: Rufe den FC nicht in jedem Zyklus auf, sondern in jedem 2. oder alle x Sekunden.

Wenn Du in dem FC bestimmte Programmzeilen überspringen willst, dann passiert das auch für den jeweiligen Zyklus. Im nächsten Zyklus musst Du wieder neu entscheiden, ob überspringen oder nicht...

Schau Dir mal in den Lehrbüchern die Funktion einer SPS in Bezug auf die zyklische Programmabarbeitung an. UND versuche es zu verstehen. Ohne die Fähigkeit des logischen Denkens wird das nichts mit der SPS-Programmierung. Du kannst nicht für die nächsten 30 Jahre Deine Programmierprobleme hier im Forum lösen lassen.

Schönen Feierabend.
 
... an Feierabend ist noch nicht zu denken ducati!

Solange der Befehl BEB aktiv ist, werden die nachfolgenden NW nicht bearbeitet. Und somit verzögert sich doch sehr wohl die Ausführung dieser NW.

Von Lösen lassen ist keine Rede; allerdings bin ich für eure Tipps und Ausführungen schon sehr dankbar. Leider ist es mit einem Buch alleine nicht immer getan, da mir einfach auch die Praxis fehlt... Das Gebiet der SPS ist schon recht vielfältig.

Aber wenn dich das alles so stört, warum antwortest du dann überhaupt - musst doch nicht!
 
Solange der Befehl BEB aktiv ist, werden die nachfolgenden NW nicht bearbeitet. Und somit verzögert sich doch sehr wohl die Ausführung dieser NW.

Ja aber jetzt nehmen wir an BEB wird 3ms lang nach Start des FC ausgeführt. Dann werden die nachfolgenden NW nicht bearbeitet.

Wenn jetzt die Zykluszeit 20ms ist wird der FC gleich wieder aufgerufen und die 3ms starten von neuem. Die nachfolgen netzwerke werden also NIE ausgeführt.

Wenn die Zykluszeit unter 3ms ist wird die Zeit bei jedem Start von FC1 (der ist ja in jedem Zyklus) neu gestartet, die nachfolgen Netzwerke werden also NIE ausgeführt.

mfg René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Um das Senden zu verzögern würde ich nicht den Sendecode (samt Auswertung) überspringen, sondern einfach nur den Sende-Anstoß verzögern. Einige Kommunikationsbausteine mögen es nicht, wenn man sie nur unregelmäßig aufruft.

Beispiel: falls Du mit AG_SEND sendest, dann den Eingang ACT verzögert aktivieren.
Die Ausgänge DONE oder ERROR (oder ggf. ein Empfangsereignis) starten eine Ausschaltverzögerung SA, und diese wird am Eingang ACT als "UN Tx" verknüpft.
Bei anderen Sendebausteinen läßt sich dieses Prinzip garantiert auch umsetzen.
Code:
O  "SND_1_DONE"
O  "SND_1_ERROR"
O  "FP_we_got_some"
L  S5T#20ms
SA T15

U  "Sendeauftrag"
UN T15
=  #SND_1_ACT

CALL "Sendefunktion"
  ACT  :=#SND_1_ACT
  ...
  DONE :="SND_1_DONE"
  ERROR:="SND_1_ERROR"

PS: Die S7-Timer kann man (und Frau ;)) nicht für Zeiten kleiner 10ms benutzen.

Harald
 
Ja aber jetzt nehmen wir an BEB wird 3ms lang nach Start des FC ausgeführt. Dann werden die nachfolgenden NW nicht bearbeitet.

Wenn jetzt die Zykluszeit 20ms ist wird der FC gleich wieder aufgerufen und die 3ms starten von neuem. Die nachfolgen netzwerke werden also NIE ausgeführt.

mfg René

Ok René, hier habe ich in der Tat ein echtes Verständnisproblem...

Ein Zyklus beginnt doch mit dem Lesen der Eingänge in das PAE. Danach erfolgt die Programmabarbeitung im OB1 - es wird in die FC1 gesprungen. Hier ist aber BEB aktiv, so dass zum nächsten FC gesprungen wird. Sind alles FC's abgearbeitet, so erfolgt das Schreiben der Ausgänge aus dem PAA. Hier ist ein Zyklus zu Ende. Im neuen Zyklus beginnt alles wieder von vorne - dann würden ja in der Tat niemals die nachfolgenden NW bearbeitet werden, weil im neuen Zyklus wieder BEB aktiv ist. Aber die Praxis sagt etwas anderes... ;) Wo liegt jetzt mein Denkfehler; doch daran, dass ich blond bin?

Lieben Dank!
 
Weiß nicht was ich falsch mache; aber klappt irgendwie nicht René.

Habe das Ganze aber jetzt mal so umgebaut wie von Harald vorgeschlagen; und läuft super!


Werde mir das mit dem Zyklus nochmals in Ruhe durchlesen; habe mit diesem zyklischen Denken echt Probleme - vor allem, was passiert an der Stelle, wenn der Befehl BEB aktiv ist.


Dank' euch für die Unterstützung...
 
Der aktuelle Baustein (FB,FC,OB) wird direkt beendet, alles nach dem BE oder BEB wird nicht mehr ausgeführt (nur in diesem Baustein). Du musst das so sehen als ob in diesem Baustein nach dem BE oder BEB kein Code mehr steht und der Baustein zu ende ist.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der aktuelle Baustein (FB,FC,OB) wird direkt beendet, alles nach dem BE oder BEB wird nicht mehr ausgeführt (nur in diesem Baustein). Du musst das so sehen als ob in diesem Baustein nach dem BE oder BEB kein Code mehr steht und der Baustein zu ende ist.

mfG René

Ja ok, das ist klar. Aber was passiert danach... dann werden doch erst die anderen FC's bearbeitet und irgendwann erfolgt ja wieder der Sprung in den besagten FC mit dem Befehl BEB. Aber zu diesem Zeitpunkt hat doch schon ein neuer Zyklus begonnen, so dass BEB erneut ausgeführt wird. Dann aber würde ja alles nach BEB niemals ausgeführt werden; das kann ja auch nicht sein? Zumindest nicht in der Praxis! ;)
 
Kommt drauf an. BEB wird ja nur bedingt ausgeführt also wenn du ein U #irgendwas BEB machst dann wird das zeug hinter BEB nur ausgeführt solange #irgenwas "false" ist.

Was hinter einem BE kommt wird niemals ausgeführt.

mfg René
 
Ja aber jetzt nehmen wir an BEB wird 3ms lang nach Start des FC ausgeführt. Dann werden die nachfolgenden NW nicht bearbeitet.

Wenn jetzt die Zykluszeit 20ms ist wird der FC gleich wieder aufgerufen und die 3ms starten von neuem.
mfg René

Ich glaube hier liegt mein Verständnisproblem René.

Sagen wir mal der BEB dauert 10ms. Die Zykluszeit beträgt 40ms. So, nun wird beim Aufruf der Fkt. (z.B. über einen Timer) eben dieser besagte Befehl BEB ausgeführt und anschließend die FC sogleich wieder verlassen, da BEB aktiv.

Innerhalb dieser 40ms Zykluszeit wird ja die FC mit dem BEB-Befehl nicht mehr aufgerufen, sondern erst wieder, wenn ein neuer Zyklus gestartet ist. Dann aber ist ja auch der Timer mit den 10ms längst abgelaufen und wird beim erneuten Funktionsaufruf wieder aktiviert, so dass BEB wieder aktiv ist und die FC verlassen wird. Stimmt das soweit?

Dann wäre es aber in der Tat ja doch so, dass alles nach BEB niemals durchlaufen wird!

Das wäre ja dann nur der Fall, wenn die Timerzeit höher als die Zykluszeit gewählt wird.... oder sehe ich das wieder einmal falsch?
 
Zurück
Oben