# libnodave MAXPDU



## jangbu (13 November 2006)

Hallo,

die MAXPDU ist auf 200 eingestellt! Was spricht dagegen diese zu erhöhen? Ich muss 525 REAL-werte einlesen, dazu brauche ich eine MAXPDU von 2100.

jangbu


----------



## Rainer Hönle (13 November 2006)

Da hat die S7 was dagegen. Die kann halt nur bestimmte PDU-Größen.


----------



## Ralle (13 November 2006)

Die Realwerte werden doch trotzdem eingelesen, nur nicht in einem Rutsch. Mein Programm liest auch 1k Daten ein.


----------



## seeba (13 November 2006)

Ralle schrieb:


> Die Realwerte werden doch trotzdem eingelesen, nur nicht in einem Rutsch. Mein Programm liest auch 1k Daten ein.


Wenn man ReadManyBytes verwendet schon.


----------



## Zottel (13 November 2006)

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.


----------



## jangbu (14 November 2006)

Kann leider ReadManyBytes nicht finden?! Verwende Delphi 6 als Entwicklungsumgebung.


----------



## Ralle (14 November 2006)

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.


----------



## Ralle (14 November 2006)

Wenn du die Komponente nicht nutzt sieh dir auf jeden Fall die NoDAVE.pas an, da existiert auch daveReadManyBytes.


----------



## afk (19 November 2006)

Ralle schrieb:


> Je nachdem was du nutzt heißt die Delphi-Funktion:
> 
> procedure DoReadBytes(Buffer: Pointer; SPS: Integer);
> 
> ...


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 ...  


Gruß Axel


----------

