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,

      mal ein kleines Update zum Konzept und zum Entwicklungsstand:

      Konzept:

      Es soll so sein das nur die Verbindungsparameter eingegeben werden müssen und die Variablentabelle (Globale Variablentabelle) die auf der SPS für die Kommunikation zum ioBroker gedacht ist. Es wäre zwar grundsätzlich möglich auf jegliche Variable im Programm zuzugreifen, jedoch ist das an anderen Punkten problematisch zudem ist eine definierte Schnittstelle sicherlich nicht verkehrt.

      Pro Adapter kann auf EINE Steuerung zugegriffen werden und in der ersten Ausbaustufe auf EINE Variablentabelle.

      Die Variablen sollen dann selbstständig mit dem ioBroker synchronisiert und in der gleichen Struktur States im Adapter angelegt werden. Auf diese States kann dann lesend sowie schreibend zugegriffen werden. Den Datenaustausch soll ohne Polling ausschließlich über Eventhandles in beide Richtungen vom Adapter im Hintergrund erledigt werden.

      In der ersten Ausbaustufe werden die folgenden Datentypen unterstützt werden:

      ['BOOL', 'BYTE', 'WORD', 'DWORD', 'SINT', 'USINT', 'INT', 'UINT', 'DINT', 'UDINT', 'REAL']

      Zudem können diese Datentypen nach belieben in DUT´s auch mehrfach verschachtelt werden. -> "Ein DUT (Data Unit Typ) beschreibt einen anwenderspezifischen Datentyp". Aber Arrays werden noch nicht möglich sein.

      Derzeitiger Entwicklungsstand:

      Kommunikation zur Steuerung aufbauen sowie wiederaufbauen nach Unterbrüchen und das Fehlerhandling hat schon einen guten Stand (Unitests fehlen, und TwinCat2 hab ich noch nicht getestet).

      Sync der Variablen, Resync nach Verbindungsaufbau sollte so gut wie fertig sein. Fehlerhandling wenn nicht unterstützte Datentypen verwendet werden ist auch gemacht (Auch hier fehlen die Unitests).

      Objekte (States) erstellen und die Handles auf der Steuerung sowie im ioBroker erstellen ist derzeit in Arbeit.

      Die Zeit fehlt zur Zeit leider ein bisschen aber da und dort gehen sich ein paar Stunden aus … Also wird schon langsam aber dafür sicher 😉

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

        Hallo dkleber89,

        dein Konzept hört sich gut an.

        Wie wäre es mit einem Präfix den die Variablen in TwinCAT haben müssen z.B.: "iob_xxxxxx"

        So kannst du bei durchsuchen der Symbole danach filtern.

        Super wäre auch wenn du STRING noch bei den Datentypen aufnehmen könntest?

        Arrays und Strukturen wären auch cool aber man sollte es ja für den Anfang nicht übertreiben.

        Ich kann gerne beim Testen behilflich sein, habe sowohl TC2 und TC3 Systeme dafür zur Verfügung.

        Ich bin bisher allerdings nur auf TC Seite fit nicht auf der Skript Seite im ioBrocker.

        Gruß Nils

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

          Hallo Nils,

          ja das ist eine gute Idee. Leider ist es so das es da ein paar Stolpersteine gibt wo ich derzeit noch keine richtig gute Lösung dafür habe.

          <list type="decimal">4. Es müsste ein Präfix sein das absolut ist und sonst definitiv nicht vorkommt. Sonst gibt´s Probleme

          1. Ich erstelle derzeit die States in der gleichen Struktur wie sie auf der Steuerung vorkommen. Das finde ich sehr angenehm und das könnte wenn ich mit Präfix arbeite nicht machen. Da da ja die Variable aus jeder Ecke des Programmes kommen kann und so eine unübersichtliche Struktur entstehen würde.

          Bin für Vorschläge offen.

          So wie ich das ganze Aufbaue, kann das später immer noch gut implementiert werden -> Hoffe ich 😉

          Das mit den Strings überlege ich mir noch. Wenn nicht ist das vermutlich die erste Sache die ich Weiterentwickle. Arrays kommen in der ersten Version sicher nicht.

          Was meinst du mit Strukturen? Denn DUT´s gehen in jeglicher Verschachtelung -> Meinst du was anderes?

          Danke das wäre auf jeden Fall super. Ich kann noch nicht sagen bis wann ich einen Test-fähigen Adapter habe. Aber ich würde mich auf jeden Fall hier melden.

          Gruß,

          dkleber89

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

            Hallo dkleber89,

            ist wahrscheinlich auch ok eine eigenen Variablen Liste in TC für die Kommunikation zum Broker anzulegen.

            DUT`s sind vermutlich das gleiche…..

            Auf der SPS Seite sieht es z.B. so aus:
            9199_tc.png

            Kein Problem ich kann warten 😉

            Gruß Nils

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

              Hallo Nils,

              ja das ist im Grunde das gleiche. Ist soweit ich das sehen kann nur anderst angeleg -> Sollte also schon problemlos funktionieren.

              Gruß

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

                Hallo,

                für meine Admin Seite würde ich gleich auch noch die verschiedenen Sprachen implementieren.

                Falls jemand Lust und Zeit hat und der jeweiligen Sprache mächtig ist würde ich diesen bitten mir dieses translation.json übersetzen.

                Es ist eh nur ganz wenig aber ich möchte trotzdem nicht Google-Translate nehmen.

                Offene Sprachen sind: ES, FR, IT, NL, PT, RU

                Danke schon mal.

                Hier die DE translation.json:

                {
                "PLC Runtime Version": "SPS Laufzeit Version",
                "Target IP-Adress": "Ziel IP-Adresse",
                "e.g. 192.168.0.1": "z.B. 192.168.0.1",
                "Target AMS-Net-ID": "Ziel AMS-Net-ID",
                "e.g. 192.168.0.1.1.1": "z.B. 192.168.0.1.1.1",
                "Target TCP Port": "Ziel TCP Port",
                "Target variable table": "Ziel Variablentabelle",
                "e.g. ioBrokerHandshake": "z.B. ioBrokerSchnittstelle",
                "Interval for reconnect": "Intervall für Verbindungsaufbau",
                "In Seconds (min. 5 Sec)": "In Sekunden (min. 5 Sek)",
                "Optional:": "Optional:",
                "Adapter AMS-Net-ID": "Adapter AMS-Net-ID",
                "e.g. 192.168.254.254.1.1": "z.B. 192.168.254.254.1.1",
                "Adapter AMS Port": "Adapter AMS Port",
                "e.g. 32905": "z.B. 32905",
                "On save Adapter restarts with new config immediately": "Nach dem Speichern startet der Adapter neu"
                }
                
                1 Reply Last reply Reply Quote 0
                • dkleber89
                  dkleber89 last edited by

                  Hallo Zusammen,

                  habe jetzt den Adapter auf Beta Level gebracht. Die Version v0.1.0 ist veröffentlicht.

                  Sollte bald im latest Repo auftauchen 🙂

                  Ich würde darum bitten das sich freiwillige finden die den Adapter Testen. Auf TwinCat3 habe ich schon einiges getestet und bereits einfließen lassen. TwinCat2 ist noch komplett ungetestet!!! Sollte aber wenn ich mir die Docu vom Beckhoff richtig angesehen habe kein großer Unterschied sein und alles wie gehabt funktionieren.

                  Bitte die Probleme die hoffentlich nicht zu zahlreich auftauchen oder Verbesserungsvorschläge über GitHub Issues zurückmelden.

                  Schon mal danke für das Feedback.

                  Gruß,

                  dkleber89

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

                    Hallo dkleber89,

                    habe es bei mir mal mit TC2 getestet.

                    Die beiden Bugs die du schon selbst gemeldet hast tauchen bei mir auch auf.

                    Bei mir werden unter Objekte aber nicht mal die Datenpunkte aus der Globalen Variablen Liste angezeigt.

                    Habe verschiedene Listen getestet.

                    Gruß Nils

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

                      Hallo Nils,

                      okay ja das denke ich mir … Konnte jetzt schon das ein oder andere finden und ausmerzen ... Solange der Loglevel nicht am laufenden Adapter geändert wird sollte das mit den Prozessen gelöst sein.

                      Danke für die Rückmeldung ... Ich kann mir schon denken woran es liegt ... Ich glaube ich hab mal irgendwo gelesen das TC2 für den Globalen Variablenraum einen Punkt vorangestellt braucht.

                      Könntest du mir einen gefallen tun und mir da ein Issue auf Github mit einer ganz kurzen Erklärung machen? Ich muss das Problem mit TC2 ein bisschen hinausschieben bis ich das Problem mit den Prozessen und dem Kommunikationsaufbau sauber gelöst habe. Sollte aber die Tage mal passieren.

                      Gruß

                      1 Reply Last reply Reply Quote 0
                      • L
                        Loco last edited by

                        Hallo Leute!

                        Ich hab in meinem Haus auch eine Beckhoff Twincat2 auf einem alten Notebook laufen welches mir auch als Server dient. Hier habe ich mir eine kleine HMI in Visual Studio programmiert und kann über ADS auf die Bechoff zugreifen. Auf dieses Notebook und auf die HMI kann ich übers Internet und auch über Hadny zugreifen und habe so mein Haus immer dabei :D. Wäre jetzt auch interessiert wie ich z.B. über Alexa auf die TC2 zugreifen kann um Signale zu setzten wie z.B. "Alexa, Rolladen runter" u.s.w

                        an sizzla82: Wenn ich das richtig lese, hast Du sowas ähnliches bereits realisiert. Würde mich über Info und ein "HowTo" sehr freuen…

                        Viele Grüße an euch

                        Loco

                        1 Reply Last reply Reply Quote 0
                        • 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
                                            • First post
                                              Last post

                                            Support us

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

                                            872
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            beckhoff
                                            38
                                            227
                                            39136
                                            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