TIA Anfängerfrage zum Programmablauf mit TCP-Messages

kami

Level-1
Beiträge
103
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich stelle mich gerade etwas doof an, ein paar Bool richtig zurückzusetzen. Vielleicht kann mir jemand dazu etwas Klarheit verschaffen.

Folgendes Problem:

Ich habe hier eine S7-1214 laufen und steuere damit in meinem Haus die Rollladen.
Über die Taster in der Wohnung und die Signale an den Eingängen der S7 klappt das super.
Ich möchte nun erweitern und TCP-Nachrichten senden, die wie ein Hardwaretaster kurz ein Bit auf 1 setzen und dann wieder zu einem bestimmten Zeitpunkt im Programm das Bit wieder auf 0 gesetzt wird.
Das Programm sieht nun so aus, dass es im OB1 zwei Netzwerke gibt. Im ersten Netzwerk liegt ein FB, der die TCP-Nachrichten aufnimmt und auswertet und dementsprechend in einem Array BOOL Variablen auf 1 setzt.
Das zweite Netzwerk im OB1 enthält den FB-Rollladen für die Rollladensteuerung. Dieser FB-Rollladen besteht aus 17 Einzelnetzwerken die jeweils immer einen FB-Motor für die Rollladen pro Fenster enthalten. Jeder dieser FB-Motor wartet auf eine Flanke am Eingang.

Was ich nun nicht hinkriege, ist das nach einmaligen kompletten Durchlauf des FB-Rollladen das Array mit den Bool-Werten auf FALSE komplett gesetzt wird.
Zurzeit setzt meine TCP-Auswertung zwar die Bits auf 1 aber wenn ich dann mit RESET_BF das Array zurücksetze passiert das zwar aber wohl zu früh, da die FB-Motor die Flanke noch nicht erkannt haben.

Wie organisiere ich das also nun in der richtigen Reihenfolgen?

Vielen Dank.

Gruß kami
 
Wenn die Motor-FB wirklich eine Flanke erwarten um zu starten, dann reicht es normalerweise, dass du im letzen Netzwerk des FB-Rollladen alle Start-Bits auf False setzt.
Wenn das zu früh ist, reagieren deine Einzel-FB nicht auf eine Flanke, sondern machen in ihem "Inneren" irgend eine andere Auswertung. Diese gilt es dann zu ändern. Der FB könnte sich das Startbit intern merken und dann seine Routinen abarbeiten, wenn er fertig ist, setzt er sein internes Startbit auf False, Ende.
Eine weitere saubere Möglichkeit wäre, wenn die FB ein Quittbit (gestartet) zurückgeben. Mit diesem könnte man dann auch das Start-Bit löschen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

okay das sehe ich aber selber gerade nicht so in dem Ablauf. Habe ich da irgendwas übersehen. Habe ich da einen Fehler in meinen FBs?

Gruß kami
1.JPG2.JPG3.JPG4.JPG5.JPG
 
Kann es sein, daß die Flankenauswertung (in dem FB-Motor?) nicht richtig programmiert ist und 2 Zyklen lang 1 braucht? Wie sieht das Programm aus?

Ansonsten könntest Du das unbedingte komplette Rücksetzen des Arrays mit RESET_BF im TCP-Auswerte-FB vor der TCP-Auswertung und dem bedingten Setzen machen, dann ist garantiert, daß gesetzte Bits genau 1 Zyklus lang anstehen.

Harald
 
Hi,

habe mal dazu meinen FUP geuploadet. Bin mir nicht sicher ob das 2 Zyklen anstehen muss?

Gruß kami
 
Hallo,
vielleicht solltest du den Denk-Ansatz ändern.
Wenn du einen Ablauf hast dann solltest du das auch im Programm so nachbilden (Stichwort dazu : Schrittkette).
So eine genannte Schrittkette könnte dann auch das Absenden von Nachrichten usw. zu einem bestimmten Zeitpunkt sicher stellen.

Gruß
Larry
 
Hallo,

ich habe nun ein bißchen angepasst. Folgenden Trick habe ich jetzt angewendet. Jeder FB kriegt den zwei BOOL zugeordnet mit denen er erkennt ob der der Rollladen hoch oder runterfahren soll. Wenn einer dieser BOOL gesetzt ist (Flankenauswertung) dann wird eine Einschaltverzögerung ausgelöst und der BOOL nach 50ms zurückgesetzt. Also im Endeffekt kommt die TCP Nachricht wie das Drücken der Taster (Hardwaremässig) rein und wird immer automatisch nach 50ms zurückgesetzt? Ist das so okay?

Ich bin gerade auch am Überlegen wie gut oder nicht gut mein gesamter Quellcode ist und dementsprechend meine Auslastung der S7-1200. Ich bewege mich bei der Diagnose zur Zeit in Zykluszeit von 22-23ms Maximal 36ms ist das Okay? Muss ich irgendwo draufachten? Damit ich die CPU nicht überlaste oder am Limit fahre?

Gruß kami
 
Zurück
Oben