DotNetSiemensPLCToolBoxLibrary (LibNoDave) Zugriff auf Dual-Port RAM / FB15

Zuviel Werbung?
-> Hier kostenlos registrieren
Da wird außer beim Verbindungsaufbau nichts verschlüsselt, jedes Telegramm enthält nur einen HMAC und der ist schnell berechnet.


Aber die Übertragung nicht als reiner Binärblob sondern als VLQ dauert sicher auch etwas mehr Zeit. Dazu kommt natürlich noch die Zeit, um das Symbol zu finden, da ja keine Speicheradresse angegeben wird. Es ist also insgesamt betrachtet schon ein größerer Aufwand seitens der SPS zu leisten als mit dem normalen S7comm-Protokoll.
 
Git es in C# auch ein Beispiel analog zu dem VC "[FONT=Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]TIA Demo", sprich ohne die Notwendigkeit eines TIA Projektes sondern nur Symbole von der Steuerung laden und anschließend lesen/schreiben?[/FONT]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wireshark der Kommunikation hab ich hier mal zusammengestellt.


Wie muss man sich den Symbolischen Zugriff vorstellen?

Symbole werden von der Steuerung geladen und bei der Anfrage wird dann wieder mit DB-Nummer und irgend einer Nummer (oder Hash) gearbeitet?
Muss ich also um Symbolisch eine Variable lesen zu können trotzdem die Adresse zunächst herausfinden? z.B. aus Variablentabelle Online oder TIA Projekt?

2019-11-02 15_30_04-Verbindungsaufbau+ReadIntSymbolVar.jpg
 
Jedes Symbol besitzt eine ID. Die Datenbausteine an sich sind wie eh und je mit einer festen Nummer versehen. Für den Zugriff musst du nun die DB Nummer und die IDs für den Zugriff zusammenhängen. Befindet sind ein Symbol innerhalb einer Struktur, dann muss der ganzen Pfad der IDs hintereinandergehängt werden. Die notwendigen IDs kannst du offline aus dem TIA-Portal Projekt auslesen, oder du kannst online den Variablenhaushalt der SPS browsen und daraus die komplette Symbolik mit diesen IDs auslesen. Das Browsen ist relativ aufwändig, weil du dich anhand der IDs im Baum entlang hangeln musst. Es lässt sich aber auch alles in Form von xml-Dateien herunterladen, ich habe mir aber noch nicht im Detail angesehen ob xml effektiver oder einfacher zu verarbeiten ist.

Wenn du "nicht optimierte" DBs verwendest, dann lässt sich über dieses Protokoll auch weiterhin über Absolutadressen lesen oder schreiben. Beim Browsen erhältst du die Absolutadressen ebenfalls.

Optional ist die Symbolprüfsumme. Ist dort ein Wert ungleich Null eingetragen, dann wird aus den Symbolnamen und dem Datentyp eine Prüfsumme gebildet was Fehlzugriffe abfangen soll. Ändert z.B. jemand in der SPS ein Symbolnamen von "TemperaturOben" zu "TemperaturUnten" so bleibt die ID gleiche, es ergibt sich jedoch eine andere Prüfsumme und ein HMI bekommt ohne Anpassungen keinen Zugriff mehr. Ist die Symbolprüfsumme = 0 dann ist diese Überprüfung nicht aktiv.
 
Hat von euch schon mal jemand IO-Link Daten über S7comm gelesen/geschrieben?

Hab mir das PCT-Tool vom Step7 angesehen und das kann vom PC Step7 Manager unter Zuhilfenahme der Hardwarekonfig mit IO-Link Master Baugruppen auf der ET200 kommunizieren.
Bei meinem Versuchsaufbau hab ich an der 840d sl (PLC 317) eine ET200 per ProfiBus und auf dieser nen Siemens 4-Port IO-Link Master.

Hab mal die Kommunikation mit geschrieben.

Anhang anzeigen S7-PCT_20200520.rar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mit IO-Link bisher noch nicht gearbeitet, darum sehe ich das auch zum ersten Mal. Ich glaube ich muss meine Unterteilung der Funktion im Protokoll in zwei Nibbles mal überdenken, das war mal schlüssig, aber mittlerweile passt das nur noch mit Ausnahmen.

Verbindungsaufbau geschieht zu TSAP 0xf402, ist das in irgendeiner Weise auf die IO-Link Baugruppe zurückzuführen?

