NEWS
[Adapter] Beckhoff ADS
-
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.
-
Hallo,
Klingt ja schon mal gut @Christian-Peters
Ja hätte vom Gefühl her auch erst mal mit der fixen Länge angefangen. Dann kann immer noch geschaut werden ob noch mehr benötigt wird.
Bei der Implementierung ist auf jeden Fall noch mehr zu tun. Ich glaube auch noch zu wissen das bei den Strings die Informationen für die Strings anderst formatiert in der ausgelesenen "Symbol List" stehen.ToDo:
- Wie liegen die Stringinformationen vor (Symbol List und Datatyp List)
- Anpassung von plcVarSyncronizing je nach dem wie die Stringinfos vorliegen.
- Wichtig ist dort natürlich auch zu prüfen ob es evtl. Strings sind die eine falsche Länge in der Steuerung haben
- Anpassung createObjectAndHandles je nach dem wie die Stringinfos vorliegen.
- Anpassung des tpyParser für die älteren TC2 Systeme
@mmeine
Danke dir für die Testerei ... Da ich selbst kein so ein System habe und TC 2 auf keinem x64 System läuft bin ich aufgeschmissen wenn mir niemand testet.Ich werde es morgen oder so Releasen mit der Version 1.1.0
Gruß,
dkleber89 -
Subj: Fehlermeldung beim Steuerungszugriff adsClientGetSymbolsError: timeout
Hallo,
ich fange an, mich in den iobroker einzuarbeiten, und da komm ich sofort am ADS Adapter vorbei, da mein Haus auf einer Beckhoff Steuerung mit TC2.11 läuft.
Das SPS Programm wird von einem Hilfsprogram, dem sog. Building Automation Framework erzeugt - es entstehen dabei zwei Tasks: Control Task und Subsystem Task
Bei keiner der zwei Tasks kann ich im Beckhoff System Manager das "Create Symbols" anwählen - das ist ausgegraut. Scheint vorzukommen, da bei der ADS node Library der Satz " To do this click on your task and then enable the checkbox before Create symbols (if he is not disabled). " steht.
Also: Route zum Raspberry Pi eingerichtet, im iobroker Adapter die Konfiguration eingegeben....scheint alles zu passen....
nur der Fehler:
beckhoff.0 2019-11-19 22:35:49.970 error (5047) adsClientGetSymbolsError: timeout beckhoff.0 2019-11-19 22:35:49.442 info (5047) Connected to PLC. State of PLC: RUN beckhoff.0 2019-11-19 22:35:49.299 info (5047) starting. Version 1.0.6 in /opt/iobroker/node_modules/iobroker.beckhoff, node: v10.17.0
Also wohl alle Adressen OK. Könnte es noch an den Ports liegen?
Im Twincat PLC Control, also der Datei zum Erzeugen des SPS Programmes habe ich Symbole erzeugen angewählt.
Grundsätzlich scheinen Symbole aus der Steuerung Abfragbar, da ich ein anderes Tool zur Erzeugung von Graphischen Oberflächen einsetze (ATVISE) und das dabei eingesetzte Tool per ADS die Variablennamen der Tasks auslesen kann....
jetzt bin ich a bisserl ratlos und dankbar für Hilfe...
Eine weitere Frage: Das SPS Laufzeitsystem kann vier verschiedene unabhängige SPS erzeugen (intern mit den Ports 801 bis 804 bezeichnet)
Wo kann ich im Adapter einstellen, auf welche der Systeme der Adapter geht (im ADS-Node scheint es noch eine Einstellung zu geben...)
Also schon mal Danke im Voraus!
-
Nachtrag: auf der Steuerung läuft ein TC 2.11.2257
PS: gibt es irgendwelche Debug Einstellungen bzw. kann ich bei dem Adapter den Log-level hochsetzen? -
Hallo,
ich bin ein ziemlicher Newbie mit dem IOBroker und Raspberry (ganze 2 Tage Erfahrung).
Ich habe bei mir vor 10 Jahren Beckhoffsystem eingebaut und habe auch etwas Erfahrung auch in ADS-Kommunikation zwischen verschiedenen SPSen. Aber dieses Teil bekomme ich nicht zum Laufen.
Ich versuche meine Steuerung TC2 (V2.11.2237) verzweifelt anzubinden, aber der Beckhoff-ADS-Adapter und die SPS wollen einfach nicht:beckhoff.0 2019-11-24 17:11:35.135 info (1678) Try to reconnect in 15 seconds
beckhoff.0 2019-11-24 17:11:35.133 error (1678) ADS Client: Error: read ECONNRESET
beckhoff.0 2019-11-24 17:11:20.615 error (1678) ADS Client: Error: timeoutEin Broadcast Search aus dem TC-SystemManager hat auch nix ergeben, pingen geht aber.
Da ich mir eine C6015 mit TC3 geleistet hab , habe ich es auch mit der versucht, komme aber zum gleichen Ergebnis.
Ein Broadcast Search zwischen den TC2- und TC3-SPSen ist erfolgreich, auch zu meinem TC3 XAE.Ich komme jetzt natürlich zu der Schlussfolgerung, dass etwas in den Einstellungen beim IOBroker nicht stimmt, da kenne ich mich aber (noch) nicht genug aus.
Wäre nett, wenn mir da jemand auf die Sprünge helfen könnte.
Gruß Tommi
-
Hallo,
bei den TC2 Systemen muss bei einer Version <= 2.11.2240 mindestens die Version 1.1.0 des Adapters installiert sein. Nur dieser hat die Möglichkeit sich auf diese TC2 Systeme zu verbinden. README beachten. Ich bin mir aber nicht sicher ob die Versionsnummer passt evtl. sind auch noch neuere Systeme betroffen.
@stm ich muss sagen ich kenne mich leider mit dem TC2 System überhaupt nicht aus und kann dadurch auch nicht sagen warum das "Create Symbols" ausgegraut ist. Diese Frage taucht auch des öfteren auf das müssten dir hier andere Personen erklären.
Den TCP Port kannst du ja im ioBroker einstellen. Ich habe aber nicht berücksichtigt das man mehrere Tasks haben und den ADS Port einstellen kann, somit ist dort fix der default Port 801 für TC2 hinterlegt.
Heißt wiederum du kannst nur auf den Task mit dem Port 801 zugreifen. Evtl. Portanpassung möglich?
Die Debug Möglichkeiten sind ziemlich eingeschränkt. Die einzige Möglichkeit ohne Entwicklungsumgebung ist den Log-Level auf Debug oder höher zu stellen.
@T-Spooner
Der ioBroker ist der aktive Part bei dem Verbindungsaubau. Im Systemmanager der Adapter nicht gefunden werden, dies ist aber auch nicht notwendig. Auf dem TC2 System muss die Route freigegeben werden (Remote auf None stellen sonst kann die Route nicht angelegt werden) und dann kann der ioBroker Adapter die Verbindung aufbauen.Gruß,
dkleber89 -
Hallo,
ich denke, dass ich die Route richtig eingestellt habe, wenn man vom "Temporär" absieht:
Was mich aber etwas wundert ist, dass der Systemmanager im Meldungsfenster mehrere Verbindungen von der IOBroker-IP registriert, allerdings immer von einem anderen Port:
Übrigens nutze ich die Adapter-Version 1.1.0
Gruß T.Spooner
Ich habe den Fehler gefunden!
Ich hatte die AMS-Net-ID auf dem Adapter falsch eingetragen -
Danke für die Info, dkleber89,
Ich kann mit dem Port 801 Leben, das ist zwar das Produktivsystem, 802 wäre die Testumgebung, da wäre es einfacher zu spielen. (Kann ich das irgendwo im Code ändern oder müsste ich dazu um eine Erweiterung in einer höheren Version bitten
Obwohl ich auf der Github Seite die Version 1.1.0 sehe, bekomme ich in der iobroker Oberfläche nur die Version 1.0.6 angeboten und keine Aktualisierung...
Bei mir läuft TC 2.11.2257
Dann steht da was von "Ältere Systeme, upload *.tpy"... wohin gilt es die Datei hochzuladen?
Wenn dich direkt auf den Windows Controller gehe, auf dem das Twincat läuft, habe ich dort im System Manager "Dynamic Symbols" auf enabled.
Das kann auch der Grund sein, wenn ich im Remote Zugriff bei einzelnen Tasks das ausgegraut habe, da es für die gesamte Steuerung default ist.Also woanders suchen:
- ADS Port im Adapter 32905
- Datenstruktur in Datentypen definiert
TYPE iobroker_struct : STRUCT binaer: BOOL; zahl: INT; glei: REAL; END_STRUCT END_TYPE
- bei Globalen Variablen deklariert
iobroker : iobroker_struct;
Und jetzt weiss ich nimmer so recht weiter ....
-
nun aus Github die 1.10 installiert - leider keine veränderung.
Auch die Angabe iobroker oder .iobroker ändert nichts. -
Ich hab das Thema mal in Allgemein verschoben da der Adapter schon lange im Stable ist. Normalerweise würde ich ihn deswegen schließen, da hier aber wenig Aktivität ist und die Anzahl der Beiträge gering bleibt er fürs erste offen.
Bitte eröffnet in Zukunft für Konkrete Fragen ein eigenes Thema in ioBroker Allgemein oder in der passenden Unterkategorie. Bei Fehlern/Bugs im Adapter bitte in der Unterkategorie Error/Bug ein Thema aufmachen.
-
@Jey-Cee okay danke ... Also die offenen Themen hier noch abarbeiten und dann geht der Thread zu. Wohin gehen die Threads wenn größere neue Features eingebaut werden / werden sollen? Wieder in den Bereich Entwicklung oder?
@stm das bedarf einer Erweiterung in einer höheren Version. Zumindest wenn man es einstellbar haben möchte.
Weißt du wo die Adapterfiles liegen und kennst dich mit Javascript aus? Dann solltest du im Hauptfile beckhoff.js fündig werden, um händisch den Port im Hintergrund zu ändern. Wichtig nur direkt bei der Verbindungsaufbaumethode (relativ weit unten) ändern / manipulieren. Ansonsten wird der Adapter nicht mehr laufen. Und du machst das auf eigene Gefahr da kann ich dich nicht Supporten.
Spätestens ab morgen steht die 1.1.0 Version auch im stable Repositiory zur Verfügung. Bisher nur im latest.
Im Dropdown für die TwinCat Version gibt es einen neuen Eintrag für die älteren TC2 Systeme. Wird dieser Eintrag ausgewählt kann der Config-Seite die *.tpy übergeben werden. Dann sollte das ganze funzen, zumindest sofern es an der TwinCat 2 Version liegen sollte.
Bitte auf jeden Fall um Rückmeldung falls dass, das Problem war dann muss ich die Version anpassen. (Doku und Dropdown)
Gruß,
dkleber89 -
@dkleber89 sagte in [Adapter] Beckhoff ADS:
@Jey-Cee okay danke ... Also die offenen Themen hier noch abarbeiten und dann geht der Thread zu. Wohin gehen die Threads wenn größere neue Features eingebaut werden / werden sollen? Wieder in den Bereich Entwicklung oder?
Wenn du fragen zur Entwicklung hast ist Entwicklung der Richtige Ort. Wenn du willst das eine neue Version des Adapters getestet wird gehört er in die Kategorie Tester. Dort kannst du dann Feedback für deine Minor Version sammeln und Fehlerbehebung machen, wenn er dann (hoffentlich) Fehlerfrei ist kommt er ins Stable und damit wird dann das Thema in Tester geschlossen.
Ziel ist es besser zwischen Entwicklung und Stabiler betrieb zu trennen und Informationen besser finden zu können, wenn alles in einem Thema ist und das irgendwann mehrere Hundert bis Tausend Beiträge hat ist das einfach zu unübersichtlich. -
@dkleber89 An den Austausch 801 gegen 802 hab ich mich nicht gewagt.
Mit der 1.10 funktioniert der Datenaustausch, wenn ich die Variante mit "TPY-Hochladen" wähle.
Das wäre dann wahrscheinlich ein Hinweis in der Doku, wenn sich "Symbole erzeugen" nicht anwählen lässt, dann so tun, als ob es einen ältere TC wäre.Wenn es wichtig ist, weiter zu testen, bitte sagen, ich habe die letzte TC2 in einer virtuellen Maschine am laufen und könnte da was ausprobieren.
Soviel vorweg, auch da ist das "Symbole erzeugen" im System Manager bei der speziellen Task ausgegraut - unabhängig, ob "Dynamische Symbole erzeugen" aktiv ist oder nicht.Jetzt sag ich erst Mal "Danke" und schau wie ich meine Variablen, die in den Austausch gehen strukturiere.
-
Hallo, bin relativ neu in der Thematik ioBroker. Die Verbindung via ADS habe ich zum laufen bekommen auf TC3 und auch TC2 auf einem CX8090. Geht echt Klasse. Genial wären nun auch String Variablen zum Datenaustausch. Ist dies in nächster Zeit geplant. Ansonsten muss ich einen Java Lehrgang machen um String Variablen in z.B. Integer Werten zu wandeln, da ich blutiger Anfänger bin.
Gruß Mario275