Taster reagieren nicht oder sehr träge

Zuviel Werbung?
-> Hier kostenlos registrieren
da ist vom Vorbesitzer nach meinem Empfinden schon einiges an Logik eingebaut worden. Fussbodenheizung, Dimmer, Alarmanlage, Heizung, Bewegungsmelder, u.v.m. -

Das einzige was ich mal eingebaut habe - und das kann durchaus eine Ursache sein - eine Abfrage meiner Luftwärmepumpe über Sockets. Aber die sind "unblocking" programmiert (zumindest nach Anleitung, ob das in der Realität auch so funktioniert .....)
 
die Priorität des Standard Tasks kann ich gar nicht ändern (siehe Bild oben) - da ist kein Task gepflegt, nur der Default.
Den KBus-Task und den InputOutput Task sehe ich da nicht.
 
Ich kenne mich mit Wago nicht aus, doch mir kommt die Cycletime (max) von 246 ms bzw fast 380 ms verdächtig vor. Wie kann es zu so hohen Zykluszeiten kommen? Sehr viele Unterbrechungen durch höherpriore Tasks? Kommunikation? Hat die Wago einen Webserver? Oder Schleifen im Programm? Oder andere ungeeignete Programmierung? In industriellen Steuerungen (z.B. Siemens S7) wird die Zyklusüberwachungszeit typischerweise auf 150 ms eingestellt, weil bei höheren Zykluszeiten ist die Reaktionszeit auf Taster oder Sensoren/Lichtschranken einfach nicht mehr hinnehmbar, da wird die Reaktion der Anlagen unberechenbar, und dann soll die Steuerung besser in STOP gehen anstatt Lichtschranken oder Endschalter zu überfahren oder nur auf sehr langes Stop-Taster-drücken zu reagieren.

(PS: zu langsam getippselt...)

Harald
 
Zuletzt bearbeitet:
habe gerade mal hier im Forum gesucht und eine Antwort eines WAGO Mitarbeiters gelesen:

--
wenn Sie in Codesys ein neues Projekt erstellen und in diesem ein PLC_PRG Programm anlegen, wird dieses automatisch in einer freilaufenden Taks aufgerufen. Wenn Sie jedoch ein Programm mit einem anderem Namen anlegen ist dieses nicht mehr gewährleistet und wird nicht mehr in einer freilaufenden Task abgearbeitet.
--

genauso heisst mein Hauptprogramm.
 
Also ein zyklischer Task wäre am besten.
Einfach den Task löschen, einen neuen anlegen und das PRG auswählen, welches der Task aufrufen soll.

Ich habe mal bei mir nachgeschaut in ein Paar Bilder angehängt.
Also wenn du im PLC Browser schaust habe ich eine maximale Zeit von 150ms, das ist aber nicht ausschlaggebend, weil das wirlich die maximale ist und die beim Start und beim Bootprojekt laden geeneriert wird.
Ich arbeite mit der grafischen Variante, ich glaube du muss die (SysLibTaskInfo) laden damit das bei dir funktioniert.
Hier kannst du die Zeiten zurücksetzen und kannst beobachten was deine Zykluszeit macht. Also im laufenden Programm wieder alle gespeicherten Zeiten rücksetzen, dass ist gut.

Ich denke wen du deine Zykluszeit auf 50 ms einstellst kannst du mal weiter sehen.
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    65,6 KB · Aufrufe: 11
  • Unbenannt1.JPG
    Unbenannt1.JPG
    84 KB · Aufrufe: 11
  • Unbenannt2.JPG
    Unbenannt2.JPG
    121,8 KB · Aufrufe: 11
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ein zyklischer Task wäre am besten.
Wenn das Programm in der freilaufenden Task zu lange dauert, dann wird es als zyklische Task auch nicht schneller sondern langsamer. Die zyklische Task darf ja nicht schneller aufgerufen werden als die längste Bearbeitungszeit dauert.Oder wie soll das funktionieren?

Harald
 
ich habe das mal versucht und das PRG_PLC in eine definierte Task umgelagert, dann kommt der Fehler 4601
"Fehler 4601: Netzwerkvariablen 'UDP': Es ist keine zyklische oder freilaufende Task zum Netzwerkvariablenaustausch vorhanden."

Die NetVars werden natürlich auch in dem Hauptprogramm verarbeitet.


