NEWS
[Adapter] Beckhoff ADS
-
Hallo,
das war der entscheidende Hinweis, jetzt klappt es bei mir auch
Zusammenfassung:
ioBroaker auf dem CX installiert, auf dem auch TwinCAT 3 XAR läuft.
Betriebssystem –> Windows embedded Standard 7 (nicht das CE Betriebssystem Windows embedded compact 7) somit konnte ich die Windows Installationsroutine nutzen.
Route auf dem CX eingetragen mit AMSNetId vom Adapter (freie AmsNetId) und Loopback Addresse 127.0.0.1
In der Adapter Konfiguration:
Ziel IP: 127.0.0.1 (Loopback)
Ziel AmsNetId --> NetId CX
ZielTCP Port --> 48898 (default)
Adapter AmsNetId --> NetId aus der Route
Adapter AMS Port --> 32905
@dkleber89 herzlichen Dank für die Unterstützung und die Arbeit
Gruß
-
Hallo, ich bin an dieser Stelle neu und habe Probleme.
Mein IoBrocker läuft auf einem Rasspberry Pi (192.168.2.120) mit dem ADS-Adapter.
Die vorhandene Haussteuerung ist ein Cx2030 mit TC3 V4022.20 (192.168.2.107).
Den ADS-Adapter im IoBroker bekomme ich nicht zum laufen. (Verbunden mit Beckhoff: Falsch)
In der AdapterConfig habe ich folgendes eingetragen:
Ziel IP-Adresse : 192.168.2.107
Ziel AMS-Net-ID : 192.168.2.107.1.1
Ziel Port :48898
Ziel Variablentabelle: GVL_IOBroker ( Hier sind die Lese- und Schreib-Variablen enthalten)
Ich habe schon einige Routen eingetragen und getestet, aber der Adapter scheint diese nicht zu finden.
Wie muß dann die Route von der SPS zum RaspPi aussehen und was bedeutet die Opionale "Adapter AMS-Net-ID"?
Als Fehlermeldung bekommen ich im Adapter sofort und ständig "Firing 'Write after End' Error"
Schon mal Danke für einen Tipp
-
Hallo,
das mit der Fehlermeldung ist ein Bug der mir bekannt ist … Hab im Moment aber keine Zeit um mich da mal länger damit zu beschäftigen. Dieser ist aber nicht kritisch und beeinträchtigt nicht die Funktion des Adapters.
Adapter stoppen ... Deine Einstellungen auf dem CX und dem Adapter sauber machen ... Wieder starten
So wirklich weiterhelfen kann ich dir schlecht, es gibt viele Möglichkeiten warum die Verbindung nicht aufgebaut werden kann.
- Ziel AMS Net ID ist richtig? Diese muss ja nicht zwingend den gleichen Anfang wie die IP haben
- Ziel Port richtig? Dies ist der Defaultport kann aber auch ein anderer sein sofern das mal geändert wurde
- Ziel Port in der CX Firewall freigegeben oder Firewall deaktiviert?
- Die Route auf dem CX richtig eingetragen -> Remote IP und AMS Net ID muss mit den Daten des Raspi bzw. des Adapters zusammenpassen. Deswegen gibt es ja auch den Eintrag Adapter AMS-Net-ID falls du da eine spezielle ID haben möchtest
- Hast du die Einstellung im TC3 nach Doku gemacht? -> Symbole erzeugen?
Bitte nochmals alles Checken ansonsten die Screenshots von den Routen und den Firewalleinstellungen der CX posten. Zusätzlich auch noch die Einstellungen im Adapter posten.
Gruß
-
Hallo dkleber89,
mir ist im Tc3-Projekt noch nicht alles klar. Daher hier einige Fragen dazu.
1.
Welche Schnittstelle hast du für ADS freigegeben, X000 oder X001.
2.
Hast du evtl eine EAP-Protokoll auf Schnittstelle X001(192.168.2.106) eingefügt und dort das ADS freigegeben? Programmiert wird dann auf X000 (192.168.2.107)
3.
Ist auf dem Cx noch ein Tool installiert worden?
Weil der Adapter immer
****"Add Support for Compact mode (js-Controller 2.0 Feature)" und
"Adding Tags manually for some Runtimes" und
"Firing 'Write after End' Error"****
als Fehler oder Status meldet.
Ich habe alle möglichen Kombinationen mit Port, AmsNetId, oder Schnittstelle
getestet. Firewall ist auch ausgeschaltet bzw Freigabe der Ports erteilt. Die Fehlermeldungen bleiben immer die gleichen.
Wenn die Verbindung von IoBroker und TwinCat klappen würde, wäre das echte eine coole Sache um die Dinge zu verbinden. Leider habe ich nicht jeden Abend Zeit um dort was zu testen, aber evtl kannst du mit meinen Einstellungen oder Fragen was anfangen.
Hier meine Einstellungen:
Mit würde auch ein Beispiel Tc3-Projekt etwas weiterhelfen, evtl mit dem du getestet hast.
Danke nochmal.
-
Hallo,
auf der Beckhoff habe ich garnix gemacht bis auf das was in der Anleitung steht.
Soll heißen ->
- Den Haken bei Symbole erzeugen aktiviert und die Route im Router hinzugefügt.
- Die Route hinzugefügt. Auf der Beckhoff ist Remote der Adapter. Also die IP-Adresse des ioBrokers und die AMS-Net-Id der Adapters (Eintrag im Bereich optional)
- Auf der Firewall der Beckhoff oder einer anderen Firewall die evtl. noch dazwischen hängt muss natürlich der TCP und UDP Port eingehend freigegeben werden. Hier die Beckhoff Infosys
Wichtig noch der Ziel TCP Port muss natürlich auf Default bleiben -> Sonst müsste das auf der Beckhoff umgestellt werden. Falls du das evtl. gemacht hast dann müssten zusätzlich logischerweise auch ein anderer Port in der Firewall geöffnet werden.
Das sollte es gewesen sein.
Adding Support for Compact mode und firing write after end error kannst vorerst mal ignorieren.
Zu deinen Screens:
- Also nur zur Sicherheit: Du darfst nicht die EtherCat Schnittstelle verwenden sondern nur die TCP/IP also über die du dich auch vom Engineering oder normalen Netzwerk aus verbindest.
- Im Router beim Routen hinzufügen unten immer IP Address anstatt Host Name verwenden.
- Auf das EtherCat Device kannst du nicht zugreifen -> deswegen nützt es auch nix da was aktivieren -> es kann nur auf die CX mit der TwinCat Runtime zugegriffen werden. Direktzugriff auf die ADS Feldgeräte ist derzeit mit dem Adapteraufbau nicht möglich.
Viel mehr weiß ich leider im Moment auch nicht.
Gruß
-
Hallo Markus,
ich bin immer noch mit Beckhoff dran an dem Problem ... Es ist echt manchmal mega mühsam -> Bis man da mal ne Antwort bekommt kann schon mal nen Monat vergehen. Könntest du mir evtl. nochmal den einen Test machen?
Hier wäre das Skript das du nur oben bei options mit deinen Daten füllen müsstest:
var ads = require('node-ads') var options = { //The IP or hostname of the target machine host: "10.0.0.2", //The NetId of the target machine amsNetIdTarget: "5.1.204.160.1.1", //The NetId of the source machine. //You can choose anything in the form of x.x.x.x.x.x, //but on the target machine this must be added as a route. amsNetIdSource: "192.168.137.50.1.1", //The tcp destination port port: 48898 //The ams source port amsPortSource: 32905 //The ams target port for TwinCat 3 Runtime 1 amsPortTarget: 851 }; var client = ads.connect(options, function () { this.getDatatyps(function (err, datatyps) { if (err) { console.log(`Error Code: ${err}`); } else { console.log(JSON.stringify(datatyps, null, 2)); this.end(); } }); })
Hier bräuchte ich den Fehler den er ausgiebt ... Du hattest da geschrieben das das timeout ist? War da noch eine Zusatzinfo dabei?
Danke,
dkleber89 -
Hallo Zusammen,
bei dem Beckhoff Adapter hat ein User derzeit gerade das Problem, das wenn auf einem TC2 System die Configuration über den Systemmanager geladen wird, keine Variablen mehr von der Steuerung in den ioBroker gesynct werden.
Meine Vermutung ist dadurch das weder der Socket geschlossen wird noch die PLC state von Run auf Stop geht, der Adapter gar nix von dem Neustart mitbekommt. Die ganzen Subscriber sind aber in der Steuerung abgelöscht.
Da ich kein TC2 System habe, kann ich es aber nicht nachstellen.
Hat jemand von euch auch so ein Problem oder kann es nachstellen?
Github Issue: https://github.com/dkleber89/ioBroker.beckhoff/issues/12
Gruß
-
Hallo dkleber89,
seid ihr in dem Fall "Twincat 2.11" schon weiter gekommen?
Ich habe ein solches System und die gleiche Fehlermeldung.
Soll ich was testen auf dem System, das dich weiter bringt?Viele Grüße
Michi -
Hallo Michi,
sorry war schon ewig nicht mehr aktiv hier ... In den Sommermonaten bin ich eher weniger am PC.
Nein wir sind nicht weiter ... mit den TwinCat 2 Systemen gibt es generell immer wieder Probleme. Das hier im Thread bekannte Problem (Variablensync bei älteren TC2 Systemen), zu keines Mengengerüst (nach 64 Variablen ist fertig) und aktuell versuche ich gerade die BC Steuerungen über ADS anzusprechen scheint aber nicht zu funktionieren. Keine Ahnung wo das Problem ist.
Leider ist der Support in solchen Sachen von Beckhoff, sagen wir mal überschaubar
Ich denke testen bringt nur was, wenn sich jemand hinsetzt und eine Testumgebung aufsetzt, damit direkt ein debugging des Adapters durchgeführt werden kann. Leider habe ich selbst kein so ein System um das zu machen.
Gruß,
dkleber89 -
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