Java ADS Notifications unvollständige Datenübertragung

Aleksander

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen,

ich versuche durch Notifications Werte im 100us Takt von einem TwinCat 3 PLC Programm zu lesen. Dafür haben ich eine Notification erstellt, die OnChange einen Wert lesen soll, der sich einmal pro Cycle um einen erhöht.
Wenn ich das lokal teste dann bekomme ich aus 250k Werten zwischen 249k und den vollen 250k gelesen. Ich kann gerade aber nicht festmachen, wieso meistens ein paar Werte nicht mitkommen.
Hat hier jemand eine Idee wo das Problem liegen könnte bzw. wie ich das am besten Bugteste?

Mit freundlichen Grüßen,
Alexander Weber
 
Ich hatte ähnliche Erfahrungen mal mit einem 16kHz Beschleunigungssensor.
Anstatt jeden Wert einzeln zu lesen habe ich einen Ringspeicher programmiert, welcher 1000 Werte speichert und danach das ganze als Array ausgelesen. Als "OnChange-Variable" dann einfach ein Bool, welches bei vollem Speicher auf true wechselt.

Bzgl Bugtesting:
Du sagst, dass die Variable pro Cycle um 1 erhöht wird. Würde ja bedeuten, dass du alle Zahlen von 1-250k einmal hast.
Kannst du nicht einfach über deine Werte iterieren und somit gucken, welche Werte fehlen? Gibt es da ein Muster? Zum Beispiel, dass jeder Eintausendste Wert fehlt?

Wo läuft denn die lesende Anwendung? Wenn es ein normaler Windows Rechner ist grätscht vielleicht eine höher priorisierte Task dazwischen und es kann nicht innerhalb eines Cycles gelesen werden, bevor ein neuer Wert eintrifft. Die isolierten Kerne sind ja nur für TwinCAT reserviert, nicht für deine Java Anwendung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nach meinem Post bin ich genau den Weg gegangen: es gab nicht wirklich ein Pattern in den Werten, die verloren gehen. Es kann nach 4k aber auch erst ab 15K auftretten, verloren gingen zwischen 5 und 1.5k Werte.
Mein PLC Projekt baute auf dem Beckhoff Sample auf, welches sie online bereitstellen. Nachdem ich dort alles entfernt hatte außer das Inkrementieren der Variable und auf der Windows Machine alle Programme, außer TwinCat und den Java Prozess geschlossen hatte, wurden auch alle Werte Übertragen. Daher denke ich, die Erklärung, dass einige Cycles einfach nicht schnell genug gelesen werden konnten ist passend.

Danke für die Hilfe.
 
Das Notifications bei 250µs und "OnChange" verloren gehen wundert mich nicht. In diesem Fall wird für jede Änderung ein Telegramm geschickt was in der ganzen Toolchain dann entsprechend schnell auch durchgereicht werden müsste incl. der Echtzeit.

Da kommt man ganz schnell an die Grenzen.
Sinnvoller ist es diese Cyclic zu konfigurieren und den MaxDelay so zu konfigurieren das er ca ~50 Werte entspricht.
So arbeitet auch das Scope.

Und auch wenn du auch hier viele Notifications bei 250µs haben willst kann es dir passieren das mal ein Datenpunkt fehlt... Du brauchst dann manchmal entsprechend Dampf auf dem Rechner.

Da das es gerne übersehen wird. Notifications sind für viele Hochsprachenprogrammierer sehr reizend. Sie sind aber nicht das Mittel der Wahl um viele Daten zu erhalten. Die Notifications Kosten auf der Laufzeit einiges an Resourcen und sind sparsam zu benutzen!
 
Zurück
Oben