Fehler: OnlineChange failed, no task gap within 10000 ms: [Application]

marsmännchen

Level-2
Beiträge
110
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich muss das hier leider (obwohl es verpönt ist) zusätzlich zu einem anderen Forum Posten weil ich schon sehr verzweifelt bin.
Ich bekomme oben stehende Fehlermeldung wenn ich bei meinem Project einen Onlinechange machen will. Danach bleibt mir nur ein Download.
Ich benutze eine PFC200 2.Gen mit Codesys 3.5.SP16.
Von der Firma Codesys habe ich einen Hinweis erhalten das 10 Sekunden lang kein Taskende gefunden wird. Ich soll es mit der Funktion CheckBounds versuchen
Siehe FAQ https://faq.codesys.com/pages/viewpage.action?pageId=3538982
Leider ohne Erfolg, vielleicht aus mangelndem Verständnis.

Danach habe ich allerhand aus meinem Project gelöscht um heraus zu finden ob ich Programmiermäßig einen Hund reingeworfen hab.
Leider auch ohne Erfolg.

Im Fehlermeldungsfenster ist auch immer unter Codeposition ein weiterer Hinweis. Das scheint aber manchmal zu wechseln, je nachdem was ich im Programm verändere.

Die CPU Auslastung ist bei 17%.
Ich habe eine menge Dali in Verwendung und alles in einem eigenen Task.(Hab ich hier im Forum mal gelesen).

Jetzt bin ich soweit das ich herausgefunden habe wenn Online->Reset Ursprung mache das es dann 2-3 mal wieder funktioniert mit dem Onlinechange.

Vielleicht hatte von euch schon mal diese Fehlermeldung oder kann mir einen Tipp geben wie ich den Fehler finden kann.

Bitte um HILFE!!
MfG
Patrick
 

Anhänge

  • onlinechange.JPG
    onlinechange.JPG
    26,8 KB · Aufrufe: 54
  • onlinechange2.JPG
    onlinechange2.JPG
    33,4 KB · Aufrufe: 55
  • any32.JPG
    any32.JPG
    28,2 KB · Aufrufe: 51
Hilfe habe ich leider nicht anzubieten, aber ich bin kurz davor, selbst nach Hilfe zu schreien beim Anblick des Stichwortes 'HashTable' in Bild 2!
So etwas ist gut geeignet für Vorführungen auf dem Messestand, mit fast leeren Dateien, dann ist die Welt noch in Ordnung und es funktioniert angenehm schnell.
Wird aber verdammt laaangsam bei fast vollen Dateien. Damit kann man Anwender nerven, sich in Geduld zu üben oder sie mit einer ZwangsPause beglücken zwecks Reorganisierung bzw. Vergrösserung der Dateien.
Aber wie will man damit SPS betreiben? Ist mir ein Rätsel. :confused:
 
Zuletzt bearbeitet:
Fast leere Dateien? ZwangsPause? Anwender nerven? Worum gehts ? Führst du Selbstgespräche, oder soll das ein Insiderwitz sein?
Nö, weder noch. Wahrscheinlich hätte ich versuchen sollen, ein weniger irritierendes Wort als 'Datei' zu finden, z.B. 'DatenContainer' oder 'DatenBaustein'. Vielleicht habe ich mich auch irritieren lassen durch den Begriff 'HashTable' - was wird denn in Deiner Anwendung damit gemacht?
 
Ich bekomme oben stehende Fehlermeldung wenn ich bei meinem Project einen Onlinechange machen will.
Hallo Patrick,
am Anfang Deiner verlinkten Beschreibung steht:
'Another indication for these types of errors is when the code position changes when the application is changed.'
Ist es das, was Du mit 'wenn ich ... einen Onlinechange mache' meinst?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit der verlinkten Beschreibung gebe ich dir recht. "Die Codeposition sich ändert..." Wie soll sich die ändern? Heißt das im ST editor ist dann alles irgendwo anders? Oder im CFC sind die Blöcke verschoben? Oder was meinen die? Ich weiß es auch nicht Heinileini. Echt nicht. Und genau sowas bringt mich dann auch an meine Grenzen. Ich lese und lese und lese, Bücher, Google, Anleitungen, Foren. Aber mit solchen Beschreibungen fängt wohl nur der Erfinder des Programms was an. Mit Onlinechange meine ich die Möglichkeit "Zitat: [FONT=&quot]Der Befehl dient dem Anstoßen eines Online-Change auf die gerade aktive Applikation. Dabei lädt CODESYS nur die geänderten Teile einer bereits auf der Steuerung laufenden Applikation neu in die Steuerung"[/FONT] Also nicht alles reinladen und Steuerung auf Stop, sondern nur "schnell was reinspielen ohne das Frau raunzt das schon wieder alle Lichter brennen und die Visu spinnt".
Wie dem auch sei....Was mit einem HashTable gemeint ist und was man damit macht weiß ich natürlich auch nicht. Das wissen nicht mal die echten, erfahrenen Programmierer in meiner Firma. Es wird vermutet das es irgendwas mit C zu tun hat (oder C++). Trotz aller Mühe habe ich schon mal angefangen das Programm neu zu machen, weil ich es ja scheinbar doch nicht hinbekomme.:sm19:
 