Vermutlich macht es Sinn, das große Programm zu zerteilen und ein paar weniger relevante Themen auszulagern (Emailversand bei Störungen, die beiden Socket Programme für den Wetterdienst und die Luft-WärmePumpe - das alles sind ja keine zeitkritischen Bestandteile.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich habe das mal versucht und das PRG_PLC in eine definierte Task umgelagert, dann kommt der Fehler 4601
"Fehler 4601: Netzwerkvariablen 'UDP': Es ist keine zyklische oder freilaufende Task zum Netzwerkvariablenaustausch vorhanden."

Die NetVars werden natürlich auch in dem Hauptprogramm verarbeitet.
Alles bereiningt und übersetzt???
 
ich habe das mal versucht und das PRG_PLC in eine definierte Task umgelagert, dann kommt der Fehler 4601
"Fehler 4601: Netzwerkvariablen 'UDP': Es ist keine zyklische oder freilaufende Task zum Netzwerkvariablenaustausch vorhanden."

Die NetVars werden natürlich auch in dem Hauptprogramm verarbeitet.


Vermutlich macht es Sinn, das große Programm zu zerteilen und ein paar weniger relevante Themen auszulagern (Emailversand bei Störungen, die beiden Socket Programme für den Wetterdienst und die Luft-WärmePumpe - das alles sind ja keine zeitkritischen Bestandteile.
Dürfte den PFC 200 normal nicht in die Knie zwingen, aber schaden tut das nicht wenn man sowas in einem extra Task legt.
 
ich versuche mich gerade mal dran. Muss mit meiner Familie noch eine "downtime" vereinbaren ;) Vorhin sind bei einem ersten Test die Lampen und Steckdosen ausgegangen-

Nach der Änderung bei den Tasks kam beim Versuch des programm uploads der Fehler 4601 --> Rückbau auf Alt-Zustand --> Online Change --> Lampen aus.
 
erstmal unglaublich vielen Dank für Eure Hilfe - das hat mir deutlich mehr Klarheit gebracht. Jetzt weiß ich wo ich ansetzen kann. Und das mit dem möglichen Masse-Problem prüfe ich dann wenn ich Softwareseitig nicht weiterkomme.

Eine letzte Frage: in meinem Projekt habe ich ein paar Mal die Warnung "Ungültiger Watchausdruck" - ein Doppelklick schickt mich an eine Stelle in der Visu, die nichts mit der Variablen zu tun hat. Eine Globale Projekt Suche gibt mir keinen Treffer auf diese Variable.
Alle Rezepturen/Watchlisten sind gelöscht....

Wo kommt diese Warnung her?
 
Vermutlich macht es Sinn, das große Programm zu zerteilen und ein paar weniger relevante Themen auszulagern (Emailversand bei Störungen, die beiden Socket Programme für den Wetterdienst und die Luft-WärmePumpe - das alles sind ja keine zeitkritischen Bestandteile.
Wie ist das Programm eigentlich programmiert? Werden da vielleicht Reaktionen auf jedes Event sofort komplett ausprogrammiert/abgearbeitet, womöglich in Schleifen? Anstatt in Teilschritte/Schrittketten zu zerlegen? Und wenn viele Events zufällig zu schnell zusammen kommen dann braucht das Programm halt 400ms oder länger?
Es ist für mich noch nicht klar, wie diese immer wieder mal vorkommende hohe Zykluszeit zustande kommt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ungültiger Watchausdruck kommt meiner Erfahrung nach dann, wenn eine Array-Variable mit Index in der Software angezeigt werden soll, der Index aber schon über das Array hinaus ist, was beispielsweise bei einer FOR-Schleife ganz normal ist und in dem Fall ignoriert werden kann.
 
Du hast wsl irgendwo in der Visu ein Element wo eine Variable drin steht die keine Referenz hat, also eine Leiche. Die Warnung sollte aber nicht ausschlaggebend sein.

Was mir noch einfällt.
Wenn du die DI,s über die 8202 einliest und über netvars zur SPS Beleuchtung sendest, musst du die Auswertung der Doppelklicks unbedingt in der 8202 machen und auch die Auswertung der Doppelklicks und die Weiterverarbeitung zu den DO,s sollten in der selben task sein. Da können auch die von dir beschriebenen Fehler auftreten.

Wenn man Task übergreifend Flanken oder Doppelklicks auswertet, sollte man mit Handshake arbeiten, nur so kann sichergestellt werden dass auch alles abgearbeitet wurde.
 
Ausschließlich zeitgesteuerte Tasks haben bei der Wago den Vorteil, dass immer ausreichend Zeit für die Kommunikation (z.B. mit Programmier-PC und HMI) bleibt.
Auf meiner (deutlich schwächeren) 750-841 habe ich:
-1 Sek Task für Regler
-2ms Task für Encoder einlesen (sehr wenig Code!)
- 350ms Task für TCP Kommunikation (ist bei der 841 noch blockierend!)
- 40ms Task für die "normale" Logik.
 
Zurück
Oben