Step 7 Verzögerung für nachfolgende Netzwerke

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Ihr,

ich möchte gerne nach Aufruf der Funktion FC1 die Aktivität der Netzwerke ab NW2 für eine best. Zeit verzögern. Dazu habe ich in NW1 eine Ausschalt-Verzögerung programmiert. Klappt aber irgendwie nicht; fehlt hier der Wechsel von 1 auf 0?

FC1/NW1:


Code:
      CLR   
      L     S5T#3S
      SA    T     15

      U     T     15
      BEB

Vielen Dank!
 
Hallo,

ja die Zeit wird mit einem VKE1 gestartet. CLR übrigens setzt das VKE auf 0 ;-) Ausserdem wäre ein SE-Timer das richtige - der SA wird gleich 1 wenn das VKE1 ist.

André
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja André,

es war halt so von mir gedacht:

- Aufruf der FC1
- VKE wird auf Null gesetzt --> T15 hat Status 1 und der Baustein wird solange beendet, bis der Timer abgelaufen ist

Klappt halt nur in meiner Theorie... :p
 
Also das hier muss an die Stelle wo der Timer mit einem VKE1 gestartet wird.

Code:
      L     S5T#3S
      SA    T     1

Mit nem CLR davor kannst du auch nur NOP0 schreiben ;-) Finde ich ausserdem unschön die Lösung selbst wenns funktionieren sollte..
Falls dein Baustein nicht zyklisch aufgerufen wird - so kann ich das rauslesen - dann starte den Timer mit den Bedingungen für den FC-CALL extern. Sonst erkennt dieser keine Flanken bei bedingten Aufrufen. Im FC fragst du dann einfach den Zustand des Timers ab.

André
 
Also die FC soll schon zyklisch aufgerufen werden und nach Aufruf soll einfach die Bearbeitung der Netzwerke 2 bis ... für drei Sekunden blockiert werden.

Wenn die FC aufgerufen wird, so ist doch das VKE = 1. Dadurch wird der Auschalt-Timer auf 1 gesetzt und BEB kommt zum tragen. Der Befehl CLR sollte den Timer ablaufen lassen. Erst wenn der Timer abgelaufen ist, wird der Befehl BEB nicht mehr bearbeitet und die nachfolgenden Netzwerke freigegeben. Warum funzt das so nicht?

Deine zwei Zeilen habe ich doch schon im Code stehen?
 
Nein, keine Störmeldeunterdrückung. Die SPS sendet Daten an einen EDV-Rechner und damit dieser das immer mitbekommt, muss die Sendeverzögerung in den nachfolgenden NW verzögert werden.

Ich müsste es einfach nur hinbekommen, dass nach Aufruf der FC der SA-Timer den Status 1 erhält. Dann müsste das VKE auf 0 gesetzt werden, so dass der Timer abläuft... muss doch gehen, oder?

Danke!
 
sorry aber das klingt wirr. Du schreibst dass der FC zyklisch aufgerufen wird. Andererseits schreibst du dass die Bearbeitung der Netzwerke dann 3 Sekunden verzögert werden soll. Irgendwas passt da nicht. Ich gehe mal von einer Zykluszeit kleiner 50ms aus.

André
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja André, es sollte heißen 3ms!

Aber mal ganz abgesehen von dem Sinn des Ganzen; ist es irgendwie möglich, nach Aufruf einer Funktion die Bearbeitung deren Netzwerke für eine gewisse Zeit mittels eines Timers zu unterbinden?
 
Zuletzt bearbeitet:
Hallo, du rufst den FC zyklisch auf. Du willst dass immer 3ms gewartet wird. Dann kannst du nur das Programm in dem Punkt mittels der SFC WAIT halten. Aber ich frage mich was das bringen soll. Was genau soll denn 3ms verzögert werden? Ich hoffe es ist nur Theorie.

André
 
Also habe es hinbekommen; wenn man im letzten NW noch Folgendes programmiert:

Code:
      SET   
      L     S5T#3mS
      SA    T     15


... nun wird die Ausführung der NW nach NW1 um 3ms verzögert.
 
Nun, in der Tat stecke ich nicht so sehr tief in der Materie. Aber wie kommst du drauf, dass spez. hier ein Verständnisproblem vorliegt - es funktioniert doch jetzt?

Verstehe nicht ganz, welche Probleme ihr seht? ;)
 
Nun, in der Tat stecke ich nicht so sehr tief in der Materie. Aber wie kommst du drauf, dass spez. hier ein Verständnisproblem vorliegt - es funktioniert doch jetzt?

Verstehe nicht ganz, welche Probleme ihr seht? ;)


Zum ersten kannst du das Programm nicht für eine bestimmte Zeit stoppen, du hast nur die Möglichkeit den betreffenden Aufruf /Programmteil zu "überspringen".
Zum anderen benötigt ein Timer immer eine Flanke um zu starten oder zu stoppen. Auch sind die Timer unabhängig von der Zykluszeit einer SPS, die sich nach den zu berechnenten Operationen richtet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, du rufst den FC zyklisch auf. Du willst dass immer 3ms gewartet wird. Dann kannst du nur das Programm in dem Punkt mittels der SFC WAIT halten. Aber ich frage mich was das bringen soll. Was genau soll denn 3ms verzögert werden? Ich hoffe es ist nur Theorie.

Das er die nächsten NW verzögert aufrufen will hat doch nichts damit zu tun dass er deswegen die Programmabarbeitung solange stoppt.

Für mich will er nur eine Initialverzögerung haben welche den Aufruf der Netzwerke unterdrückt, klarer ÜBERSPRINGT.

Dafür würde ich aber Global einen Initalbool programmieren.

z.B. im OB1

dies setzt #INIT für genau einen Zyklus auf True.
Code:
     L     #OB1_SCAN_1                 // Abfrage Erstdurchlauf OB1
      L     B#16#3
      <>I   
      =     #INIT

Mit #INIT startest du einen Pulstimer. der deine 3 ms enthält. 3ms ist aber sehr kurz achte also darauf dass deine Zykluszeit das auch packt.

mit dem Pulstimerausgang überspringst du dann einfach die Netzwerke die du in der Zeit nicht abarbeiten willst.

mfG René
 
Zum ersten kannst du das Programm nicht für eine bestimmte Zeit stoppen, du hast nur die Möglichkeit den betreffenden Aufruf /Programmteil zu "überspringen".
Zum anderen benötigt ein Timer immer eine Flanke um zu starten oder zu stoppen. Auch sind die Timer unabhängig von der Zykluszeit einer SPS, die sich nach den zu berechnenten Operationen richtet.

Hi hbmerit,

der Befehl BEB beendet den Baustein bedingt und stoppt ja nicht das Programm. Solange also der Timer aktiv ist, werden die NW nach BEB nicht bearbeit. Das stimmt doch?

Im letzen NW wird das VKE über SET 1 und im ersten NW wird das VKE über CLR 0. Timer läuft ja (jetzt) auch...
 
Achja den Impuls kannst du mit dem IEC Pulstimer TP oder auch mit einer S5 Impulstimer bauen.

Ich bevorzuge die IEC Timer.
Code:
      U     #INIT      
L     S5T#100MS
      SI    T      1


      U     T      1
      =     #verlangerterInit
 
Zurück
Oben