Ansonsten gibt es wohl eine Initialisierungsfunktion, eine Funktion für den Datenaustausch und eine zum Abschließen. Kannst du dir irgendwo anzeigen lassen was für Werte dort ausgelesen werden? Ein einem Telegramm steht zumindest die MLFB einer Siemens Baugruppe. Gibt es zu IO-Link eine Protokollbeschreibung? Vielleicht hat das was man als Datenteil sieht schon etwas mit dem IO-Link Protokoll zu tun.
 
Ich hab noch mal nen schrieb von der Kommunikation gemacht un ein paar Screenshots der Übertragenen Werte.
Auch hab ich die IODD (Beschreibungsdatei IO-Link) auch mit rein gepackt.

Allgemein zu IO-Link:
vendorId = Eindeutige Herstellernummer (Global eindeutig)
deviceId = Eindeutige Gerätezuordnung (Herstellerspezifisch eindeutig)

Anhang anzeigen S7-PCT_20200521.rar
 
Das was da im Datenteil transportiert wird, scheint zumindest sehr speziell zu sein. Vom PCT werden öfters die gleichen Anfragen geschickt, aber in der Antwort kommt immer etwas anderes zurück. Das scheint auf den ersten Blick irgendwie zustandsabhängig zu sein was dort zurückkommt, oder es kann so etwas wie ein Verzeichnis gebrowst werden. Es gibt auch nur ganz selten mal eine Längenangabe vorab, der dann genau diese Anzahl an Bytes folgen.

Ich habe auch schon mal in die Spezifikation geschaut, auf den ersten Blick sehe ich da auch keine Anhaltspunkte. Mit wem spricht die PCT Software denn da, mit dem Master, oder gibt es auch Durchgriff auf die angeschlossenen Geräte?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, mit deinem letzten Logfile kommt man weiter, und es lässt sich ein Zusammenhang zur IO-Link Spezifikation herstellen.

Z.B. in #257 kommt die Seriennummer zurück. In #248 scheint dieser Datensatz vorselektiert zu werden, mit der 0x15 die sich am Ende findet. 0x15 ist laut Spec der Index für Serial-Number.

Passt auch mit #224 überein. Dort kommt der Produktname zurück, der in #216 mit 0x12 vorgewählt wird.

Es sieht so aus als müsste man vorher etwas anwählen und dann einen Ausführ-Befehl geben. Mal sehen ob der restliche Aufbau sich auch aus der IOL Spezifikation ableiten lässt.
 
Mit wem spricht die PCT Software denn da, mit dem Master, oder gibt es auch Durchgriff auf die angeschlossenen Geräte?
PCT Tool muss mit dem Druckschalter IFM reden, da nur er die ganzen actual Daten hat.

IO-Link verfügt über Zyklische Prozessdaten zur PLC und einen Asynchronen Kommunikationskanal. Dieser Asynchrone Kommunikationskanal kann auch aus der PLC heraus genutzt werden um weitere Daten auszulesen oder z.B. Schaltpunke einzustellen.

Aufbau:
PC -> 840dsl (10.172.26.192) -> Slot? (2->PLC, 4->NC, 5->CP, 6->HMI) -> DP (Adresse 2) -> ET200 (Adresse 3) -> IO-Link Master (Steckplatz 8 ) -> Port1 -> Druckschalter
 
Zuletzt bearbeitet:
Ich komme da auf keinen weiteren Zusammenhang mit der IO-Link Spezifikation. In der ist eine Angabe für den Aufbau zur Anfrage eines ISDU-Containers, das finde ich aber hier nirgends wieder. Wenn du selber mal suchen willst: Im PDF "IOL-Interface-Spec_10002_V112_Jul13.pdf" in Zeile 3946 ist der Aufbau, ab 4252 sind die festen Indizes aufgelistet.

Ich habe mit Wireshark einfach mal in den Daten herumgestochert um eine Struktur zu finden. Nur eine Längenangabe ist zu finden, die aber auch unterschiedliche Bedeutung zu haben scheint.
 

Anhänge

  • IOL-WS.pdf
    723,6 KB · Aufrufe: 9
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich komme da auf keinen weiteren Zusammenhang mit der IO-Link Spezifikation. In der ist eine Angabe für den Aufbau zur Anfrage eines ISDU-Containers, das finde ich aber hier nirgends wieder. Wenn du selber mal suchen willst: Im PDF "IOL-Interface-Spec_10002_V112_Jul13.pdf" in Zeile 3946 ist der Aufbau, ab 4252 sind die festen Indizes aufgelistet.

Ich habe mit Wireshark einfach mal in den Daten herumgestochert um eine Struktur zu finden. Nur eine Längenangabe ist zu finden, die aber auch unterschiedliche Bedeutung zu haben scheint.
Kann mir auch keinen Reim draus machen.

