# LibNoDave: daveListBlocksOfType Error



## mark_us (29 April 2015)

Hallo LibNoDave-User,

die Funktion daveListBlocksOfType von LibNoDave läuft bei mir problemlos mit einer 315er SPS,
auch bei einer 400er geht es prima, solange nicht mehr als 113 Bausteines eines Typs vorliegen.
Ist das aber der Fall muss die Lib ein 2. Paket von der SPS anfordern, dabei kommt bei der 400er CPU
allerdings immer ein Fehler zurück.
Ein bisschen nachforschen brachte das Problem zum Vorschein, die SPS vergibt bei ListBlocks-Anfragen eine
Sequenz-Nummer (bei den 300er scheint das immer die 1 zu sein, was in der Lib auch fest hinterlegt ist).
Wenn die Lib diese Nummer in das Paket für die 2. Anfrage übernimmt klappt es auch bei der 400er wieder.
Das Ganze ist nur eine kleine Änderung im Code der Funktion, bevor "daveBuildAndSendPDU" in Zeile 1102
aufgerufen wird muss dann eben noch eine Zuweisung mit rein:

pam[7]=p2.param[7];




mark_us


----------



## Jochen Kühner (2 Mai 2015)

Hab den gleichen fix bei mir auch schon 1 Jahr drin, und kann bestätigen das dieser das Problem fixt, und alles ohne Probleme damit läuft.

https://github.com/jogibear9988/Dot...4806b50#diff-c3b80e73434492652f61878f3cf7c492


----------



## mark_us (10 Juli 2015)

Update:
Zu dem oben beschriebenen Verhalten bei mehr als 113 Bausteinen eines Typs gibt es noch einen Sonderfall der bisher in LibNoDave und auch
in der DotNetSiemensPLCToolBoxLibrary nicht mit abgefangen wird.
Das Problem tritt nur auf wenn die Anzahl der Bausteine eines Typs durch 113 teilbar ist.
Die SPS sendet dann im letzten Paket mit Baustein-Nummern das Falg für weitere Pakete. 
	
	



```
while (p2.param[9]!=0)
```
Im nächsten Paket kommt dann (bei p2.param[9]==0) aber als Return-Wert hexD20E, was in LibNoDave zu einem Fehler führt.
Sollte aber wohl eher bedeuten dass jetzt keine Daten mehr kommen.


----------



## Jochen Kühner (6 August 2015)

Also habe das mit der von mir modifizierten Version von LibNoDave getestet welche in meinem GitHub Projekt enthalten ist!

Da geht mit einer 315-2-PN/DP das abrufen der Liste mit 112/113 und 114 DBs ohne Probleme!


----------



## mark_us (6 August 2015)

Hallo Jochen,

ich hab das beschriebene Verhalten an einer 416-3DP gehabt und konnte es jetzt auch an einer 414-3PN/DP nochmal nachstellen.
Hab es jetzt aber auch gleich noch an einer 315-2DP mit NetlinkPro versucht. Da tritt es nicht auf.
Die Anzahl der je Paket von der SPS zurückgegebenen Baustein-Nummern ist bei meiner 315er 51, bei der 400er waren es immer 113.
Die 315 sagt aber im letzten Paket durch p2.param[9]==0 dass jetzt Schluss ist, die 400er macht das anders.
Da kommt noch das beschriebene Paket ohne weitere Daten nach.

mark_us


----------



## Jochen Kühner (6 August 2015)

ich bau morgen mal eine Änderung ein, vlt. kannst du diese dann testen?
Würde einfach wenn d20e als retval kommt auch ein break machen!


----------



## Jochen Kühner (7 August 2015)

Kannst du es mit meiner LibNoDave von hier probieren: https://ci.appveyor.com/project/jogibear9988/dotnetsiemensplctoolboxlibrary/build/artifacts


----------



## mark_us (10 August 2015)

Kannst du mir die dll auch mit .Net4 erstellen?
Ich bin zur Zeit noch mit VS2010 am arbeiten, da schein es Probleme mit der dll in Version 4.5 zu geben.
Ich kann das Projekt nicht übersetzen.


----------



## Jochen Kühner (11 August 2015)

Leider nicht, da Ich irgendwo async/await verwende! Aber du kannst ja die libnodave_dll von dieser Version verwenden! Die sollte auch mit deiner DLL Version funktionieren!


----------



## mark_us (12 August 2015)

Hab deine neue dll jetzt mit der alten Version der Toolbox und auch mit den C#-Adapter von libnodave getestet.
Jetzt kommt die richtige Anzahl an Bausteinen zurück.


----------



## Jochen Kühner (12 August 2015)

Danke für den Test! Schön das es nun funktioniert


----------

