Ist die maxPDUlength immer korrekt ?

bqstony

Level-1
Beiträge
9
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wen ich daveWriteManyBytes aus nodave.c anschaue. Zieht er hier sogar 28 Bytes ab....
Code:
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, das ist es auf jedenfall auch nich. Den Baustein könnte man sogar als übegross bezeichnen :ROFLMAO:
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.
 
Zurück
Oben