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

Seite 17 von 27 ErsteErste ... 71516171819 ... LetzteLetzte
Ergebnis 161 bis 170 von 262

Thema: Wireshark Plugin für S7-Protokoll

  1. #161
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.645
    Danke
    208
    Erhielt 409 Danke für 328 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier eine Version für MacOS Wireshark (64 Bit version 1.12)
    Angehängte Dateien Angehängte Dateien
    ---------------------------------------------
    Jochen Kühner
    http://jfk-solutions.de/ - Softwareentwicklung, Programmierung, ...
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    IPhoneS7 - Inbetriebnahme Tool fürs IPhone (VarTab, Baustein-, PLC-Status)
    Zitieren Zitieren MacOs Version  

  2. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    Thomas_v2.1 (15.08.2014)

  3. #162
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.086
    Danke
    128
    Erhielt 1.481 Danke für 1.090 Beiträge

    Standard

    Der s7comm Dissector ist jetzt im offiziellen Wireshark Code-Repository. Ich denke mal dass er bei einem der nächsten Releases dabei sein wird.

    An der grundsätzlichen Darstellung habe ich nur Kleinigkeiten geändert (es hat sich niemand beschwert). Ich musste aber noch einige Dinge ändern damit er durch den Code-Review Prozess kommt.
    So sind jetzt für alle Felder die aufgeschlüsselt werden Filtermöglichkeiten vorhanden. Wenn man also nach einem bestimmten Feldwert suchen will, klickt man mit der rechten Maustaste auf das Feld und wählt "Apply as Filter".

    Das s7comm-plus Plugin (für 1200/1500) ist noch nicht soweit dass man es einreichen könnte.

  4. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Jochen Kühner (05.09.2014)

  5. #163
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.086
    Danke
    128
    Erhielt 1.481 Danke für 1.090 Beiträge

    Standard

    Ich habe mir eben mal angesehen wie ein HMI Daten aus einer 1200er über s7comm-plus ausliest.
    Im Antworttelegramm gibt es ein Byte für die diversen in der SPS vorhandenen Datentypen.
    Alles mehr oder weniger normal, die Daten werden in der Network Byte Order übertragen.

    Bis auf Datentyp DInt, also ein vorzeichenbehafteter 32 Bit Wert. Das scheint so exotisch zu sein dass Siemens sich da was ganz besonderes hat einfallen lassen. Ich schreibe mal ein paar Werte und die Bytes dazu:
    Code:
      -1 = 7f 00 00 00
      -2 = 7e 00 00 00
      -3 = 7d 00 00 00
      -4 = 7c 00 00 00
      +1 = 01 00 00 00
      +2 = 02 00 00 00
     +15 = 0f 00 00 00
     +16 = 10 00 00 00
     +32 = 20 00 00 00
     +48 = 30 00 00 00
     +63 = 3f 00 00 00
     +64 = 80 40 00 00
    
    +126 = 80 7e 00 00
    +127 = 80 7f 00 00
    +128 = 81 00 00 00
    +129 = 81 01 00 00
    
    +254 = 81 7e 00 00
    +255 = 81 7f 00 00
    +256 = 82 00 00 00
    
    -127 = ff 01 00 00
    -128 = ff 00 00 00
    -129 = fe 7f 00 00
    
    123456789 = ba ef 9a 15
    Hat da jemand eine Erklärung wie sich so ein Format nennt, und welchen Grund es hat nur bei diesem Datentyp eine Ausnahme vom Übertragungsformat von allen anderen Daten zu machen?

  6. #164
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.645
    Danke
    208
    Erhielt 409 Danke für 328 Beiträge

    Standard

    Vielleicht gehts da um bytes zu sparen, d.h. Immer wenn das höchste bit im byte sitzt, folgt noch eins...
    ---------------------------------------------
    Jochen Kühner
    http://jfk-solutions.de/ - Softwareentwicklung, Programmierung, ...
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    IPhoneS7 - Inbetriebnahme Tool fürs IPhone (VarTab, Baustein-, PLC-Status)

  7. #165
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.645
    Danke
    208
    Erhielt 409 Danke für 328 Beiträge

    Standard

    d.h. 8 Bit => überlaufbyte
    7 Bit => Negativbit

    das 7te bit ist nur im ersten Byte das negativ Bit! ansonsten kann jedes byte 2^7 darstellen, wenn der Wert größer wird, wird das bit bei 2^8 gesetzt und dieses byte steht nun für die größeren werte...
    ---------------------------------------------
    Jochen Kühner
    http://jfk-solutions.de/ - Softwareentwicklung, Programmierung, ...
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    IPhoneS7 - Inbetriebnahme Tool fürs IPhone (VarTab, Baustein-, PLC-Status)

  8. #166
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.645
    Danke
    208
    Erhielt 409 Danke für 328 Beiträge

    Standard

    Code:
    private byte[] getBytes(int value)
    {
        var retVal = new List<byte>();
     
        var wr = value;
        if (value < 0)
            wr *= -1;
     
        var anzBytes = 1;
        
        var anzBits = (int)Math.Ceiling(Math.Log(wr) / Math.Log(2));
        if (anzBits > 6)
        {
            anzBytes++;
            anzBits -= 6;
        }
        while (anzBits > 7)
        {
            anzBytes++;
            anzBits -= 7;
        }
        
     
        for (int i = 1; i <= anzBytes; i++)
        {
            byte wert = 0;
     
            var fakt = (anzBytes - i)*7;
            var divisor = (int) Math.Pow(2, fakt);
            wert = (byte) (wr/divisor);
            wr = wr%divisor;
     
            if (value < 0)
            {
                if (i == anzBytes || wr == 0)
                    wert -= 1;
     
                wert = (byte) ~(wert);
                if (i == anzBytes)
                    wert &= 0x7F;
     
                if (i == 1)
                    wert |= 0x40;
            }
     
            if (i != anzBytes)
                wert |= 0x80;
     
     
            retVal.Add(wert);
        }
     
        return retVal.ToArray();
    }

    dieser Code funktioniert für deine Werte...
    Geändert von Jochen Kühner (11.09.2014 um 13:34 Uhr)
    ---------------------------------------------
    Jochen Kühner
    http://jfk-solutions.de/ - Softwareentwicklung, Programmierung, ...
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    IPhoneS7 - Inbetriebnahme Tool fürs IPhone (VarTab, Baustein-, PLC-Status)

  9. #167
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.086
    Danke
    128
    Erhielt 1.481 Danke für 1.090 Beiträge

    Standard

    Das ist doch total kaputt! Große Werte benötigen damit nämlich ein Byte mehr als normal. Dieses gepackte Format wird so wie es aussieht nur bei Ganzzahlen ab 4 Byte verwendet. Gleitkommazahlen werden nicht gepackt.
    Ob sich der ganze Aufwand mit der Sonderbehandlung gelohnt hat um ein paar Bytes einzusparen, was in Summe im einstelligen Prozentbereich der Gesamtdatenmenge betragen dürfte? Ich weiß ja nicht...

    In Rückwärtssrichtung sieht meine Wandlung jetzt so aus:
    Code:
    guint32 get_packed_int32(tvbuff_t *tvb, guint8 *number_of_bytes, gint32 *value, guint32 offset)
    {
        int n;
        gint32 val = 0;
        guint8 b;
    
        for (n = 1; n <= 4+1; n++) {        /* große Werte benötigen 5 Bytes */
            b = tvb_get_guint8(tvb, offset);
            offset += 1;
    
            if ((n == 1) && (b & 0x40)) {   /* Vorzeichen prüfen */
                b &= ~0x40;
                val = 0xffffffff;
                val <<= 6;
            } else {
                val <<= 7;
            }
            if (b & 0x80) {                 /* es folgt noch ein Byte */
                b &= ~0x80;
                val |= b;
            } else {                        /* alle Bytes gelesen */
                val |= b;
                break;
            }
        }
        *number_of_bytes = n;
        *value = val;
        return offset;
    }
    Konstanten im Programmcode der 1200er Steuerung werden auch in einem ganz speziellen Format gepackt, aber dort nochmal komplett anders.
    Bei Siemens scheint der Speicher wirklich teuer zu sein, wenn man an jeder Ecke solche Extrawürste braten musste.

  10. #168
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.645
    Danke
    208
    Erhielt 409 Danke für 328 Beiträge

    Standard

    Scheint doch in die Richtung zu gehen: http://en.wikipedia.org/wiki/Variable-length_quantity
    ---------------------------------------------
    Jochen Kühner
    http://jfk-solutions.de/ - Softwareentwicklung, Programmierung, ...
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    IPhoneS7 - Inbetriebnahme Tool fürs IPhone (VarTab, Baustein-, PLC-Status)

  11. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    Thomas_v2.1 (11.09.2014)

  12. #169
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.086
    Danke
    128
    Erhielt 1.481 Danke für 1.090 Beiträge

    Standard

    Was es nicht alles gibt, das ist genau das Format.

  13. #170
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.645
    Danke
    208
    Erhielt 409 Danke für 328 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also mein Algorythmus zum Codieren ist ja großer Müll... Aber hab im Moment keinen besseren Parat...
    ---------------------------------------------
    Jochen Kühner
    http://jfk-solutions.de/ - Softwareentwicklung, Programmierung, ...
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    IPhoneS7 - Inbetriebnahme Tool fürs IPhone (VarTab, Baustein-, PLC-Status)

Ä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
  •