Ich bräuchte für das alte S7-Protokoll vielleicht mal etwas Input.
Es gibt nämlich noch eine Kommunikationsart die ich bisher noch nie im Einsatz hatte, und zwar USEND/URECV. Dabei werden Daten ohne Bestätigung vom Partner verschickt. Auf jeden Fall ist mir jetzt, und eigentlich auch schon bei den letzten Änderungen bezüglich NC-Funktionen, sowie des Datensatz-Routings, aufgefallen, dass meine bisherigen Annahmen zum Aufbau des Parameterteils bei den sog. "Userdata" Telegrammen nicht so ganz korrekt waren.
Bisher war ich davon ausgegangen, dass die ersten 3 Bytes fest sind (000112), dann folgt ein Byte für eine Länge, dann ein Byte mit der Methode (Request/Response/Push) und ein Byte welches ich in zwei Nibbles aufgeteilt habe. Wovon das Linke noch einmal für Request/Response stand, und das rechte für die Funktionsgruppe. Das passte am Anfang auch recht gut zusammen.
Nur bei eben den letzten Änderungen, passt das mit den beiden Nibbles nicht zusammen. Diese würde ich einfach zu einem Byte für die Funktion zusammenführen.
Das Byte davor mit 0x11 oder 0x12 was ich vorher als Request/Response angenommen habe, könnte auch vlt. codiert bedeuten, ob am Ende des Parameterteils Dataunit-Ref, Lastdataunit, Errorcode vorhanden sind. Aber warum dann die Längenangabe in Byte 3. Und bei USEND/URECV passt es dann auch nicht mehr, weil dort eine 0x13 steht, und anschließend noch die R_ID von den Kommunikations (S)FBs folgt.
Und beispielsweise bei Betriebszustandsübergängen wie Stop/Run ist der Aufbau komplett anders, weil der Kopf anders ist. Das war mir bisher überhaupt noch nicht aufgefallen, da ich das nur versucht habe an den anderen Bytes festzumachen. Das muss ich auf jeden Fall auch noch korrigieren.
Ich habe die Varianten im PDF im Anhang zusammengefasst. Vielleicht hat ja jemand noch eine Idee, z.B,
@Rainer Hönle?