NEWS
[Adapter] Beckhoff ADS
-
Mir ist da grad noch was eingefallen.
Ich bin ja grade an der Einbindung der BC Runtimes. Dort funktioniert das ganze zwar nicht aber es könnte eine Lösung für die älteren TC2 Runtimes sein die keine Datentypen bereitstellen.
Wenn du magst kannst du gerne den Adapter aus dem Entwicklungsbranch testen ob der bei dir funktionieren würde.
ACHTUNG: Auf eigenes Risiko ist definitiv ein Alphatest.
Installation über "Installieren aus eigener URL" -> "Beliebig" -> "git://github.com/dkleber89/ioBroker.beckhoff.git#7-addOldTc2AndBcSupport"
Dort auf TC2 < 2.11.... gehen und die *.tpy deines PLC Projektes hochladen. Die restlichen Einstellungen unterscheiden sich nicht vom normalen Verbindungsaufbau. Und auch hier muss die AMS Route freigegeben werden wie sonst auch.
Gruß,
dkleber89 -
Hallo,
ich habe gestern leider einen ziemlichen Bug in die Version 1.0.5 eingebaut und published. Ich bin bereits an der Version 1.0.6 die ich in einer halben Stunde ausrolle. Leider geht es aber bis morgen bis die neue Version im ioBroker sichtbar ist.
BITTE die Version 1.0.5 NICHT installieren!!! Da sind Infinity Loops drinnen.
Bitte um Entschuldigung hab da schnell schnell was geändert ohne zu Testen weil ich gedacht habe das hat eh keine Auswirkungen
-
Hallo,
ich habe den ioBroker bei einer Suche nach Hausautomationssystemen gefunden, die eine Beckhoff Steuerung einbinden können - eigentlich gibt es nur noch den Home Assistant, der ADS out of the box spricht.
Bevor ich anfange, mit dem ioBroker zu arbeiten eine Frage/Bitte:
Soweit ich gelesen habe, funktioniert die Integration nicht allgemein, also Zugriff auf beliebige Variablen in der Steuerung sondern nur zu den bestimmten, die ich einer speziellen Struktur angelegt habe - was bei mir bedeuten würde, im SPS Programm Variablen ein zweites mal in der für ioBroker notwendigen Struktur anzulegen und dann in die bestehenden Variablen umzukopieren- irgendwie unelegant. (Umstellung ist keine Option, da das System auf der Basis von Arrays für Sensoren, Aktuatoren, Zustände etc aufgebaut ist.)
Besteht die Möglichkeit einer Erweiterung zum Zugriff auf beliebige Variablen der Steuerung?
Ist das grandios aufwendig ? (Ich kann grad a bisserl Python)
Oder wurde der Design Ansatz mit einer Struktur gewählt, weil im ADS ReadByName für eine Menge beliebiger Variablen die Performanz unterirdisch wird? und ich damit nicht weiter käme, selbst wenn sich jemand meiner erbarmt, und das reinklopft?Ich sag schon mal Danke!
-
Hallo,
die Struktur wurde deshalb definiert da der Adapter einen automatischen Abgleich gegen diese Struktur macht und die Variablen im ioBroker anlegt. Zudem ist es immer Ratsam eine saubere Schnittstelle in den Systemen zu haben, weil sonst jede Änderung zu Problemen auf der Gegenseite führen kann. Zumal es auch sinnlos wäre jede Variable die nur was zwischenspeichert abzugleichen.
Zudem stimmt auch das eine Subscription auf alle Variablen zu Performenzproblemen führt.
Für dein Problem gibt es aus meiner Sicht zwei Möglichkeiten:
- In der Steuerung eine Struktur anlegen und über einen Baustein eine Bidirektionale Verbindung erstellen bzw. das ganze dann über Read sowie Write Variablen lösen. Ja ist ein Aufwand aber dann kannst du den Adapter verwenden der den ganzen Rest managed. -> Ich würde an deiner Stelle sogar hingehen die Funktionalität des Adapters testen und schauen ob er deinen Bedürfnissen entspricht. Wenn ja dann das SPS Programm Schritt für Schritt umbauen in dem du die Variablen austauscht.
- Du verwendest den Skripting Adapter des ioBroker und bindest die selbe Kommbibliothek ein, wie der Beckhoff Adapter. Dann kannst du jeder Variable die du möchtest Schreiben / Lesen oder auch Subscriptions darauf machen. Das ist dann halt alles individuell für jeder deiner Variablen zu machen.
Gruß,
dkleber89 -
@dkleber89
Hallo,nach der Sommerpause wieder zurück im Forum um meine Steuerung weiter aufzupeppen.
Ich hab das script bei mir eingestellt und folgende Log erhalten:
15:49:12.206 info javascript.0 Start javascript script.js.Test.Test-Twincat-ADS 15:49:12.207 info javascript.0 script.js.Test.Test-Twincat-ADS: registered 0 subscriptions and 0 schedules 15:49:12.714 info javascript.0 script.js.Test.Test-Twincat-ADS: Error Code: timeout 15:49:18.148 info javascript.0 Stop script script.js.Test.Test-Twincat-ADS
im übrigen habe ich die Zeile
var ads = require('node-ads')
in
var ads = require('node-ads-api');
ändern müssen. Ich hoffe da gibt es kein Versionsproblem.
Gruß -
Hallo @mmeine,
schade das es da keine zusätzlichen Informationen gibt. Aber ich muss sagen, wenn ich alles was ich jetzt für dieses Problem zusammengesammelt habe anschaue, dann scheint es so zu sein das bei etwas älteren Versionen die Datentypen nicht aus der Steuerung abgerufen werden können.
Ich weiß nicht ob du die Möglichkeit hast was zu testen:
@dkleber89 sagte in [Neuer Adapter] Beckhoff ADS:
Mir ist da grad noch was eingefallen.
Ich bin ja grade an der Einbindung der BC Runtimes. Dort funktioniert das ganze zwar nicht aber es könnte eine Lösung für die älteren TC2 Runtimes sein die keine Datentypen bereitstellen.
Wenn du magst kannst du gerne den Adapter aus dem Entwicklungsbranch testen ob der bei dir funktionieren würde.
ACHTUNG: Auf eigenes Risiko ist definitiv ein Alphatest.
Installation über "Installieren aus eigener URL" -> "Beliebig" -> "git://github.com/dkleber89/ioBroker.beckhoff.git#7-addOldTc2AndBcSupport"
Dort auf TC2 < 2.11.... gehen und die *.tpy deines PLC Projektes hochladen. Die restlichen Einstellungen unterscheiden sich nicht vom normalen Verbindungsaufbau. Und auch hier muss die AMS Route freigegeben werden wie sonst auch.
Gruß,
dkleber89Das wäre theoretisch die Variante als Lösung für dein Problem leider aber ungetestet. Ich hoffe ich komme in nächster Zeit mal dazu mir ein TC2 System auf einem Testsystem zu installieren.
Gruß,
dkleber89 -
@dkleber89
Hallo,hab die URL installiert, danach war dein Adapter von V1.06 auf V1.05 zurückgestuft.
Komme dann aber nicht weiter. Wo stelle ich TC2 < 2.11.... ein und lade miene *.tpy hoch?
Hab die alte Instanz gelöscht und ne neue anglegt. Konfigseite sieht genauso aus wie vorher.Gruß
-
Hallo mmeine,
konnte es bei mir auch nachstellen. Aus irgendeinem Grund aktualisiert da der ioBroker die Konfig Seite nicht sauber. Wenn du den Adapter komplett löscht (Nicht nur die Instanz entfernen sondern auch in der Adapterübersicht ganz rechts in der Spalte auf den Papierkorb klicken) dann kannst du den Adapter über diesen Pfad installieren und das Menü wird angezeigt wie es soll.
Warum sich das so Verhält kann ich auch nicht sagen.
Gruß,
dkleber89 -
Hallo,
Ich bin letztens auf den Beckhoff Adapter gestoßen und bin echt begeistert.
Wird an der Implementierung von Strings und Arrays als unterstützte Datentypen noch gearbeitet?Gruß Christian
-
Hallo Christian,
das freut mich natürlich
Leider ist es so das ich derzeit überhaupt nicht am Adpater arbeiten kann weil ich schlicht keine Zeit dafür habe. Ich wollte mit den Strings (zumindest mit einer fixen länge schon länger fertig sein -> Die Wahrheit ist aber das ich nicht mal damit angefangen habe.
Super wäre natürlich wenn sich jemand finden würde der das Implementiert. Ich werde mich bemühen um das evtl. mal an einem Wochenende reinzustapeln aber versprechen kann ich derzeit nix.
Gruß,
dkleber89 -
@dkleber89
Hallo,danke, hab die V1.07 am laufen und die nötigen Einstellungen vorgenommen. Hab die Instanz mehrmals mit kleinsten Änderungen auf der Konfigseite gestartet. Immer kam der Fehler ADS Clien: Error: timeout.
Zwischendurch schien es plötzlich einmal funktioniert zu haben, anschließend nicht wieder. Ich bin mir bei den Einstellungen also nicht mehr zu 100% sicher welche da gerade aktuell war.
Entweder habe ich "TwinCat2" oder "TwinCat2 <2.11...." eingestellt.
Oder ich hatte bei der Zielstruktur ".iobroker" oder "iobroker" eingestellt (Was müsste denn hier drin stehen?)Ergebnis ist folgender Log:
2019-10-25 10:55:18.292 - info: host.raspberrypi instance system.adapter.beckhoff.0 started with pid 17823 2019-10-25 10:55:20.034 - debug: beckhoff.0 objectDB connected 2019-10-25 10:55:20.410 - debug: beckhoff.0 statesDB connected 2019-10-25 10:55:21.074 - info: beckhoff.0 starting. Version 1.0.7 in /opt/iobroker/node_modules/iobroker.beckhoff, node: v8.15.1 2019-10-25 10:55:21.120 - debug: beckhoff.0 Start establish Connection to PLC 2019-10-25 10:55:21.660 - error: beckhoff.0 ADS Client: Error: timeout 2019-10-25 10:55:21.664 - info: beckhoff.0 Try to reconnect in 15 seconds 2019-10-25 10:55:36.667 - debug: beckhoff.0 Start establish Connection to PLC 2019-10-25 10:55:37.237 - error: beckhoff.0 ADS Client: Error: timeout 2019-10-25 10:55:37.242 - info: beckhoff.0 Try to reconnect in 15 seconds 2019-10-25 10:55:50.300 - debug: beckhoff.0 system.adapter.admin.0: logging false 2019-10-25 10:55:52.243 - debug: beckhoff.0 Start establish Connection to PLC 2019-10-25 10:55:52.506 - info: beckhoff.0 Connected to PLC. State of PLC: RUN 2019-10-25 10:55:57.397 - debug: beckhoff.0 PLC States received 2019-10-25 10:55:57.677 - debug: beckhoff.0 Release all Notification Handles first. 2019-10-25 10:55:57.679 - debug: beckhoff.0 All Notification Handles are released. 2019-10-25 10:55:57.727 - debug: beckhoff.0 Send Subscription for: .iobroker.TempAussen to PLC 2019-10-25 10:55:58.449 - debug: beckhoff.0 Subscription for: .iobroker.TempAussen done. 2019-10-25 10:55:58.476 - debug: beckhoff.0 Read Symbol Value from PLC to ioBroker: .iobroker.TempAussen -> 13.2
Ich vermute es ist ein Geschwindigkeitsproblem. Kann man irgendwo die Timeout -Einstellung ändern und die Zeit etwas höher schrauben, bevor die Fehlermeldung kommt?
Gruß
Markus -
@mmeine
Aus meiner Sicht müsste es wie folgt sein:TwinCat2 < 2.11...
Zielstruktur immer ohne Punkt
Und die .tpy Datei deines Projektes in der Konfigseite hochladen.Die Timeoutzeit kannst du über "Intervall für Verbindungsaufbau" einstellen. Glaube aber weniger das es an dem liegt.
Gruß,
dkleber89 -
Hallo,
habs jetzt glaube am laufen. Das timeout-Problem gab es nur als ich von der Ferne auf iobrober zugegriffen habe. Jetzt aus dem internen Netz scheint es zu funktioniern. Vielleich hat sich aber über Nacht der Raspberry etwas ausruhen können.
Also vielen Dank, für deinen schnellen und kreativen Support. Wirst du diese version später in die offiziellen Updates einbinden, oder bleibt es eine Beta-Version?
Super und viele Grüße.
-
Hallo @mmeine,
okay ja super
Kein Thema ich sag danke für das mühevolle Testen so über die Ferne. Ich möchte das auf jeden Fall in das offizielle Repo bringen, da es sicher noch mehr Personen gibt die eine etwas ältere TC2 Version am laufen haben.
Ich würde dich aber, damit das sicher alles sauber Funktioniert, um ein paar Sachen bitten:
- Kannst du mal in deinem SPS Projekt eine Variable hinzufügen und eine entfernen und die aktualisierte *.tpy hochladen, um zu schauen ob das auch funktioniert?
- Mir nach einer Zeit so ein bis zwei Wochen eine Rückmeldung geben ob denn alles auch stabil läuft?
- Evtl. als Gegenprobe mal auf das normale TC2 zurückstellen und schauen ob es da jetzt noch immer nicht funktioniert.
- Sonstige Rückmeldung falls es noch was zu verbessern gibt.
Wäre super wenn das geht. Dann würde ich es als Update publishen.
Gruß,
dkleber89 -
@dkleber89 Würde mich gerne am Projekt beteiligen. Wo müsste angesetzt werden um Strings zu ermöglichen.
Kann nichts versprechen, will es aber mal probieren. -
Hallo @Christian-Peters,
das ist natürlich immer gut
Der Adapter basiert auf dieser Library.
Diese Library hat einen String Datentyp mit einer fixen länge von 80 Zeichen und einer der flexibel ist.Der 1. Schritt ist über Skripte (entweder eigene Node Runtime oder ioBroker Javascript Adapter) herauszufinden wie sich der Datentyp verhält:
- Fixe Länge:
- Was ist wenn der String in der Steuerung zu lang oder zu kurz ist
- Was passiert wenn der String im ioBroker zu lang oder zu kurz ist
- Variable Länge:
- Sollte gleich auf die flexible Länge gesetzt werden
- Wie kann das aus der Auflistung der Datentypen ausgelesen werden
- Was passiert wenn der String im ioBroker zu lang oder zu kurz ist
Das müssten so im groben die Punkte sein die vor dem Implementieren herausgefunden werden müssen.
Dann kommt der schöne Teil ... Implementieren
Gruß,
dkleber89 - Fixe Länge:
-
Hallo,
Entschuldigung für mein Deutsch, aber ich bin Belgier.
Ich habe Ihren ADS-Adapter für Beckhoff entdeckt und finde ihn großartig.
Also habe ich das mit einer cx5020 getestet, aber ich habe ein kleines Stabilitätsproblem.
Die Verbindung zur SPS wird alle 10 Minuten unterbrochen.
Würdest du eine Idee haben warum?beckhoff.0 2019-11-02 14:33:39.364 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 14:33:24.345 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:32:36.874 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:32:36.873 error ADS Client: timeout
beckhoff.0 2019-11-02 14:22:51.041 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 14:22:36.029 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:22:36.028 error ADS Client: Error: read ECONNRESET
beckhoff.0 2019-11-02 14:22:32.376 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 14:22:08.436 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:22:08.435 error ADS Client: timeout
beckhoff.0 2019-11-02 14:12:22.562 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 14:12:07.545 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:11:20.052 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:11:20.051 error ADS Client: timeout
beckhoff.0 2019-11-02 14:01:34.241 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 14:01:19.229 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:01:19.228 error ADS Client: Error: read ECONNRESET
beckhoff.0 2019-11-02 14:01:15.839 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 14:00:51.851 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 14:00:51.851 error ADS Client: timeout
beckhoff.0 2019-11-02 13:50:51.042 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 13:50:36.026 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 13:50:36.026 error ADS Client: Error: read ECONNRESET
beckhoff.0 2019-11-02 13:50:08.736 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 13:50:08.736 error ADS Client: timeout
beckhoff.0 2019-11-02 13:40:07.834 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 13:39:52.826 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 13:39:52.826 error ADS Client: Error: read ECONNRESET
beckhoff.0 2019-11-02 13:39:24.958 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 13:39:24.957 error ADS Client: timeout
beckhoff.0 2019-11-02 13:29:24.432 info Connected to PLC. State of PLC: RUN
beckhoff.0 2019-11-02 13:29:09.427 info Try to reconnect in 15 seconds
beckhoff.0 2019-11-02 13:29:09.426 error ADS Client: timeoutViele Grüße
Moustik
-
Hallo @Del-Didier-A-G,
ehrlich gesagt bin ich da komplett überfragt.
Kannst du mir bitte den Adapter auf den Loglevel Debug stellen und das Log posten? Vielleicht kann man da noch etwas mehr sehen.
Ansonsten kannst du nur schauen was für Operationen du alle 10 Minuten ausführst. z.B. Wird eine bestimmte Variable alle 10 Minuten geschrieben etc.
Gruß,
dkleber89 -
@dkleber89 Habe die Library mit Verschiedenen Strings getestet.
- STRING mit Fixer Länge im IoBroker sowie in der Steruerung funktionieren.
Solange diese 80 Zeichen nicht überschreiten. - Bei Strings mit Variablen Längen muss der String in der SPS gleich oder größer als der im IoBroker sein. Sonst gibt es den Fehler "Value out of bounds" oder "parameter size not correct"
- String im IoBroker die kleiner als der Text der übertragen werden soll sind führen zu einem kürzen des Textes, aber zu keinem Fehler.
So wie ich das sehe, ist man mit den Strings mit Fixer länge
(ads.STRING nicht ads.string(10)) am besten aufgestellt. Die Leerzeichen in den Strings werden ja eh abgeschnitten .Bei der Implementierung komme ich leider nicht weiter. Mit der Erweiterung der knownDatatypes ist es wohl nicht getan Wo müsste dort angesetzt werden ?
- STRING mit Fixer Länge im IoBroker sowie in der Steruerung funktionieren.
-
Moin,moin..
also nochmal herzlichtsen Dank für deine Arbeiten. Super Leistung. Hier meine Erkenntnisse nach 2 Wochen Einsatz:
Kannst du mal in deinem SPS Projekt eine Variable hinzufügen und eine entfernen und die aktualisierte *.tpy hochladen, um zu schauen ob das auch funktioniert?
Habe ich mehrmals gemacht, hat ohne Probeme funktioniert.
Mir nach einer Zeit so ein bis zwei Wochen eine Rückmeldung geben ob denn alles auch stabil läuft?
Hab bisher keine Probleme feststellen können. Läuft soweit stabil.
Evtl. als Gegenprobe mal auf das normale TC2 zurückstellen und schauen ob es da jetzt noch immer nicht funktioniert.
Normales TC2 bringt immer noch timeout.
Sonstige Rückmeldung falls es noch was zu verbessern gibt.
Nach welchem Schema aktualisierst/änderst du die Variablen?
Siehst du die Möglichkeit auch außerhalb der "iobroker_struct" manuell einzelne Objekt/Variablen zu verknüpfen?
z.B. welche, die man manuell als Objekt hinzufügt wie "beckhoff.0.plc.P_Bel_Wohnen.TasterUpDown"?
("TasterUpDown" wäre in diesem Fall eine existierende lokale Variable in dem Programm "P_Bel_Wohnen" im TwinCAT)Gruß Markus.