Ein Online Change wird immer dann gemacht, wenn Dein Programm durchgelaufen ist. Wenn das auch nach 10 Sekunden noch nicht der Fall ist, hängt es wahrscheinlich in einer Endlosschleife. Verwendest Du WHILE DO oder REPEAT UNTIL Konstrukte? Das sind die ersten Kandidaten für so etwas, wenn die Schleifenendbedingung niemals True wird.
 
Nein, kein WHILE DO oder ähnliches.
Durch das schrittweise weglöschen von Programmteilen (ich weiß, sehr unprofessionell...:rolleyes:) habe ich scheinbar rausgefunden was das Problem war. Und zwar:
Ich habe eine Zirkulationspumpe angesteuert über ein Relais. Relais wird über einen Ausgang der Wagokarte angesteuert. Bei Wago hab ich den Ausgang damals gemappt mit dem Namen "IoConfig_Globals_Mapping.K14_ZirkPumpe". Und den habe ich weggelöscht. Jetzt funktionierts. Ist das Zufall? Oder darf man Ausgänge nicht direkt beschalten sondern nur über eine Variable?
Jedenfalls funktioniert der Onlinechange wieder (schon das 6. oder 7. mal testweise).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann nimm den Ausgang doch mal wieder dazu. Wenn es dann wieder nicht funktioniert, weisst Du zumindest schonmal, dass es kein Zufall war.
Wo dann das eigentliche Problem liegt, ist noch eine andere Frage. Da kann ich Dir leider nicht weiterhelfen, weil ich aus der Beckhoff-Ecke komme, wo das IO-Mapping anders funktioniert.
 
Nein, kein WHILE DO oder ähnliches.
Durch das schrittweise weglöschen von Programmteilen (ich weiß, sehr unprofessionell...:rolleyes:) habe ich scheinbar rausgefunden was das Problem war. Und zwar:
Ich habe eine Zirkulationspumpe angesteuert über ein Relais. Relais wird über einen Ausgang der Wagokarte angesteuert. Bei Wago hab ich den Ausgang damals gemappt mit dem Namen "IoConfig_Globals_Mapping.K14_ZirkPumpe". Und den habe ich weggelöscht. Jetzt funktionierts. Ist das Zufall? Oder darf man Ausgänge nicht direkt beschalten sondern nur über eine Variable?
Jedenfalls funktioniert der Onlinechange wieder (schon das 6. oder 7. mal testweise).

Unprofessionell ist das nicht, sondern ganz normale Praxis.
Wenn "normale" Fehlersuche nicht mehr hilft, dann ist das eigentlich der letzte Weg.

Das Phänomen mit dem Online-Change hatte ich auch schon unter eCockpit.
Xmal gehts gut, aber dann bleibt er hängen und es hilft nur noch Restart und Download.
Ich hatte gemischte E/A-Zuweisung. Teilweise im Konfigurator gemappt und teileweise in einer GVL.
Als ich dann meine Hardware erweitert hab, habe ich die Zuweisung komplett in der GVL gemacht.
Nach dem Lesen deines Beitrags ist mir aufgefallen, dass danach Online Change keine Probleme mehr machte.
Ob jetzt da ein Zusammenhang besteht? Wär vielleicht mal ein Thema für den 3S-Support.

Gruß
Blockmove
 
@StructuredTrash Das werd ich mal versuchen wenn ich daheim bin UND sicher bin das es jetzt funktioniert.

