Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 38

Thema: ADS-protokoll in Python 2.7 implementieren

  1. #21
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von ohm200x Beitrag anzeigen
    Aber seltsam ist es schon das ein Python Script auf 2 (nicht Windows) Kisten nicht geht und auf einem (Windows) tut.
    Wo nun mal TwinCat für "Total Windows Control and Automation Technology" steht.
    Wenn ich mir z.B. das ADS Protokoll ansehe und du ja selbst meintest, komisch das sie für ihre längen die Intel-Byte-Order für hernehmen, anstatt konsequent die Netzwerk-Byte-Order frage ich mich schon ob Beckhoff selbst das schon mal fern der Windows Insel getestet hat.
    Müssen sie ja an sich nicht. Ihre Systeme laufen ja durchweg auf Windows, sei es NT, 2000, ..... Win7 oder eben WinCE5.... .
    Ich habe bereits funktionierende ADS Clients auf Debian und Ubuntu gesehen. Außerdem mehrfach ADS Client die auf Windows ohne TwinCAT funktionieren.
    Hier ist eventuell eher die Frage ob sich die Socket-Implementierung auf Windows aquivalent zur Implementierung auf Mac oder Linux verhält? Bekanntlich ist der Socket ja vom Betriebssystem abhängig und dort gibt es kein Standard-Interface.

    Zitat Zitat von ohm200x Beitrag anzeigen
    Auf weder meinem MacBook, noch der Linux-Büchse habe ich net ADS-Route eingetragen, kann ich ja auch nicht.
    Läuft a) kein Windows drauf und daher b) kein ADS-Router.

    Ich habe jedoch mein Macbook als ADS-Teilnehmer im ADS-Router des CX eingetragen.
    Die Linux-Büchse heute früh noch nicht, werde ich im nächsten Schritt noch machen.
    Das du lokal auf der Mac/Linux-System keien Route eintragen kannst ist klar. Aber auf dem TwinCAT-Zielsystem muss die Route vorhanden sein.

    Zitat Zitat von ohm200x Beitrag anzeigen
    Aber unabhängig davon sollte ich auf dem ADS/AMS Logger / Viewer auf dem CX zumindest meinen Request als Paket eintrudeln sehen.
    Dass der CX die Response dazu ggf. nicht los werden kann, weil er nicht weiß wohin sollte ein zweites Problem sein.
    Oder sehe ich das falsch?
    Wenn keine Route eingetragen ist, wird die TCP/IP-Verbindung abgelehnt und damit können die Requests auch nicht im ADS Logger zu sehen sein. Du siehst nur mit Wireshark/Ethereal den Aufbau einer TCP-Verbindung und das erste Command.

    Zitat Zitat von ohm200x Beitrag anzeigen
    Dass drfunfrock's client geht scheint ja bewiesen zu sein. Sonst hätte er den Code (noch) nicht offengelegt.
    Und bei mir geht's ja unter Windows auch. Da das ding in Python geschrieben ist, erwarte ich als Anwender erst mal keine Probleme, wenn ich das auf nem andern System ausführe. Zumal ja in Wireshark der ADS-Teil von beiden PCs aus identisch aus schaut.
    Diese Aussage bestätigt nur, dass der Python Client auf Windows funktioniert. Das sagt aber nicht aus, dass der Client auf Mac, Linux oder sonstigen Systemen korrekt funktioniert und erst recht nicht ob du alles korrekt konfiguriert hast!

    Wenn du Unterstüzung erhalten möchtest, solltest du vielleicht weniger bashen, als mehr Informationen liefern:

    An den Logs von dir sieht man, dass direkt nach dem ersten Request die TCP-Connection vom Server Resettet wird.
    Daher gehe ich davon aus, dass es ein Fehler in den Routen auf dem Zielsystem ist.
    Hast du auch jedem System, bzw. bei jeder Route eine andere AMS Net ID verwendet?
    Hast du die IP-Adresse und nicht den DNS-Namen für die Route eingetragen?
    Wenn der ADS Router mehrere Routen mit gleicher AMS Net ID findet, kann er diese natürlich nicht eindeutig einer IP-Adresse zuordnen.
    Du könntest ja mal deine Registry-Einträge auf dem Zielsystem posten...

    Eigenartig finde ich auch, das bei mit der ADS-Interpreter von Wireshark zu deinen ADS Requests immer "Malformed Packet: AMS" ausgibt.
    Außerdem sind die Frames bei Mac und Linux 104 Bytes lang, bei Windows ist der Frame nur 92 Bytes lang.

    ADS Requests:
    0000200000000 50778ca0101 2103 0aff020f0101 2103 01000400000000000000000001000000 Windows
    0000200000000 50778ca0101 2103 c0a8b21b0101 2103 01000400000000000000000001000000 Mac
    0000200000000 50778ca0101 2103 c0a8b21b0101 2103 01000400000000000000000001000000 Linux

    Daran sehe ich doch schon, das die AMS Net ID von Mac und Linux gleich ist..... also kann es garnicht funktionieren.
    Geändert von Neals (25.05.2012 um 07:55 Uhr)

  2. #22
    Registriert seit
    27.11.2009
    Ort
    BW - Ecke Ulm
    Beiträge
    438
    Danke
    135
    Erhielt 36 Danke für 33 Beiträge

    Standard

    Zitat Zitat von Neals Beitrag anzeigen
    Ich habe bereits funktionierende ADS Clients auf Debian und Ubuntu gesehen. Außerdem mehrfach ADS Client die auf Windows ohne TwinCAT funktionieren.
    Gut, dann besteht ja die Chance das ich es doch noch hin bekomme.
    Habe im Netz auch schon davon gelesen, auch schon den Source-Code dazu runter geladen, Stichwörter: Zottel oder gass und PLCtalk.
    Ich hatte bisher das Zeug noch nicht übersetzt, da ich mich mal selbst an Socket-Programmiereung austoben wollte, bzw. dann mit dem Python Client von drfunfrock als funktionierenden Plan B prüfen wollte was bei mir schief läuft

    Zitat Zitat von Neals Beitrag anzeigen
    Hier ist eventuell eher die Frage ob sich die Socket-Implementierung auf Windows aquivalent zur Implementierung auf Mac oder Linux verhält? Bekanntlich ist der Socket ja vom Betriebssystem abhängig und dort gibt es kein Standard-Interface.
    Das war mir bisher in der Tragweite nicht bekannt.
    Allerdings, widersprichst du dier hiermit ein Stück weit selbst.
    Es soll ADS-Clients für Debian / Ubuntu geben (read: es gibt ADS-Clients ....), aber hier bei mir daheim soll der Ubuntu-Socket schuld sein das es nicht geht.

    Zitat Zitat von Neals Beitrag anzeigen
    Das du lokal auf der Mac/Linux-System keien Route eintragen kannst ist klar. Aber auf dem TwinCAT-Zielsystem muss die Route vorhanden sein.
    ACK. Im Falle vom Mac habe ich das von Anfang an getan und in meinen gestrigen Versuchen für den Linux-PC ja auch.

    Zitat Zitat von Neals Beitrag anzeigen
    Wenn keine Route eingetragen ist, wird die TCP/IP-Verbindung abgelehnt und damit können die Requests auch nicht im ADS Logger zu sehen sein. Du siehst nur mit Wireshark/Ethereal den Aufbau einer TCP-Verbindung und das erste Command.
    ACK.

    Zitat Zitat von Neals Beitrag anzeigen
    Diese Aussage bestätigt nur, dass der Python Client auf Windows funktioniert. Das sagt aber nicht aus, dass der Client auf Mac, Linux oder sonstigen Systemen korrekt funktioniert und erst recht nicht ob du alles korrekt konfiguriert hast!
    OK, bin nun mal davon ausgegangen, das wenn ein Python Script (was ja weitgehend Platformunabhängig ist (sein soll)) auf Rechner A geht, es auf Rechner B auch tut.
    Ich habe den python Client absichtlich her genommen um zu sehen warum mein C-Client nicht tut.
    Da sich aufm Mac beide gleich verhalten, der Beweis, dass das Python Teil ja aber zumindest unter Windows geht, erbracht ist muss es wie du ja auch sagst entweder der Bereich Socken / TCP-Stack unter der Haube sein, oder die Konfiguration.

    Zitat Zitat von Neals Beitrag anzeigen
    Wenn du Unterstüzung erhalten möchtest, solltest du vielleicht weniger bashen, als mehr Informationen liefern:
    Tut mir Leid wenn ich ein manchen Stellen etwas zu laut gedacht habe. Allerdings verstehe ich nicht ganz was du meinst. (Lass mal die Aussage wegen Beckhoff und intel Byte Order außen vor)

    Sonst habe ich denke ich nach und nach einige Infos geliefert. Anfangs war dieser Thread ja auch eher ein Chat zwischen drfunfrock und mir (plus zwei PNs dazwischen).

    Zudem was für Infos fehlen? Viele Fragezeichen gibt es in dem Thread von anderen usern nicht.

    Ich habe mit meinen Versuchen auf verschiedenen Rechnern und diversen Traces ja selbst erst mal versucht zu verstehen oder einzukreisen wo der Fehler liegen könnte. Mein ADS-Request von meinem C-Client sah nach kurzer Zeit aus wie in der Spec resp. wie das was drfunfrocks Client so raus schickt.

    Zitat Zitat von Neals Beitrag anzeigen
    An den Logs von dir sieht man, dass direkt nach dem ersten Request die TCP-Connection vom Server Resettet wird.
    Daher gehe ich davon aus, dass es ein Fehler in den Routen auf dem Zielsystem ist.
    OK, das ist ne Aussage. Frage, was kann man groß Falsch machen?
    Fassen wir nochmal zusammen:
    CX90xx im Keller: CE5xx IP 192.168.178.210 AMS ID 5.7.120.202.1.1
    Macbook: OS X 10.7.3 IP 192.168.178.26 AMS ID 192.168.178.26.1.1
    Virtual Box Win XP (Netzwerk gebrückt) IP 192.168.178.232 AMS ID 192.168.178.232.1.1
    Linux: Ubuntu xxx IP 192.168.178.27 AMS ID 192.168.178.27.1.1

    Wenn ich es recht verstanden habe muss ich also alle Clients dem CX ADS Router bekannt machen.
    Die Clienst selbst wissen von ADS Routen nichts, Windows kann / muss aber nicht oder?

    Zitat Zitat von Neals Beitrag anzeigen
    Hast du auch jedem System, bzw. bei jeder Route eine andere AMS Net ID verwendet?
    Hast du die IP-Adresse und nicht den DNS-Namen für die Route eingetragen?
    - ACK
    - ACK

    Zitat Zitat von Neals Beitrag anzeigen
    Wenn der ADS Router mehrere Routen mit gleicher AMS Net ID findet, kann er diese natürlich nicht eindeutig einer IP-Adresse zuordnen.
    Du könntest ja mal deine Registry-Einträge auf dem Zielsystem posten...
    ads_route_linux.pngads_route_mac.png

    Zitat Zitat von Neals Beitrag anzeigen
    Eigenartig finde ich auch, das bei mit der ADS-Interpreter von Wireshark zu deinen ADS Requests immer "Malformed Packet: AMS" ausgibt.
    Das ist "normal". Zumal wie er das wie du selbst schreibst _immer_ macht. Ist ein Bug in Wireshark. Habe ich hier im Forum aber auch geschrieben:
    http://www.sps-forum.de/showthread.p...um-Daten-Frame Post 5.
    https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6710

    Zitat Zitat von Neals Beitrag anzeigen
    Außerdem sind die Frames bei Mac und Linux 104 Bytes lang, bei Windows ist der Frame nur 92 Bytes lang.
    <Sarkasmus>Nicht, dass ich das selbst nicht schon bemerkt hätte.</Sarkasmus>
    Evtl. habe ich das hier nicht erwähnt sondern ging nur per PN an drfunfrock. Wir waren uns dabei aber eigentlich einig, dass solange das ADS-Paket OK ist der Rest vom TCP-Paket zweitrangig sein sollte.
    Habe ich doch aber gestern Nacht auch noch selbst (nach langem im Nebel stochern) entschlüsselt bekommen und hier geschrieben.
    Liegt an RFC1323. Hab ich aber sowohl am Mac und am Linux-PC deaktiviert und brachte auch nichts neues.

    Zitat Zitat von Neals Beitrag anzeigen
    ADS Requests:
    0000200000000 50778ca0101 2103 0aff020f0101 2103 01000400000000000000000001000000 Windows
    0000200000000 50778ca0101 2103 c0a8b21b0101 2103 01000400000000000000000001000000 Mac
    0000200000000 50778ca0101 2103 c0a8b21b0101 2103 01000400000000000000000001000000 Linux

    Daran sehe ich doch schon, das die AMS Net ID von Mac und Linux gleich ist..... also kann es garnicht funktionieren.
    Stichwort Copy und Paste Error. Mehr sage ich dazu nicht.

    Danke für die Hinweise. Wenn ich noch was am CX so hinbiegen kann, dass er meine Mac mag bin ich offen für Ideen.

    Gruß ohm200x
    --
    ohm200x

  3. #23
    Registriert seit
    27.11.2009
    Ort
    BW - Ecke Ulm
    Beiträge
    438
    Danke
    135
    Erhielt 36 Danke für 33 Beiträge

    Standard

    Moin,

    neues von der Front der Basher (von mir), damit der Thread nicht so offen endet.

    Der letzte Stromausfall war hilfreich. Wie es scheint muss man den CX neustarten, damit die ADS Routen übernommen werden.
    <bash>Wie blöd ist das den bei einer 24/7-Anlage?</bash>
    Kann das jemand bestätigen?

    Jedenfalls kann ich nun mit dem Python client von drfrunfrock von Linux aus auf meinen CX zugreifen.
    Vom Mac aus geht's noch nicht so recht aber das sei mal das kleinere Problem. Das Target-System für meine Anwendung ist später Linux.

    Jetzt muss ich dann nur noch ADS weiter studieren um an die richtigen Werte zu wie Idx-Group und Offset zu kommen und zu verstehen was ich damit alles anstellen kann.

    Nochmals danke an drfunfrock für seinen Client.

    Gruß ohm200x
    --
    ohm200x

  4. #24
    drfunfrock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard

    Zitat Zitat von ohm200x Beitrag anzeigen
    Moin,

    Jetzt muss ich dann nur noch ADS weiter studieren um an die richtigen Werte zu wie Idx-Group und Offset zu kommen und zu verstehen was ich damit alles anstellen kann.

    Nochmals danke an drfunfrock für seinen Client.

    Gruß ohm200x

    Hol dir die Dokus zu ADS und TwinCat. Die IDX ist festgelegt nach Variablenart und der Offset einfach den den du selbst festlegst.

    Ich hab den Client weiterentwickelt, aber der bleibt zu, bis es vielleicht mal mehr Beteiligung gibt.
    Geändert von drfunfrock (13.06.2012 um 23:33 Uhr)

  5. #25
    Registriert seit
    27.11.2009
    Ort
    BW - Ecke Ulm
    Beiträge
    438
    Danke
    135
    Erhielt 36 Danke für 33 Beiträge

    Standard

    Hi,

    Zitat Zitat von drfunfrock Beitrag anzeigen
    Hol dir die Dokus zu ADS und TwinCat.
    gibt's neben dem Infosystem noch mehr / andere Doku?

    %< --- cut rest --- >%

    Gruß ohm200x
    --
    ohm200x

  6. #26
    drfunfrock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

  7. #27
    Registriert seit
    23.10.2009
    Beiträge
    22
    Danke
    0
    Erhielt 7 Danke für 5 Beiträge

    Standard

    So, dann krame ich den alten Thread mal raus - um mich zu bedanken. Bei drfunrock und ohm200x für die geleistete Arbeit. Ich finde es super, wie ihr die ADS via Python-Anstrengungen hier offen diskutiert und dokumentiert habt, anstatt mangels weiterer Interessenten einfach unter euch zu bleiben! Weil ich sonst vermutlich nicht ansatzweise die Chance hätte, mein kleines Projekt hier weiterzuführen.

    Noch kann ich nichts Konkretes zum eigentlichen Thema beisteuern, weil ich den Punkt ADS - mit obiger Grundlage - jetzt erst angehe. Aber vielleicht ist das, was ich vorhabe, ja auch für andere interessant. Ich versuche also mal einen Überblick über den Plan und die schon gelösten Punkte zu geben.

    Ich habe im Keller - welch Überraschung - eine CX fürs Eigenheim. Und einen Wechselrichter von SMA, dessen Leistung ich gerne in der Küche anzeigen möchte. Dafür gibt es zwar Produkte von SMA, aber die sind mir zu speziell. Zumal ich es sexy fände, auch die aktuell gemessene Leistung des Zweirichtungszählers mit anzuzeigen (also die tatsächlich noch verfügbare Kapazität).

    Hier (http://www.photovoltaikforum.com/dat...le-t92498.html) wird berichtet, wie ein Amazon Kindle für die Visu genutzt wird, zusammen mit einem separaten kleinen Linux-Server im Netz, etwa so:

    Wechselrichter -> Ethernet -> Linux-Server (Vorverarbeitung) -> Kindle

    Die Grundidee stammt von Matthew Petroff, der auf die Art die Wettervorhersage visualisiert hat (http://www.mpetroff.net/archives/201...ather-display/). Er nutzt ein SVG mit Platzhaltern, die skriptbasiert (Python) durch die tatsächlichen Werte der Vorhersage ersetzt werden. Da das Kindle keine SVGs anzeigen kann, konvertiert er es in PNG und holt das dann aufs Kindle. Sieht sehr schick aus, wie ich finde.

    Bei mir soll die Informationskette so ausschauen:


    Wechselrichter -> Ethernet ---+
    +-> SPS -> Kindle
    Stromzähler -> Infrarot
    /RS485-+

    Also:
    - ohne zusätzlichen Linux-Server, die Vorverarbeitung soll direkt auf dem Kindle laufen (erledigt)
    - mit Abfrage des Stromzählers durch die Beckhoff (offen, Infos zu Bastelhardware und Protokoll liegen vor)
    - Abfrage der Werte von der CX aus Python heraus (offen)

    Den letzten Punkt habe ich mir gerade vorgenommen und bin in dem Zuge auf eure Diskussion hier gestoßen. Von Python habe ich noch keine Erfahrung, es wird also wohl etwas dauern, bis ich Erfolge vermelden kann. Aber mit eurer Vorarbeit scheint eine Lösung zumindest machbar. Ich halte euch auf dem Laufenden, falls es euch interessiert.

    Grüße,
    mattsches

  8. #28
    Registriert seit
    31.07.2014
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich nutze mal den Thread um ein bischen Webung für meine ADS Bibliothek für machen. Im Gegensatz zu der hier gezeigten Implementierung steht sie unter der LGPL. Download hier: https://github.com/simonwaid/adshli

    Ich war vor einiger Zeit auf der Suche nach etwas um meine Python GUI mit der Twincat SPS verbinden zu können. Die in diesem Thread gezeigte Implementierung schien die einzige existierende Lösung zu sein. Allerdings war sie ungeeignet für mein Projekt, da der Author keine Lizenz zur Benutzung erteilt. Auf eine PN erhielt ich keine Antwort, also entstand kurzerhand eine neue Bibliothek. Diese steht unter der LGPL, ist also nutzbar.

    Abgesehen davon möchte ich auf auf eine Python ADS Bibliothek, welche die Beckhoff ADS DLL verwendet aufmerksam machen. Siehe hier: https://pypi.python.org/pypi/pyads.

  9. #29
    Registriert seit
    26.01.2013
    Ort
    Hannover
    Beiträge
    98
    Danke
    2
    Erhielt 15 Danke für 10 Beiträge

    Standard

    Hallo GreenChili,
    vielen Dank, dass du deine Lib öffentlich gemacht hast. Ich habe am Wochenende mal versucht, eine ADS-Verbindung zwischen meiner SPS und einem RaspberryPi herzustellen. Leider noch ohne Erfolg.
    Könnte das Problem sein, dass ich auf dem Pi kein TwinCat habe und deswegen keine AMSNetId und auch keine Routes? Und welchen Port nehme ich auf dem Pi?
    Ich bekomme immer einen Timeout-Fehler. Ich kann im Netzwerk irgendwie auch noch nicht den Verbindungsaufbau sehen. Hast du eine Idee?
    Gruß
    Holger

  10. #30
    Registriert seit
    27.11.2009
    Ort
    BW - Ecke Ulm
    Beiträge
    438
    Danke
    135
    Erhielt 36 Danke für 33 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,

    Zitat Zitat von NieZuSpaet Beitrag anzeigen
    ... Ich habe am Wochenende mal versucht, eine ADS-Verbindung zwischen meiner SPS und einem RaspberryPi herzustellen. Leider noch ohne Erfolg.
    Könnte das Problem sein, dass ich auf dem Pi kein TwinCat habe und deswegen keine AMSNetId und auch keine Routes?
    TwinCat wird nicht benötigt. Ich hatte es dann wie weiter oben geschrieben auch noch irgendwie hinbekommen. Allerdings nicht mehr weiter verfolgt.
    Bin gerade an was anderem in der Richtung dran.

    Was du machen musst ist der SPS eine Route zu deinem PI geben. Das geht mit dem TcAmsRemoteMgr (\Hard Disk\System\).
    IP eingeben, eine AMSNetid erfinden (<IP vom PI>.1.1) und gut.

    Zitat Zitat von NieZuSpaet Beitrag anzeigen
    Und welchen Port nehme ich auf dem Pi?
    Was meinst du mit Port?
    In Richtung SPS hast du AFAIR zwei Optionen. Port 300 ist der IO Teil, also quasi der Buskoppler der von TwinCAT auch via ADS ausgelesen wird.
    Was du denke ich eher möchtest ist Port 801 - das ist die (erste) SPS Runtime

    Zitat Zitat von NieZuSpaet Beitrag anzeigen
    Ich bekomme immer einen Timeout-Fehler. Ich kann im Netzwerk irgendwie auch noch nicht den Verbindungsaufbau sehen. Hast du eine Idee?
    Check mal die oben genannten Punkte. Falls das nicht geht könntest mal mit tcpdump auf dem PI schauen, (ob) was rein kommt (das hier hilft mir meist). Im Netzwerk selbst wirst du mit Wireshark oder so nichts sehen, da du höchstwahrscheinlich ein Netzwerk mit nem Switch hast.

    Hoffe das hilft.

    Gruß ohm200x
    --
    ohm200x

Ähnliche Themen

  1. Matlab Code auf S7 implementieren
    Von T-Rex22 im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 22.11.2011, 09:07
  2. Offenes ADS Protokoll
    Von s.murauer im Forum CODESYS und IEC61131
    Antworten: 17
    Letzter Beitrag: 19.09.2011, 07:50
  3. ADS Protokoll in Visual Studio 08
    Von td97 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 17.03.2009, 21:07
  4. SM331 implementieren HILFE
    Von BOBZ im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.01.2007, 13:52
  5. Beckhoff ADS-Protokoll
    Von drfunfrock im Forum Feldbusse
    Antworten: 5
    Letzter Beitrag: 01.07.2005, 17:01

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •