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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: LibnoDave -> LastDataUnit in GetPlcBlocks

  1. #11
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Aber das würde doch auch ohne diese leeren, bzw. minimal-großen Iso Pakete gehen.
    Da auf S7-Kommunikationsseite im Großteil der Telegramme ein Frage und Antwortspiel auf ISO-OSI-Ebene 7 läuft, könnte doch jedes Paket mit Push und Ack gesendet werden.

    Ich sehe grade dass das nicht nur die WinAC so macht, sondern auch mein PG. Nur eine "normale" 315 z.B. macht das nicht.

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

    Standard

    Wenn Du Dein Log anschaust, siehts Du, dass teilweise deutlich über 100 ms zwischen dem FastAck und dem nächsten Datentelegramm vergehen. Wenn die Gegenseite jetzt etwas zu senden hätte, dann könnte sie dies unverzüglich tun. In den Zeiten der 318er bzw. der ersten 443er war es wichtiger. DIe waren nicht in der Lage, die 480 Bytes einer PDU auf einmal zu senden. Wenn da kein FastAck kam, brach die Performance dramatisch ein, da das zweite Häppchen diese 200-300 ms später verschickt wurde. Der effektive Datendurchsatz sank damit auf unter 2 kB/s.
    Bei manchen Geräten und Schnittstellen kann dieses FastAck übrigens auch eingestellt werden (habe ich jedenfalls schon einmal gesehen).
    Rainer Hönle
    DELTA LOGIC GmbH

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

  3. Folgender Benutzer sagt Danke zu Rainer Hönle für den nützlichen Beitrag:

    Thomas_v2.1 (25.02.2014)

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

    Standard

    Ok, nun gehts!

    es war auf jeden Fall auch noch falsch das die Sequence Number aus dem vorigen Telegramm nicht übernommen wurde:

    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
        }
    muss in
    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");
            pam[7]=p2.param[7];
            res=daveBuildAndSendPDU(dc, &p2,pam, sizeof(pam), NULL, 1);
            //if (res!=daveResOK) return res;     // bugfix from Natalie Kather
        }
    geändert werden...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #14
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Warum hast du den Abbruch bei res!=0 auskommentiert? Wenn die Schleife läuft und die Verbindung zur SPS abbricht, wird sie nie mehr verlassen!

  6. #15
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    ok, am anfang gabs ja die diskussion das auch ein leeres telegramm zurückgegeben werden kann! wie koennen wir das sonst abfangen?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  7. #16
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Ich bin nicht sicher, ob die Fehler konsequent durchgereicht werden, aber
    daveBuildAndSendPDU erwartet eine Antwort und sollte mit timeout zurückkehren, wenn die ausbleibt.
    Wenn das eine zulässige Reaktion der Steuerung ist,
    dürfte halt nur die while-Schleife abgebrochen werde, aber nicht die ganze Funktion...
    Geändert von Zottel (10.03.2014 um 11:58 Uhr)

  8. #17
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Also müssts so passen:

    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");
            pam[7]=p2.param[7];
            res=daveBuildAndSendPDU(dc, &p2,pam, sizeof(pam), NULL, 1);
            if (res!=daveResOK)
                break;
        }
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  9. #18
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Du müsstest die folgenden Zeilen aber auch noch anpassen, ansonsten gibt es ein Fehler-Eintrag im Logfile obwohl die Funktion an sich funktioniert hat.
    Evtl. nur ein Log-Eintrag wenn :
    res != daveResOK und len == 0

    Denn dann ist noch kein gültiges Telegramm eingetroffen.

  10. #19
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Ich würde da lieber strenger sein:
    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");
               pam[7]=p2.param[7];
              res=daveBuildAndSendPDU(dc, &p2,pam, sizeof(pam), NULL, 1);
              if (res==0xa) break; // Ich meine, bei einem so aufgebauten Antwortpaket wird auch 0xa zurückgegeben...
              if (res!=daveOk) return res; // alle anderen Fehler nicht ignorieren.
        }
    Geändert von Zottel (11.03.2014 um 00:15 Uhr)

  11. #20
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habs so übernommen...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

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