libnodave MAXPDU

readManyBytes() ruft readBytes() sooft wie nötig mit der maximalen PDU-Größe und einmal für den Rest auf. Es "versteckt" also nur die mehrfachen Aufrufe vor dem Anwender und nimmt ihm die "Verwaltung" der Anfangsadressen ab.
Die PDU-Größe wird von der CPU begrenzt. Kann man auch in Step7 unter Eigenschaften der CPU/Kommunikation abfragen.
 
Je nachdem was du nutzt heißt die Delphi-Funktion:

procedure DoReadBytes(Buffer: Pointer; SPS: Integer);

Die nimmt immer 200 als Länge für den Aufruf von daveReadBytes und macht das so oft, bis alles übertragen ist.

Für Delphi gibts eine schöne Komponente, die ist bei libnodave dabei.
 
Wenn du die Komponente nicht nutzt sieh dir auf jeden Fall die NoDAVE.pas an, da existiert auch daveReadManyBytes.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Je nachdem was du nutzt heißt die Delphi-Funktion:

procedure DoReadBytes(Buffer: Pointer; SPS: Integer);

Die nimmt immer 200 als Länge für den Aufruf von daveReadBytes und macht das so oft, bis alles übertragen ist.

Für Delphi gibts eine schöne Komponente, die ist bei libnodave dabei.
DoReadBytes ist eine Methode der Delphi-Komponente, die in den bisherigen Versionen immer mit 200 Byte großen Übertragungsblöcken gearbeitet hat. In meiner aktuellen Version (noch nicht released !) übernehme ich die Blocklänge, die libnodave beim Verbindungsaufbau mit der CPU aushandelt. Ich habe jedoch auch schon Probleme dabei festgestellt:
  • Wenn per IBHLink / NetLink eine Verbindung zu einer 400er-CPU aufgebaut wird, dann meldet die CPU an libnodave, daß sie eine Blocklänge von ~460Bytes kann, der IBH/NetLink beherrscht diese Blocklänge aber offensichtlich nicht, und dementsprechend ist die Kommunikation fehlerhaft. Demzufolge habe ich die Blocklänge beim Protokoll IBHLink auf 220 Bytes beschränkt.
  • Beim Lesevorgang habe ich versucht, MaxPDU - 18 Bytes zu übertragen, bei PN-CPUs hat es aber nicht ausgereicht, 18 Bytes abzuziehen, darum habe ich diese Konstante vergrößert. Jetzt funktioniert es zwar, aber ich weiß nicht genau warum, und das gefällt mir nicht. :???:
Ich gehe aber davon aus, daß mit dem nächsten Release von libnodave diese Funktion in der Delphi-Komponente enthalten sein wird, ich bleib auf jeden Fall am Ball, auch wenn Zeit bei mir gerade ein sehr knappes Gut ist ... :rolleyes:


Gruß Axel
 
Zurück
Oben