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

Seite 20 von 27 ErsteErste ... 101819202122 ... LetzteLetzte
Ergebnis 191 bis 200 von 262

Thema: Wireshark Plugin für S7-Protokoll

  1. #191
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.073
    Danke
    128
    Erhielt 1.472 Danke für 1.084 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von juergi Beitrag anzeigen
    mir ist noch nicht klar, worüber die Sym-CRC bei der S7-1500 berechnet wird. Und ob diese Sym-CRC Berechnung auch für die S7-1500 unterstützt wird.
    Aus einem TIA Projekt kann ich zum Beispiel folgendes herausziehen:
    <dataBlock name="DB6" logicalAddress="%DB6" supportsAddressingByOffset="false" subtype="DB" CRC="0xD4FD3326">
    ...
    <dataTag name="Array_Byte" offset="32.0" datatype="Array[0..10] of Byte" id="60" lid="22" rid="0x02010002" />
    ...
    <dataTag name="IEC_COUNTER" offset="148.0" datatype="IEC_COUNTER" id="89" lid="67" rid="0x0200001E" subPartIndex="-5" />
    ...
    <dataTag name="IEC_LTIMER" offset="190.0" datatype="IEC_LTIMER" id="92" lid="70" rid="0x02000044" subPartIndex="-8" />

    In einem Wireshark-Mitschnitt, einer Abfrage der Daten aus DB6 sehe ich unter anderem:
    Item Address: SYM-CRC=8db85e63, LID=DB6.22

    Weiß jemand, ob und wie sich aus den Daten oben berechnen lässt?
    Bei der 1200 hätte ich gesagt, mit LID=22 wird die Variable "Array_Byte" gelesen. D.h du müsstest die CRC aus dem Symbol "Array_Byte" bilden. Wenn ich das so mache wie für die 1200 kommt aber ein anderer Wert heraus.
    Was für Daten werden denn mit deinem abgehörten CRC/LID gelesen?

    Bei der 1200 kann man überhaupt kein komplettes Array lesen, zumindest nicht mit einem Basic-Panel, dort lassen sich nur einzelne Array-Elemente lesen. In dem Fall folgt nach der LID noch der Array-Index. Als die symbolische Adressierung noch in den 0x32er Telegrammen verpackt war, gab es pro LID zusätzlich ein Byte mit Flags, die kennzeichneten auf welchen LID-Typ zugegriffen wurde. Man hat aber wohl festgestellt dass die Kombination aus CRC und LID schon eindeutig ist und dieses Flag-Byte dann entfernt. Denn über die LID weiß der Partner schon dass es sich in einem Array, Struct oder sonstiges befindet.

    Zitat Zitat von juergi Beitrag anzeigen
    BTW: Mit dem .xml File und dem Wireshark-Mitschnitt habe ich die im S/COMM-Plus Wireshark Plugin noch unbekannten Typen
    0x10 = IEC_COUNTER
    und
    0x11 = IEC_LTIMER
    gefunden.
    a) Was für ein xml File?
    b) Wenn ich in einem DB eine Variable von Typ "IEC_COUNTER" anlege, ist das eine Struktur. Was liest das HMI wenn es ein Typ "IEC_COUNTER" liest? Alle Elemente, oder nur ein einziges? Bei TIA-V12 kann ich so eine Variable überhaupt nicht anlegen.

    Mir steht keine 1500 zum Testen zur Verfügung, falls das alles 1500-spezifisch sein sollte.

  2. #192
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.073
    Danke
    128
    Erhielt 1.472 Danke für 1.084 Beiträge

    Standard

    Ich habe mir das mit der CRC-Berechnung auch bei der 1200er angesehen.
    Bisher habe ich mir das entweder bei Merkervariablen oder bei Variablen dir direkt in einem DB liegen (z.B. DB99.VAR) angesehen. In den beiden Fällen wird die CRC einzig und allein aus dem Symbol berechnet.
    Liegt die Variable aber beispielsweise innerhalb einer Struktur eines DBs, z.B. DB.STRUCT.VAR, dann gibt es eine andere CRC.

    Naheliegend wäre es die aus dem kompletten Symbol zu bilden, also "STRUCT.VAR" mit dem "." als Trennzeichen. Passt nicht. Ein "/" als Trennzeichen probiert, passt auch nicht.

    Kleines Such-Skript geschrieben:
    Code:
    public static void SucheCrcTrenner()
    {
        bool found = false;
        byte[] bytes1 = Encoding.ASCII.GetBytes("VAR_STRUCT1");
        byte[] bytes2 = Encoding.ASCII.GetBytes("VAR_STRUCT1_INT");
        byte[] delim = { 0x00 };
    
        byte[] combined = bytes1.Concat(delim).Concat(bytes2).ToArray();
    
        int delim_pos = bytes1.Length;
    
        string search_crc = "b1c00672";
        string crc;
    
        search_crc = search_crc.ToUpper();
    
        for (byte i = 0; i < 255; i++)
        {
            combined[delim_pos] = i;
            crc = getcrc(combined).ToString("X").PadLeft(8, '0');
            if (crc == search_crc)
            {
                Console.WriteLine("Gefunden! Trennzeichen = " + i);
                found = true;
                break;
            }
        }
        if (!found)
        {
            Console.WriteLine("Nicht gefunden");
        }
        Console.ReadKey();
    }
    Das Trennzeichen ist 0x09.

    D.h. bei einer 1200 gilt für eine Variable im DB: DB.STRUCT.VAR, die CRC über den Namen der "STRUCT" plus 0x09 plus Namen der "VAR" zu bilden.
    Siemens hätte so schön ein "." nehmen können, aber das wäre wohl zu naheliegend gewesen.

  3. #193
    Registriert seit
    08.12.2004
    Beiträge
    94
    Danke
    2
    Erhielt 16 Danke für 14 Beiträge

    Standard

    @Thomas_v2.1,

    hallo Thomas, ich setze dein Plugin seit einiger Zeit ein und es hat mir immer gute Dienste geleistet.
    Danke schön für dieses hervorragende Tool.

    Verbesserungswunscht, bezüglich nicht erkanntem "AnyPointer":
    Es gibt zum datensatz Les4en/Schreiben "erweiterte AnyPojnter" evtl ist dir das bisher nicht bekannt.
    Eben wollte ich was untersuchen, dabei kam diese "Schwäche" wieder mal zum Vorschein.
    Daher sende ich dir Info, womit du das Implementieren kannst:

    Ich versuch ert mal mit einem kommentierten HexDump:

    Datensatz schreiben, z.B. an eine Profibus Teilnehmer

    PG --> CPU 32 01 00 00 04 00 00 0e 00 08
    05 01 Write, 1 Tag
    12 0a
    10 03 00 04 00 ff 01 00 07 fb
    ## ##### ##### ## #####--------- Logische Adresse
    | | | +------------------ Kennung für Datensatz
    | | +----------------------- Datensatz Nummer
    | +--------------------------- Anzahl Elemente
    +--------------------------------- Element Typ Char (so liest der simatic Manager)
    ff 09 00 04 Datenkennung ... ganz normal
    08 00 fd e8 Nutzdaten

    CPU --> PG 32 03 00 00 04 00 00 02 00 01 00 00 Antwort
    #####--- Retval OK
    05 01 ff Alles OK.


    Datensatz lesen

    PG --> CPU 32 01 00 00 05 00 00 0e 00 00
    04 01 Lesen, 1 Tag
    12 0a
    10 03 00 44 00 ff 01 00 07 fb
    ## ##### ##### ## #####--------- Logische Adresse
    | | | +------------------ Kennung für Datensatz
    | | +----------------------- Datensatz Nummer
    | +--------------------------- Anzahl Elemente
    +--------------------------------- Element Typ Char (so liest der simatic Manager)


    CPU --> PG 32 03 00 00 05 00 00 02 00 48 00 00
    04 01 Lesen, 1 Tag
    ff 04 02 20 Nutzdaten Zählung in Bit
    08 00 fd e8 00 00 ... Nutzdaten ...


    Das kann jede normale S7-CPU, sowohl für lokal 300er Module,
    oder für Profibus, bzw. Profinet Module, bzw. deren datensätze.

    Der "AnyPointer" siehr wie folgt aus:

    10 03 nn nn dd dd 01 00 aa aa

    10 ist die normale Kennung
    03 ist der Elementtyp, evtl. gehen auch andere, aber 03 ist üblich.
    nn nn ist die Anzahl der Elemente, überlicherweise char, d.h. Bytes
    dd dd Datensatz Nummer
    01 ist die Kennung für Datensatz bei disem "speziellen AnyPointer"
    aa aa ist die logische Adresse für Eingänge), bei Ausgängen wird 0x8000
    aufadddiert, oder umgekehrt, genau wie beim SFB52

    Das war es schon, Implementierung sollte kein großes Problem sein.


    mfG. klaly






    Geändert von klaly (22.10.2014 um 12:17 Uhr)

  4. #194
    Registriert seit
    08.12.2004
    Beiträge
    94
    Danke
    2
    Erhielt 16 Danke für 14 Beiträge

    Standard

    So ein "Mist",

    ich krieg die Formatierung im Hexdump nicht hin.
    Im Edit Feld sieht es immer gut aus, dann wirft das Forum aber scheinbar die "überflüssigen"
    Leerzeichen wieder raus und es siehr "blöd" aus.

    Ich bitte um Entschuldigung.
    Es ist aber hoffentlich zu erkennen was die Felder bedeuten.

    mfG. klaly

  5. #195
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.073
    Danke
    128
    Erhielt 1.472 Danke für 1.084 Beiträge

    Standard

    Hi,
    womit werden denn solche Telegramme erzeugt? Ich würde mir das gerne mal selber ansehen wenn möglich. Oder falls du eine Logdatei hast, wäre es nicht schlecht wenn du diese mal anhängst.

    Nach dem was du oben geschrieben hast, sehe ich keinen Anhaltspunkt um den Aufbau vom S7-ANY zu unterscheiden. Die Kennungswerte für eine Variablenadresse sind demnach identisch:
    0x12 = Variablenspezifikation
    0x0a = Länge der folgenden Spezifikation in Bytes
    0x10 = Syntax-ID, 0x10 steht für S7-Any-Pointer

    Bei allem was danach folgt gehe ich davon aus dass es sich um einen S7-Any-Pointer handelt.

    Alles andere was ich bisher an Adressformaten gesehen habe, geben auch eine andere Syntax-ID mit.

  6. #196
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 374 Danke für 354 Beiträge

    Standard

    .
    Zitat Zitat von klaly Beitrag anzeigen
    So ein "Mist",

    ich krieg die Formatierung im Hexdump nicht hin.
    Im Edit Feld sieht es immer gut aus, dann wirft das Forum aber scheinbar die "überflüssigen"
    Leerzeichen wieder raus und es siehr "blöd" aus.

    Ich bitte um Entschuldigung.
    Es ist aber hoffentlich zu erkennen was die Felder bedeuten.

    mfG. klaly

    Vielleicht hilft dir die Benutzung der "CodeTags (#)" mit dem Doppelkreuz bei deiner Antwort weiter.
    .
    kind regards
    SoftMachine

  7. #197
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.073
    Danke
    128
    Erhielt 1.472 Danke für 1.084 Beiträge

    Standard

    So wie es aussieht müsste ich die Bereichskennung 0x01 an der Position, an der bei einer normalen S7-Adresse z.B. 0x84 für den Bereich Datenbausteine steht, ergänzen. Dort dürfte momentan "unknown area" angezeigt werden.
    Dann wäre der Aufbau prinzipiell gleich mit den S7-Any Pointer, wenn ich annehme dass die Adresse ebenfalls 3 und nicht nur 2 Bytes beinhaltet. Die Datenbausteinnummer wäre in den Fall die Datensatznummer (Dataset number).

    Mach doch mal einen Vorschlag wie ich die Adresse in Textform in Wireshark darstellen soll.
    Also z.B.:
    Code:
    Item[1]: (Dataset 256 Address 2043 CHAR 68)
    - Variable specification: 0x12
    - Length of following address specification: 10
    - Syntax Id: S7ANY (0x10)
    - Transport size: CHAR (3)
    - Length: 68
    - Dataset number: 256
    - Area: Dataset (0x01)
    - Address: 0x0007fb
    Ich weiß überhaupt nicht wozu diese Adressierung benutzt wird.

    Die Antworttelegramme sollten doch schon korrekt dekodiert werden können oder?

  8. #198
    Registriert seit
    08.12.2004
    Beiträge
    94
    Danke
    2
    Erhielt 16 Danke für 14 Beiträge

    Standard

    Hi SoftMachine,

    danke. Leider schreibe ich so selten im Forum, so dass ich diese "Feinheiten" leider nicht kannte.
    Ich hatte meinen Text "schön" auf Courier umgestellt, schön formatier, abgesvhickt. Hmm, ...
    Nochmal edititiert, das gleiche wieder, dann hatte ich keine Lust mehr.

    mfG. klaly

  9. #199
    Registriert seit
    08.12.2004
    Beiträge
    94
    Danke
    2
    Erhielt 16 Danke für 14 Beiträge

    Standard

    @Thomas_v2.1,

    du bekommst solche Telegramme, wenn du im HW-Konfigurator in der online Ansicht auf Profibus DP-V1 oder Profinet Teilnehmer, bzw. der Untereigenschaften klickst. Da werden dann nicht nur SZLs, sondern auch Datensätze gelesen.

    Mal schaun was ich da zusammen klicken kann, dann schneide ich mit Wireshark mal ein paar Telegramme mit.

    Oder wenn du bei einem lokal gesteckten Analogmodul den Diagnosestatus sehen willst, dann werden da auch Datensätze gelesen.

    Das war jetzt gar nicht so einfach zu konstruieren.
    Zuerst wollte ich die Drahtbrucherkennung eines Ananlogmoduls, z.B. 332-5HD01 dafür her nehmen.
    Aber da wird von der Onlineansicht des HW-Konfigurator, nur eine entsprechende SZL gelesen, welche die CPU dann
    in eine DS-Lesen Anfrage am Rückwandbus umsetzt. Das sind die Datensätze 1 und 2, welche z.B. auch mit dem SFB52 gelsen werden können.

    War wohl nix.
    Dann habe ich es mit einem CP341 versucht, da geht es.
    Der muss z.B. lokal an der CPU hängen, ginge aber auch über Profibuis ET200M über Profinet auch ET200M.
    Wenn du in der HW-Konfig die Online Ansicht auf machst und dann auf den CP341 doppelklickst, dann bekommst du den
    Baugruppenzustand des CP341, da steht auch sein Name drin. Diesen wird über DS-Lesen geholt.

    siehe folgenden Screenshot und Wireshark Aufzeichnung.
    Ich vermute, das Hochladen der Anhänge macht mir Probleme (Firefox), mal schaun.

    mfG. klaly

  10. #200
    Registriert seit
    08.12.2004
    Beiträge
    94
    Danke
    2
    Erhielt 16 Danke für 14 Beiträge

    Standard

    DS-Read_CP341.JPG
    Screenshot der Onlineansicht.
    Zitieren Zitieren Anhang 1 (Bild) zu Datensatz lesen schreiben.  

Ähnliche Themen

  1. Wireshark Auszüge von Onlinebeobachtungen
    Von Jochen Kühner im Forum Simatic
    Antworten: 40
    Letzter Beitrag: 25.01.2011, 15:44
  2. Wireshark 1.2.0 ohne AMS.ADS?
    Von Neals im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 08.07.2009, 21:29
  3. Wireshark als Sender
    Von Tapio Bearking im Forum PC- und Netzwerktechnik
    Antworten: 2
    Letzter Beitrag: 08.07.2008, 11:47
  4. AK- Protokoll
    Von borromeus im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 27.02.2007, 17:30
  5. S7-Protokoll 2
    Von Zapot im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 21.08.2006, 09:37

Lesezeichen

Berechtigungen

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