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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: LibnoDave -> LastDataUnit in GetPlcBlocks

  1. #1
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, Ich hab grad von einem Nutzer meiner Bibliothek einen Wireshark Auszug erhalten, in dem er von der SPS die Liste der DBs laden will. Da bekomme Ich von der CPU eine Antwaort, aber in der ersten Antwort steht LastDataUnit auf 1. Im folgetelegramm ist es dann null, aber der Fehlercode 0x0a! LibNoDave gibt dann aber nicht den richtigen Wert zurück! Ist das denn normal das im 2ten telegramm gar keine Namen mehr enthalten sind?
    Angehängte Dateien Angehängte Dateien
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren LibnoDave -> LastDataUnit in GetPlcBlocks  

  2. #2
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Das kann bei manchen Steuerungen passieren, dass sie sagen "ich habe noch weitere Daten" und wenn diese dann angefragt werden die Antwort schicken "ich habe keine Daten". In diesem Fall den Fehler ab dem zweiten Paket einfach ignorieren und die Funktion ordentlich beenden.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Vielleicht ist da in der CPU Firmware ein Fehler, denn wenn nur ein einziger Block mehr vorhanden wäre würde dieser nicht mehr in die PDU passen, die wäre dann um 2 Bytes zu groß.

    Btw:
    Wertest du eigentlich die Block flags aus? Ich habe noch nicht rausgefunden was die bedeuten, ich habe bisher nur gesehen dass diese bei 300er und 400ern unterschiedlich sind, zumindest in einem Bit.

  4. #4
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Ist den der Fehler in der neusten libnodave behoben? Da wurde doch was wegen größeren Telegrammen eingebaut! Meiner Meinung nach hab Ich aber alle nötigen Änderungen in meine modifizierte Dll übernommen!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Also nach dem was in der 0.8.5.1 steht wird das nicht funktionieren.

    snip
    Code:
    while (p2.param[9]!=0) {
    	if (buffer!=NULL) memcpy(buffer+len,p2.udata,p2.udlen);
            dc->resultPointer=p2.udata;
            dc->_resultPointer=p2.udata;
            len+=p2.udlen;
    	printf("more data\n");
    	res=daveBuildAndSendPDU(dc, &p2,pam, sizeof(pam), NULL, 1);
    	if (res!=daveResOK) return res; 	// bugfix from Natalie Kather
    }
    Man müsste vor dem Abbruch prüfen ob zumindest eine gültige Antwort eingetroffen ist.

    Edit:
    sehe grad dass der Bugfix mit der 0.8.5 eingetrudelt ist, vorher fehlte die Zeile.
    Geändert von Thomas_v2.1 (24.02.2014 um 18:19 Uhr)

  6. #6
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Das hat nichts mit den größeren Telegrammen zu tun. Vielleicht prüft die CPU ja auch beim Pufferfüllen und stellt fest, dass nichts mehr reinpasst bzw. der nächste Eintrag über den Puffer hinaus gehen würde und schickt diesen dann ab mit dem Hinweis, dass weitere Daten vorhanden sind. Werden diese jetzt angefragt, stellt sie fest, dass doch nichts mehr zum Senden da ist. Ich würde an dieser Stelle nicht gleich von einem Firmwarefehler reden sondern von einer Unschönheit (Reihenfolge der Prüfungen), die nur in bestimmten Konstellationen auftritt. Ein Baustein mehr in die CPU einspielen und der Spuk ist vorbei. Dies sind nur Vermutungen über die Ursache, was wirklich dahinter steckt kann nur Siemens sagen. Ach ja, bei Vipa kann dieses Verhalten übrigens auch auftreten.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Sowas in der Art wird es sein. Zumindest könnte man durch einspielen einer passenden Anzahl an Bausteinen das Verhalten evtl. nachstellen und daran testen.

    Ähnlichen Spuk generiert auch eine WinAC-RTX mit dem ständigen Verschicken von ISO-Paketen ohne Dateninhalt.

  8. #8
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard

    ISO on top of TCP oder Packetkommunikation? Wie sieht so ein Paket aus?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Ja, bei Iso on TCP. Es kommt vor jedem Paket mit den S7-Comm Daten ein ISO Paket mit den Flag "Last data unit" auf No, direkt danach kommt dann nochmal ein ISO Paket mit Last data unit = Yes und den eigentlichen Daten. Da aber nur für das erste ein TCP Ack geschickt wird, bzw, beide im TCP die gleiche Acknowledgement number besitzen, vermute ich mal dass beide Daten direkt mit einem TCP Sendebefehl auf die Leitung gehen.
    Ich habe mal so ein Telegrammverkehr angehängt (hat mit dem Problem von Jochen nichts zu tun).
    Angehängte Dateien Angehängte Dateien

  10. #10
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dabei handelt es sich um sogenannte FastAcknowledge-Pakete. Diese wurden vor langer Zeit eingeführt, da die CPs in der Regel nach dem Senden ca. 200-300 ms warteten bis sie das nächste Paket abgeschickt haben. Wenn sie jetzt ein solches leeres Datenpaket bekommen haben, haben sie die weiteren Daten sofort abgeschickt. Deshalb wird ein empfangenes Paket immer sofort mit einem solchen Paket quittierte, damit die Gegenstelle weiter senden kann.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  2. ÄÖnderungen am libnodave.net.cs File von libnodave
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.05.2010, 16:56
  3. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  4. libnodave: Woher kommt die "libnodave.net.dll"?
    Von Thomas_v2.1 im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 10.11.2008, 12:07
  5. libnodave-0.8.1
    Von Zottel im Forum Werbung und Produktneuheiten
    Antworten: 6
    Letzter Beitrag: 17.11.2005, 22:21

Lesezeichen

Berechtigungen

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