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

Ergebnis 1 bis 2 von 2

Thema: Fehler in LibNoDave- Komponente (Delphi)?

  1. #1
    Registriert seit
    10.04.2006
    Beiträge
    134
    Danke
    6
    Erhielt 14 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,

    ich beschäftige mich nun seit zwei Tagen intensiver mit NoDave, bzw. dem Delphi 'Wrapper'.
    Ich habe versucht den Inhalt eines DB's aus einer 300er Steuerung ausgelesen und musste feststellen das ab einer Grösse von ca. 220 Bytes die Kommunikation nicht mehr funktioniert, bzw. NoDave Fehlermeldungen ausspuckt (PDU- Size).
    Nun habe ich mir die Komponente einmal genauer angeschaut und bin der Meinung hier einen Schreibfehler entdeckt zu haben. Ich habe diesen einmal Testweise für das Lesen von Bytes in meinem Sinne geändert und es schaut so aus als wenn die Komponente nun funktioniert (Lesen von ca. 1kByte):

    Code:
    procedure TNoDave.DoReadBytes(Area: TNoDaveArea; DB, Start, Size: Integer; Buffer: Pointer);
    var
      Index, Length, MaxLen: Integer;
      StartTime: Cardinal;
    begin
      Index:=0;
      StartTime:=GetTickCount;
      MaxLen:=MaxPDUData;
      While (Index < Size) and (MaxLen > 0) do
      begin
        Length:=(Size - Index);
        If Length > MaxLen then Length:=MaxLen;
        try
          LockNoDave.Enter;
         // FLastError:=daveReadBytes(DaveConn, AreaCode(Area), DB, Index+Start, Size, Pointer(Integer(Buffer) + Index));
          FLastError:=daveReadBytes(DaveConn, AreaCode(Area), DB, Index+Start, Length, Pointer(Integer(Buffer) + Index));
        except
          On E: Exception do DoOnError('Error in function TNoDave.DoReadBytes: ' + E.Message);
        end;
        LockNoDave.Leave;
        Inc(Index, Length);
      end;
      try
        FCycleTime:=GetTickCount - StartTime;
      except
      end;
    end;
    Für mich sieht es so aus als wenn in der Zeile 'daveReadBytes' vergessen wurde die berechnete PDU- Size einzutragen (Length). Stattdessen wird als Parameter die Grösse des 'gesamt' zu lesenden Blockes angelegt (Size). Dieses quittiert NoDave dann aber später mit Fehler (Wenn der Block grösser als die PDU- Size wird).

    Ähnlich sieht es übrigens bei der Prozedur 'DoWriteBytes' aus...

    Kann das einer der 'Spezi's' bestätigen?

    Gruss Cliff
    Zitieren Zitieren Fehler in LibNoDave- Komponente (Delphi)?  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich denke, du hast Recht. Ich benutze noch die vorherige Version, da sah die Funktion doReadBytes ein ganz klein wenig anders aus, aber dort war Length eingetragen, nicht Size!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Libnodave unter delphi 2006 ohne Komponente
    Von emsbootsmann im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 04.03.2010, 19:52
  2. LibNoDave-Komponente DATE_AND_TIME lesen/schreiben
    Von marcengbarth im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 28.10.2009, 17:16
  3. Libnodave Komponente in Delphi
    Von Snoopy123123 im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 24.03.2009, 19:59
  4. OPC Client Komponente für Delphi?
    Von marcengbarth im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 05.11.2008, 09:43
  5. libnodave + delphi
    Von Praseodym im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 19.01.2007, 11:56

Lesezeichen

Berechtigungen

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