@Blockmove Zuweisung in GVL....sehr interessant. Onlinechange keine Probleme mehr... noch interessanter! Also meinst du im Konfigurator (screenshot)konfigurator.JPG einen Namen vergeben? Und dann bei GVL diesen mit GVL.Beispielname:=IoConfig_Globals_Mapping.K14_ZirkPumpe zuzuweisen? Oder sollte man das anders machen?


 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die CodePosition im Editor sollte irrelevant sein und die des compilierten ProgrammCodes in der SPS eigentlich auch, solange die Position der Daten in der SPS nicht durch das Laden eines geänderten PropgrammSchnipsels ebenfalls geändert wird. Vielleicht rührt die "Hasherei" vom BetriebsSystem, das für einen geänderten ProgrammSchnipsel einen freien SpeicherBereich finden soll.
Ich weiss es auch nicht, könnte mir aber vorstellen, dass die armen "HochsprachenProgrammierer", die mit ihren bewährten Mitteln ein SPS-BetriebsSystem realisieren sollen, gelegentlich Dinge einbauen, die nicht zur "SPS-Philosophie" passen.
Beim HashVerfahren geht es darum, über einen SuchBegriff einen SpeicherPlatz zu adressieren bzw. einem neu einzutragenden SuchBegriff einen noch freien SpeicherPlatz zuzuordnen.
Im Prinzip "Müller" und "Schmidt" u.s.w. über einen Algorithmus in einen ArrayIndex umzurechnen, was natürlich Daten-abhängig auch zu DoppelBelegungen führen kann, die erkannt und umgangen werden müssen.
Letzteres macht die (ansonsten schnelle) Angelegenheit u.U. extrem zeitaufwändig. Also genau das, was man in einer SPS so gar nicht gebrauchen kann.
Ich hatte mal kurz vor meiner SPS-Zeit (Anfang der 80-er) mit einem Z80-MultiUserBetriebsSystem namens OASIS zu tun (das bei indexsequentiellen Dateien mit Hash arbeitete) und seitdem reagiere ich allergisch, wenn irgendwo 'Hash' draufsteht. ;)

Häwenaissuiikend!
 
Ja Anfang der 80er,Hash,hört sich eher nach einer Woodstockgeschichte an!...da war ich noch nicht auf der Welt.:confused:
Aber ich glaube dir das ungefragt weil ich sowieso Zuwenig Ahnung habe.

Edit: AHHHH.So meint ihr das wohl gvl.JPG
 
Zuletzt bearbeitet:
Ich werde noch Wahnsinnig!!!
Jetzt hab ich alle Ein- und Ausgänge als GVL, immer noch das tolle "task-gap" Problem.
Danach hab ich sämtliche dinge die nicht zwingend notwendig sind, worin ich vielleicht Fehler erzeuge (Kelvin Berechnungen für Lichtfarbe, Dimmfunktionen,..) rausgelöscht.
Problem immer noch.
Dann hab ich Codesys 3.5.16.20 runtergeladen, gemeinsam mit der PFC200 Lizenz 3.5.16.20 installiert. Problem immer noch.
Heute ein Factory Reset, Gerät Aktualisieren, alles was mir einfällt.
Dann wollte ich testweise, ob Online-Change jetzt endlich wieder funktioniert die Absenkfunktion für die Fußbodenheizung einfügen.
Ein GVL-Visu-Button an einen GVL-Ausgang. Mehr nicht!
Und dann: Bumm nächste sch...!!
C0040: Funktion FB_init benötigt genau 6 Eingänge.
Das darf doch nicht wahr sein. Ich habe eine Funktion namens "FB_init" nie angegriffen! Lt.: Codesys Hilfe: " Der aufgerufenen Funktion werden zu viele oder zu wenige Parameter übergeben"
Ich rufe die Funktion aber nirgends auf!

Jetzt stemme ich bald meine Wände wieder auf und mache altbewährte konventionelle Elektrik!
Pure Verzweiflung und noch so viel andere Arbeit die liegen bleibt!

Edit: Wo is da die Logik? Wenn ich Online-Change mache oder neu Übersetzen kommt C0040: Funktion FB_init benötigt genau 6 Eingänge
Und wenn ich Mehrfachdownload mach dann ist der Fehler nicht mehr vorhanden und es lässt sich übertragen???



Übersetzten -> funktioniert
Neu Übersetzen -> funktioniert
Code erzeugen - > funktioniert
Einloggen ohne das Programm zu laden -> funktioniert
Online-Change -> Fehler C0040 wie oben!!!!

Was kann ich noch versuchen?

 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
