Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Adapter] Beckhoff ADS

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Adapter] Beckhoff ADS

    This topic has been deleted. Only users with topic management privileges can see it.
    • dkleber89
      dkleber89 last edited by

      Hallo Zusammen,

      so TwinCat 2 sollte jetzt auch mal soweit funktionieren. Das einzige was ich mir noch nicht sicher bin ob das bei den ganzen BC´s funktioniert. Das muss ich bei meinem Bruder mal schauen der hat so ein Ding im Einsatz.

      Gruß,

      dkleber89

      1 Reply Last reply Reply Quote 0
      • N
        NilsK last edited by

        Hallo dkleber89,

        habe den Adapter mit TC2 grade getestet Funktioniert super.

        Auf Anhieb alle Daten da.

        Auch das reorganisieren / neu Einlesen über die Variable funktioniert auch.

        Vielen dank dafür.

        Wie groß ist der Aufwand Strings und Arrays zu Integrieren?

        Wenn das Funktioniert ist der Adapter Genial 😉

        Gruß Nils

        1 Reply Last reply Reply Quote 0
        • dkleber89
          dkleber89 last edited by

          Freut mich zu hören. 🙂

          Auf Anhieb würde ich sagen das Strings etwas einfacher sind als Arrays aber sollte beides gut machbar sein.

          Ich werde den Adapter jetzt noch ein wenig im Beta lassen und schauen ob nicht noch was zum Vorschein kommt. An weiteren Datentypen arbeite ich sobald der erste saubere Release draußen ist.

          Gruß,

          dkleber89

          1 Reply Last reply Reply Quote 0
          • M
            mmeine last edited by

            Hallo,

            Hut ab erstmal für die schnelle uns konstruktive Arbeit bis dahin. Lese den Beitrag sehr gespannt mit und würde mich auch gern in die Diskussion einklinken und den Adapter testen. Hab ihn bei mir installiert und gestartet. Allerdings gibt es eine Fehlermeldung und der Log sieht wie folgt aus.

            beckhoff.0	2018-11-26 20:57:53.162	info	Try to reconnect in 30 seconds
            beckhoff.0	2018-11-26 20:57:53.160	error	adsClientGetSymbolsError: timeout
            beckhoff.0	2018-11-26 20:57:52.612	info	Connected to PLC. State of PLC: RUN
            

            Auf meinem Beckhoff CX8090 läuft TwinCat2. Hab entsprechend der Anleitung auch im Systemmanager "Symbole erzeugen" aktiviert und im PLC der Globalen Variablen "iobroker" eine Strukt "iobroker_Struct" zugewiesen.

            In der Adapter-Config habe ich unter Zielstruktur sowohl den Namen ".iobroker" als auch "iobroker" eingetragen. Beide male ohne Erfolg mit o.g. Fehlermeldung. Was mache ich falsch?

            Zu meiner Entschuldigung muss ich gestehen, das ich "iobroker Neuling" bin, versuche mich aber allmählich an das Thema ranzutasten.

            Meine bisherige Visualisierung habe ich im HTML selbst geschrieben und dazu "TAME 3" als ADS-Webservice genutzt. Hat seit Jahren zuverlässig funktioniert und konnte da auf jede bestehende Variable im PLC zugreifen, nicht nur der globalen.

            Wäre schön, wenn man diese Option in einer der nächten Versionen implementieren könnte. -> Liste der zu synchronisierenden Variablen im Adapter-Config manuel eintragen um dann den Zugriff auf die besagten Datenpunkte im PLC zu haben.

            Ich hoffe meine Vorstellungen sind nicht zu hoch gesteckt.

            Erst muß ich den Adapter mal zum laufen bekommen. Hoffentlich kann mir jemand dabei helfen.

            Danke Gruß Markus.

            1 Reply Last reply Reply Quote 0
            • N
              NilsK last edited by

              Hallo Markus,

              nimm mal als Zielstruktur dein "iobroker_Struct" dann wird diese auch erkannt.

              Unter TC2 kann mann über ADS leider nicht nach Globalen Variablen Listen Filtern.

              Deswegen musst du dir ein Struct anlegen wo alle Datenpunkte drin sind.

              Gruß Nils

              1 Reply Last reply Reply Quote 0
              • dkleber89
                dkleber89 last edited by

                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?

                1 Reply Last reply Reply Quote 0
                • M
                  mmeine last edited by

                  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

                  1 Reply Last reply Reply Quote 0
                  • dkleber89
                    dkleber89 last edited by

                    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?

                    1 Reply Last reply Reply Quote 0
                    • M
                      mmeine last edited by

                      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.

                      1 Reply Last reply Reply Quote 0
                      • dkleber89
                        dkleber89 last edited by

                        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ß

                        1 Reply Last reply Reply Quote 0
                        • M
                          mmeine last edited by

                          Hallo,

                          Danke. Meine TC-Version auf dem PLC ist v2.11(Build 2240)

                          Gruß Markus.

                          1 Reply Last reply Reply Quote 0
                          • dkleber89
                            dkleber89 last edited by

                            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ß

                            1 Reply Last reply Reply Quote 0
                            • M
                              mmeine last edited by

                              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

                              dkleber89 1 Reply Last reply Reply Quote 0
                              • M
                                mmeine last edited by

                                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.

                                1 Reply Last reply Reply Quote 0
                                • dkleber89
                                  dkleber89 last edited by

                                  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ß

                                  1 Reply Last reply Reply Quote 0
                                  • N
                                    Nyquist last edited by

                                    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ß

                                    1 Reply Last reply Reply Quote 0
                                    • dkleber89
                                      dkleber89 last edited by

                                      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ß

                                      1 Reply Last reply Reply Quote 0
                                      • N
                                        Nyquist last edited by

                                        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ß

                                        1 Reply Last reply Reply Quote 0
                                        • dkleber89
                                          dkleber89 last edited by

                                          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ß

                                          1 Reply Last reply Reply Quote 0
                                          • N
                                            Nyquist last edited by

                                            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ß

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            887
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            beckhoff
                                            38
                                            227
                                            37271
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo