NEWS
[Adapter] Beckhoff ADS
-
Hallo Markus,
es ist richtig wie Nils sagt -> Bei TC2 musst du die Struktur angeben bzw. den Instanznamen der Struktur. Weiters muss eben diese Struktur im Root einer Globalen Variablentabelle (Name egal) liegen.
Wobei das nicht das Problem ist:
Gibt es die Struktur nicht kommt die Fehlermeldung das die Tabelle leer ist und das du dies überprüfen sollst.
Ich denke das ist ein Zugriffsproblem:
- Stimmen die IP-Adresse und AMS-Net-ID? (Target ist Beckhoff)
- Ist die Route im Beckhoff Router eingetragen? (IP-Adresse und AMS-Net-ID vom Adapter "Source")
- Port auf der Beckhoff offen?
Kannst du das mal überprüfen?
-
Hallo,
danke erstmal für die schnelle Hilfe. Leider bekomme ich die Fehlermeldung nicht weg. Wenn ich die Route rausnehme, bzw. in der Adapterkonfig eine anderen eigenen AMS-Net-ID einstelle, welche im PLC nicht geroutet ist, bekomme ich die Fehlermeldung
ADS Client: Error: timeout
demnach gehe ich davon aus, das er zumindest die Verbindung herstellt, und mit der Fehlermeldung
beckhoff.0 2018-11-27 09:00:13.749 error adsClientGetSymbolsError: timeout beckhoff.0 2018-11-27 09:00:13.228 info Connected to PLC. State of PLC: RUN
es nur ein Problem beim lesen der Struktur gibt.
Meine Definition im PLC sieht wie folgt aus:
TYPE iobroker_Struct : STRUCT WP_HZG_El : REAL; WP_HZG_Waerme : REAL; WP_WW_El : REAL; WP_WW_Waerme : REAL; WP_HZG_VL : REAL; FK_Alle : BOOL; END_STRUCT END_TYPE VAR_GLOBAL iobroker : iobroker_Struct; END_VAR
Was muß ich denn nun bei Zielstruktur eingeben?
Wobei ich mir aber noch nicht sicher bin, ist die Aktivierung "Symbole erzeugen" im TC-Systemmanager. Diese konnte ich in der "I/O Idle Task" bei Echtzeiteinstellungen aktivieren. In meinen 3 Programm-Tasks (Hauptprogramm, EIB, DALI) unter SPS-Konfiguration sind die Häkchen allerdings ausgegraut und können nicht aktiviert werden (siehe Screenshots).
Hängt das vielleicht daran? Und wie kann ich das lösen? Hab keine Ahnung.
Übrigens über das node-red-plugin und das NPM-Modul "node-red-contrib-ads" hab ich die Verbindung zu den einzelnen Variablen hinbekommen. Wollte aber langfristig mit möglichts wenigen parallell laufenden Programmen und Schnittstellen arbeiten und auf "node-red" verzichten.
Gruß Markus
-
Hallo,
ich muss ganz ehrlich sagen ich weiß nicht woran es liegt.
Anscheinend hast du schon ein Stück weit Zugriff denn es wird dir ja der Betriebszustand der PLC angezeigt im LOG.
In deinem Fall wäre die Zielstruktur -> iobroker
Es ist als ob keine Variablensymbole für ADS erzeugt werden. Ich bin leider mit Beckhoff nicht 100% durch und schon garnicht mit TC2 da ich nur mit TC3 arbeite. Evtl. kann dir da noch Nils weiterhelfen?
Das komische ist das das ganze bei mir einwandfrei funktioniert … Das einzige was mir bisher bekannt ist das es bei den BCxxxx so ein Problem gibt. außer das liegt auch irgendwie noch an den Einstellungen.
Ich hoffe jetzt einfach mal das das ganze kein Versionsproblem ist ...
Hmm ... Wird warscheindlich nicht viel bringen aber kannst du den Adapter auf Debug stellen und hier Posten was er vom Adapterstart bis zum Timeout logt?
-
Hallo,
hier mein Log im debug-Modus
host.raspberrypi 2018-11-28 21:50:38.361 info instance system.adapter.beckhoff.0 terminated with code 0 (OK) beckhoff.0 2018-11-28 21:50:38.310 silly inMem message beckhoff.0.* beckhoff.0.info.plcRun val=false, ack=true, ts=1543438238304, q=0, from=system.adapter.beckhoff.0, lc=1543438236565 beckhoff.0 2018-11-28 21:50:38.306 silly inMem message beckhoff.0.* beckhoff.0.info.connection val=false, ack=true, ts=1543438238299, q=0, from=system.adapter.beckhoff.0, lc=1543438236559 beckhoff.0 2018-11-28 21:50:38.299 info Stopped and Connection closed host.raspberrypi 2018-11-28 21:50:38.291 info stopInstance system.adapter.beckhoff.0 killing pid 15820 host.raspberrypi 2018-11-28 21:50:38.290 info stopInstance system.adapter.beckhoff.0 host.raspberrypi 2018-11-28 21:50:38.289 info object change system.adapter.beckhoff.0 beckhoff.0 2018-11-28 21:50:36.570 silly inMem message beckhoff.0.* beckhoff.0.info.plcRun val=false, ack=true, ts=1543438236565, q=0, from=system.adapter.beckhoff.0, lc=1543438236565 beckhoff.0 2018-11-28 21:50:36.566 silly inMem message beckhoff.0.* beckhoff.0.info.connection val=false, ack=true, ts=1543438236559, q=0, from=system.adapter.beckhoff.0, lc=1543438236559 beckhoff.0 2018-11-28 21:50:36.563 info Try to reconnect in 30 seconds beckhoff.0 2018-11-28 21:50:36.555 error adsClientGetSymbolsError: timeout beckhoff.0 2018-11-28 21:50:36.040 silly inMem message beckhoff.0.* beckhoff.0.info.plcRun val=true, ack=true, ts=1543438236031, q=0, from=system.adapter.beckhoff.0, lc=1543438236031 beckhoff.0 2018-11-28 21:50:36.033 silly inMem message beckhoff.0.* beckhoff.0.info.connection val=true, ack=true, ts=1543438236028, q=0, from=system.adapter.beckhoff.0, lc=1543438236028 beckhoff.0 2018-11-28 21:50:36.029 info Connected to PLC. State of PLC: RUN beckhoff.0 2018-11-28 21:50:35.969 debug Start establish Connection to PLC beckhoff.0 2018-11-28 21:50:35.963 info starting. Version 0.2.0 in /opt/iobroker/node_modules/iobroker.beckhoff, node: v8.11.4 beckhoff.0 2018-11-28 21:50:35.835 debug statesDB connected beckhoff.0 2018-11-28 21:50:35.715 debug objectDB connected host.raspberrypi 2018-11-28 21:50:34.524 info instance system.adapter.beckhoff.0 started with pid 15820 host.raspberrypi 2018-11-28 21:50:34.512 info "system.adapter.beckhoff.0" enabled host.raspberrypi 2018-11-28 21:50:34.510 info object change system.adapter.beckhoff.0
viel sieht man nicht oder?
Gruß Markus.
-
Nein das habe ich mir schon gedacht … War ein versuch wert
Ich hab leider frühstens morgen Abend zeit um ein kleines Testskript für dich zu schreiben das du dann im Skriptadapter ausführen kannst. Ich hab eine ganz grobe Idee woran es noch liegen könnte.
Kannst du mir bitte in der Zwischenzeit deine TwinCat Version posten?
Gruß
-
Hallo,
Danke. Meine TC-Version auf dem PLC ist v2.11(Build 2240)
Gruß Markus.
-
Hallo,
kannst du das folgende Skript in den ioBroker kopieren und dann jeden der Tests ausführen. Und mal schauen ob diese Funktionieren?
Dazu muss im Skriptadapter bei den npm Paketen das Paket node-ads-api hinzugefügt werden.
Dann bitte bei den options die richtigen Daten einfüllen und bei myHandle ein passenden Variablennamen und den Typ auf dich anpassen.
Bitte jeweils einen Test ausführen und dann auskommentieren und den nächsten.
var ads = require('node-ads-api'); /* * Hier deine Werte eintragen */ const options = { //The IP or hostname of the target machine host: "10.0.0.201", //The NetId of the target machine amsNetIdTarget: "10.0.0.201.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: "10.0.0.110.1.1", //OPTIONAL: (These are set by default) //The tcp destination port //port: 48898 //The ams source port //amsPortSource: 32905 amsPortTarget: 801 } const myHandle = { //Handle name in twincat symname: '.TESTVARIABLE', //An ads type object or an array of type objects. //You can also specify a number or an array of numbers, //the result will then be a buffer object. //If not defined, the default will be BOOL. bytelength: ads.DINT, //The propery name where the value should be written. //This can be an array with the same length as the array length of byteLength. //If not defined, the default will be 'value'. propname: 'value' } /* * Erster Test */ var client = ads.connect(options, function() { client.readDeviceInfo(function(err, result) { if (err) console.log(err) console.log(JSON.stringify(result)) client.end() }) }) client.on('error', function(error) { console.log(error) }) /* * Zweiter Test */ /* var client = ads.connect(options, function() { client.getSymbols(function(err, symbols) { if (err) console.log(err) console.log(JSON.stringify(symbols, null, 2)) client.end() }) }) */ /* * Dritter Test */ /* var client = ads.connect(options, function() { client.read(myHandle, function(err, handle) { if (err) console.log(err) //result is the myHandle object with the new properties filled in console.log(handle.value) //All handles will be released automaticly here client.end() }) }) */ /* * Vierter Test */ /* var client = ads.connect(options, function() { client.getDatatyps(function(err, datatyps) { if (err) console.log(err) else console.log(JSON.stringify(datatyps, null, 2)) client.end() }) }) */
Die Version ist schon ein bisschen älter als meine zu Testen aber ich denke nicht das es daran liegt
Gruß
-
Hallo,
vielen Dank erstmal für deine Mühe. Hier meine Ergebnisse:
Test 1 bis 3 funktionieren.
Test 4 bringt Fehler: timeout
Ich hoffe das hilft.
Gruß Markus
-
Hallo dkleber89,
danke erstmal für das Script. Hab es gleich erweitert um die Schnittstelle zur Beckhoff mit meinen gewünschten Variablen herzustellen (ohne mein PLC-Programm umzustrukturieren). Ich nutze vorerst MultiRead, das funktioniert soweit prima und würde mir auch ausreichen. Wie hast du in deinem Adapter das mit der beschriebenen automatischen Synchronisation der Variablen bei Änderung gelöst. Die Werte über eine zeitabhängige Abfrage (z.B. alle Sekunde) abzurufen erscheint mir bei einigen Werten im Hinblick auf die Echtzeitfähigkeit zu ungenau.
Gruß Markus.
-
Hallo,
für mich stellt sich jetzt noch die Frage geht das nicht wegen einer Einstellung bei TwinCat oder liegt das tatsächlich daran das dies eine ältere Version ist.
Auf jeden Fall ist es so das diese Datentypabfrage für das funktionieren des Adapters essenziell ist bzw. sobald es bei den Variablen eine Verschachtelung gibt ist dies zwingend notwendig.
Ich werde bei Beckhoff mal nachfragen was da das Problem sein könnte.
Ich werde das Versuchen einzubauen das diese Datentypanfrage nur benutzt wird wenn ich sie auch wirklich brauche (Verschachtelung). Dann wäre es möglich auch für TwinCat Systeme die dies noch nicht können.
Es gibt in dieser Bibliothek node-ads-api die Möglichkeit die Variablen der PLC zu subscriben … Dann wird bei jeder Variablenänderung auf der PLC ein Event im Skript ausgelöst.
Gruß
-
Hallo,
ich wollte den ADS Adapter gerade testen, bei mir kommt beim öffnen und beim speichern der Adapter Konfiguration folgende Meldung:
"Please implement save function in your admin/index.html"
Meine Einstellungen werden dann nicht gespeichert.
Woran kann das liegen?
Infos:
ioBroker.admin 3.5.10
Installierte Adapter Version: 0.2.0
Log bringt keine Einträge
Ich verwende den Internet Explorer 11
Version 11.0.9600 Update Version 11.0.43
Gruß
-
Hallo,
zuerst mal die Information das der Adapter leider bei BC´s nicht funktionieren wird da benötigte Systeminformationen nicht in der BC Laufzeit abgespeichert werden. Ich bin aber derzeit dran am schauen ob ich für die BC eine manuelle Variante bereitstellen kann.
Zu der Geschichte mit dem TC2 in der Version v2.11(Build 2240) wollte mir der Herr bei Beckhoff vor Weihnachten nicht weiterhelfen und jetzt über die Feiertage erwarte ich nix. Ich werde der Sache im neuen Jahr nachgehen.
Zum Problem mit dem IE 11 -> Auf diesem Browser hab ich nicht getestet und deswegen was gemacht was der doofe IE nicht kann …
Werd ich aber schnell richten ... Ab morgen sollte die neue Version 0.2.1 über den ioBroker downloadbar sein.
Gruß
-
Hallo,
mit dem Adapter 0.2.1 kann ich den Adapter mit dem Internet Explorer 11 konfigurieren.
Mein Plan war eigentlich, den ioBroaker auf dem CX51xx mit Windows embedded Standard laufen zu lassen, auf dem auch die PLC läuft, damit ich keinen zusätzlichen raspberry pie laufen lassen muss, ist das möglich oder geplant?
Gruß
-
Hallo,
das hängt nicht vom Adapter ab ob das auf dem CX läuft und so auf die schnelle hängt es auch nicht vom ioBroker ab.
Du müsstest es hinkriegen das der Node.js Server auf dieser Plattform läuft -> Soll heißen mit den Binaries von Github eigene Builds erstellen und diese lauffähig kriegen (Wenn das überhaupt möglich ist -> keine Ahnung, Vielleicht hat das aber auch schon jemand gemacht) wenn dann der CX auch noch halbwegs Arbeitsspeicher hat und nicht ne ganz lahme CPU würde sicher der ioBroker auch drauf laufen.
Gruß
-
Hallo,
der ioBroaker läuft auf dem CX.
Ich dachte ich gebe die lokale NetId an und den Port der PLC Task 350, andem ich die Symbole erzeuge, und würde so die ADS Verbindung aufbauen können.
Die IP Adresse will ich eigentlich gar nicht angeben weil ich ja über keinen TCP Port raus muss. Da ich aber eine angeben muss, hab ich die von der Netzwerkkarte angegeben.
Der Adapter meldet:
Verbunden mit Host –> wahr
Lebenszeichen --> wahr
Verbunden mit Beckhoff --> falsch
Der Log bringt:
ADS Client: Error: connect ECONNREFUSED x.x.x.x:350
Gruß
-
Hallo,
Achtung der TCP Port und der AMS Port sind zwei paar Schuhe.
Den Port den du im Adapter einstellen kannst ist der TCP Port und der sollte wenn du nichts verändert hast 48898 sein. Der AMS Port ist fix und es wird je nach dem ob TC2 oder 3 ausgewählt ist der richtige hergenommen (Auch hier gilt wenn du nicht manuell herumgeschraubt hast).
Bei der IP-Adresse kannst du natürlich deine IP-Adresse der Netzwerkkarte eingeben in der Regel wird aber die Loopback-Adresse verwendet -> 127.0.0.1
Wäre vielleicht super wenn du noch schreiben könntest was berücksichtigt werden muss um Node.js auf ein Windows Embedded Standard zu bringen. Kann evtl. mal jemand brauchen.
Gruß
-
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.