Hab noch mal ne Aufzeichnung gemacht. Diesmal hab ich in der Hardware Konfig den Parameter des IO-Link Masters auf "Ohne PCT" gestellt. Somit ist kein Download der Beschreibung erforderlich und andererseits kennt das PCT somit die Beschreibung nicht und zeigt nur die Empfangenen Parameter an.

Hab auch ein kleines Video vom PCT Tool mit angehängt.

Anhang anzeigen ohnePCT_S7-PCT_20200522.rar
 
Zuletzt bearbeitet:
Die Angaben Index und Subindex und den Wert in der Antwort findet sich wieder. Das entspricht aber nicht dem Aufbau aus dem IO-Link PDF. Es scheint, das ist eine Mixtur aus IO-Link Standard und einem Eigengewächs drumherum.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf IO-Link Ebene wird so wie ich das gesehen habe viel mit einzelnen Bits, Nibbles und Bytes und hantiert um das Ganze effektiv zu halten. Das macht vermutlich kein Sinn das alles bis auf Master-Ebene durchzureichen. In den Nutzdaten auf Netzwerkebene stehen an vielen Stellen in einem Byte nur entweder eine 1 oder eine 0. Ich habe auch schon vermutet ob dort vlt. einzelne Bits in einem ganzen Byte untergebracht werden. Da fehlt aktuell der Startpunkt an dem sich ansetzen lässt. Das einzige was man sicher finden kann sind die Indizes/Subindizes und die Daten der Antwort.
 
Du könntest vlt. mal eine Aufzeichnung erstellen bei der du nicht nur Gerät 1 anwählst, sondern z.B. mal die 4. Oder nacheinander in definierten Abständen 1, 2, 3, 4. Dann findet man vielleicht diese Zahl wieder.
 
Du könntest vlt. mal eine Aufzeichnung erstellen bei der du nicht nur Gerät 1 anwählst, sondern z.B. mal die 4. Oder nacheinander in definierten Abständen 1, 2, 3, 4. Dann findet man vielleicht diese Zahl wieder.
Mach ich am Montag oder Dienstag. Vorher komm ich nicht mehr an den Teststand. Sensor anstecken geht per VPN schlecht :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mir mal eben die Anleitung zu den Siemens IO-Link Funktionsbausteinen angesehen. Mit welchem Wert für ID würdest du diesen aufrufen, also mit der Konfiguration die im Logfile zu sehen ist.
Die 227 (0xe3) für die Siemens Kennung am Parameter CAP findet sich nämlich auch wieder.

Was auch mal interessant wäre, ist wenn du einen Parameter schreibst.
 
Mit welchem Wert für ID würdest du diesen aufrufen, also mit der Konfiguration die im Logfile zu sehen ist.
Die 227 (0xe3) für die Siemens Kennung am Parameter CAP findet sich nämlich auch wieder.

CAP:
Siemens spezifisch: 227
Andere Hersteller (Master): 0xB400 (-19456)

ID: Adresse in der HW-Konfig
2020-05-23 13_07_26-Window.png


Beispiel für den Sensorname Index 18
2020-05-23 13_03_17-Window.png 2020-05-23 13_03_32-Window.png


Was auch mal interessant wäre, ist wenn du einen Parameter schreibst.
Hab noch nicht rausgefunden ob das mit dem PCT Tool überhaupt geht. Soweit ich sehe kann man nur die IODD zum Master schreiben/lesen und online nur die Parameter betrachten.
 
Zuletzt bearbeitet:
Soweit ich das sehe wird die CAP häufig nur zur Anfrage/Antwort-Kennung verwendet.
Die ID der Anfangsadresse der Baugruppe finde zumindest ich so wie ich das aktuell sehe nicht wieder. Da stellt sich die Frage, was macht das PCT wenn du mehrere IO-Link Baugruppen an einer CPU hast, wie werden diese angesprochen? Da hilft nur ausprobieren, Adressen ändern, laden, abfragen und prüfen ob und wo sich etwas ändert.

So wie es aussieht ist die Interpretation einiger Daten von vorigen Daten abhängig (kontextsensitiv), was es nicht leichter macht das Protokoll nachzuvollziehen.
Auch wenn ich IO-Link selber bisher nicht verwendet habe, könnte ich es mir schon nützlich vorstellen, diverse Diagnosedaten von extern abfragen zu können ohne das SPS-Programm anfassen zu müssen. Darum ist es vielleicht sinnvoll, alles zu diesen Thema in einen separaten Thread zu verschieben, da es mit NC ja nicht mehr direkt etwas zu tun hat. Wobei das mit der S7-300 ja auch alles "Legacy" Hardware ist.
 
Zurück
Oben