# Ist die maxPDUlength immer korrekt ?



## bqstony (9 Juni 2009)

Hallo erstmal

Ich wollte mal fragen ob das Ergebniss welches man aus MaxPduLength erhält immer korrekt ist?

Ich verwende moment eine IM151-8 über TCP. 
Nun erhalte ich die PDU Länge von 240. Wen ich nun experimentel versuche daten auszulesen mit der Länge 240 bis 141 erhalte ich den Fehler:  
the desired address is beyond limit for this PLC

Lese ich jedoch nur 140 Bytes aus, Stimmt alles wieder. 

Kann es sein das die PDU grösse falsch ausgelesen wird? Bzw was könnte ich tun um den Wert zu ändern?

Wäre für eure Hilfe dankbar, da ich die Aufsplittung des lesens / Schreibens über die PDU grösse handeln wollte.

MFG Michael


----------



## Human (9 Juni 2009)

Ich kann mich jetzt mal nur auf eine Quelle (die NoDaveComponent, die im libnodave-Pakte enthalten ist) und auf meine Vermutungen stützen:

In der NoDaveComponent gibt es eine Funktion die heißt GetMaxPDUData, in dieser werden 24 von der in libnodave erhaltenen Länge abgezogen, ich denke, dass das die Headerdaten also was die SPS genau mit dem was sie bekommen hat anstellen soll.


----------



## bqstony (9 Juni 2009)

Wen ich daveWriteManyBytes aus nodave.c anschaue. Zieht er hier sogar 28 Bytes ab....

```
int DECL2 daveWriteManyBytes(daveConnection * dc,int area, int DBnum, int start,int len, void * buffer){
    int res, pos, writeLen;
    uc * pbuf;
    pos=0;
    if (buffer==NULL) return daveResNoBuffer;
    pbuf=(uc*) buffer;
    res=daveResInvalidLength; //the only chance to return this is when len<=0
    while (len>0) {
    [B]if (len>dc->maxPDUlength-28) writeLen=dc->maxPDUlength-28; else [/B]writeLen=len;
    res=daveWriteBytes(dc,area, DBnum, start, writeLen, pbuf);
    if (res!=0) return res;
    len-=writeLen;
    start+=writeLen;
    pbuf+=writeLen;
    }    
    return res;
}
```
Bei mir ist eben der Grosse Unterschied von 100 zu dem Rückgabewert aus maxPDUlength. Was halt schon seltsam ist.


----------



## Human (9 Juni 2009)

Oder ist einfach nur dein Datenbaustein zu klein???


----------



## Rainer Hönle (9 Juni 2009)

Human schrieb:


> Oder ist einfach nur dein Datenbaustein zu klein???



Dann testweise Merker verwenden. Die sollten auf jeden Fall vorhanden sein.


----------



## bqstony (13 Juni 2009)

Nein, das ist es auf jedenfall auch nich. Den Baustein könnte man sogar als übegross bezeichnen 
Auch bei einem ReadRequest, aus verschiedenen Bausteinen ist das selbe Problem aufgetreten.

Mit dem Merkern habe ich es trotzdem noch nicht versucht, werde das nach dem wochenende noch versuchen.


----------