FB_init ist eine Methode, die jeder FB hat. Man kann sie überschreiben und ihr dabei zusätzliche Input-Parameter geben, aber das hast Du ja nicht getan.
Schau mal die Fehlermeldung genau an, da sollte auch stehen, zu welchem FB die Methode mit der falschen Anzahl von Inputs gehört.
Vermutlich ist es ein FB aus einer Codesys-Bibliothek. Da Du eine neue Codesys-Version installiert hast, könnte es ein Problem mit den Bibliotheksversionen geben.
Evtl. mal in den Eigenschaften der Bibliotheken nachschauen, welche Version verwendet wird, ggfs. auf die neueste Version umschalten.
 
Na gut,

ich habe einen Online-Change "provoziert" durch das verschieben eines Visu Buttons.
Versuch vom Online-Change fehlgeschlagen. Leider kein Hinweis wo. Zumindest sagt mir das nichts(Screenshot)
änderung.JPG

fehler.JPG
Bei den Bibliotheken lese ich nur sehr oft "Bibliothek nicht signiert" oder "Dieser Platzhalter wird explizit auf diese Version Umgelenkt". Kann das das Problem sein?
 
Das Online-Change-Info-Fenster zeigt Deine beiden Änderungen, aber auch, dass diese einen Online Change nicht verhindern.
Dass nicht angezeigt wird, welche FB_Init den Fehler verursacht, ist natürlich dumm. Damit wird das Ganze wohl zur Suche nach der Stecknadel im Heuhaufen.
Das Ausgabefenster zeigt ja auch Warnungen, die auf Wago-Bibliotheken verweisen. Nutzt Du die, und hast Du von denen auch die neueste Version?

Dass nach der Installation einer neuen Entwicklungsumgebung ältere Projekte nicht mehr so recht laufen wollen, kenne ich von Beckhoff auch. Kein Wunder, da TwinCat ja auch auf Codesys basiert. Wenn Du eine Bibliothek in Dein Projekt einfügst, wird in der Regel ein Platzhalter gesetzt, der dann in der Regel auf die neueste verfügbare Bibliotheksversion umgeleitet wird. Du kannst die Version auch festnageln, aber vermutlich wirst Du nicht mehr wissen, mit welchen Versionen Dein Projekt ursprünglich erzeugt wurde. Es sei denn, Du hättest dieses Projekt noch als Quellcode auf dem Controller und könntest es von dort laden. Ich weiss aber nicht, ob das bei Wago geht.

Hast Du neben dem Codesys-Support auch mal den von Wago gefragt?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich will jetzt nicht lange herumlabern, ich habe nach deinem Denkanstoss gerade etwas gefunden das es noch nicht gegeben hat als ich damit angefangen habe.
Eine Bibliothek für Codesys 3.5:lib2.JPG

Und die lässt sich sogar problemlos einbinden.Kann mich erinnern das ich damals mit der alten Bibliothek gearbeitet habe. Mit der
[h=1]"Bibliotheken für die Gebäudeautomation CODESYS 2.3" [/h]Und das war für mich Anfänger schon eine fast unbezwingbare herausforderung die ich nur mit Hrn. Schwellinger beseitigt habe.
Ich werde das mal versuchen und bescheid geben ob das etwas ändert.
Vielen Dank
 
So, mit neuen Bibliotheken, Codesys 3.5.16 SP16 Patch2 32-bit.
Und wenig überraschend:
fehler2.JPG
Mich wundert nur das es nur 14 Fehler sind.
Das heißt jetzt mal für mich: Ein paar Nächte Opfern und alles nochmal neu machen. Bin gespannt was dann nicht funktioniert.:sc6:
Herrlich das Ganze!
 
Du hast immer noch ein Problem mit Bibliotheksversionen, die offenbar nicht zueinander kompatibel sind. Wenn Du alles neu machst, dabei aber wieder die gleichen Bibliotheken einbindest, wrid Dir das vermutlich nicht helfen.
So viele Fehler sind es aber gar nicht. Der eigentliche Fehler ist, dass in der Syssocket-Bibliothek in der verwendeten Version 3.5.15.0 offenbar der Typ RTS_INVALID_HANDLE nicht mehr vorhanden ist, andere Bibliotheken ihn aber erwarten. Im Bibliotheksmanager kannst Du die einzelnen Bibliotheken aufklappen, um zu sehen, welche anderen Bibliotheken sie verwenden. So kannst Du erst mal herausfinden, welche Bibliotheken die Syssocket verwenden, und prüfen, ob Du von diesen Bibliotheken eine aktuellere Version bekommen kannst. Oder Du kannst in den Eigenschaften der Syssocket die Verwendung einer älteren Version vorgeben und dann mal ausprobieren.
 
Zurück
Oben