# Fehler-Codes der Libnodave-Funktionen



## Thomas450 (22 Februar 2010)

Hallo,

möchte über die Libnodave-Bibliothek mit eine SPS komunizieren. Dabei tauchen verschieden Probleme auf. 

Erhalte z.B. bei 
"res = dc.writeBytes(libnodave.daveDB, db, pos_db, l, t_buf);" 
in res den Wert -3 wenn ich über einen PC-Adapter Daten in einen DB schreiben möchte.
db = 170
pos_db = 0
l = 220

Das Schreiben von z.B. 50 Bytes funktioniert.

Kann mit jemand sagen, wo ich eine Beschreibung der Fehler-Codes welche die Funktionen zurückgeben finden kann.



Gruß Thomas


----------



## RobiHerb (23 Februar 2010)

*Header Files*

So wie ich mich erinnere stehen Codes in einem der Header Files, waren aber anscheinend nicht komplett.

Im speziellen Fall vermute ich, dass das Telegramm zu lang ist, zumindest weiss ich, dass man einen Block von 256 Bytes teilen muss.


----------



## Thomas450 (23 Februar 2010)

Wo finde ich die Header-Files?

Ich kann Daten mit einer MaxPDULen - 18 lesen. Beim Schreiben mit dieser Länge erhalte ich den Rückgabewert -3.

Gruß Thomas


----------



## Rainer Hönle (23 Februar 2010)

Beim Schreiben gilt auch MaxPDULen-28


----------



## Thomas450 (23 Februar 2010)

Mit MaxPDULen-28 funktioniert das Schreiben. Danke für die Info.

Ein paar Infos über die Funktionsweise bei Fehlern wären schon hilfreich. Ich bekomme z.B. die Kommunikation über openS7online("/S7ONLINE") auch nicht ans Laufen.
res = di.initAdapter liefert -44


Gruß Thomas


----------



## Dublin (2 Juni 2010)

bei mir kam der -44 Fehler, weil ich nach openS7online bei daveNewInterface das falsche Protokoll verwendet habe.

So ists richtig:

```
ph = openS7online("s7online", 0)  ' to use Siemes libraries for transport 
di = daveNewInterface(ph, ph, "IF1", 0, [U]daveProtoS7online[/U], 0)
```
Das Handle kann "0" (Dez Null) sein. Außer man sucht sich das Handle von Excel raus...

Bitte auch bei S7ONLINE beachten, dass die cleanUP Funktion auch angepasst werden muss, damit die DLL wieder korrekt geschlossen wird.
Das "port handle" darf nicht hoch zählen.


Also so:

```
If ph <> 0 Then
    'res = closePort(ph)
    'res = closeSocket(ph)
    res = closeS7online(ph)
    ph = 0
End If
```

*ACK*

Viel Spass beim Testen!

P.S.: Ob S7ONLINE oder /S7ONLINE eingeben wird ist egal!


----------



## Jochen Kühner (2 Juni 2010)

*schreiben von mehr bytes...*

In meine Wrapper Bibliothek für LibNoDave fange Ich das lesen von mehr Bytes als die PDU Länge ab und das schreiben folgt in einer der nächsten Versionen...

http://www.sps-forum.de/showthread.php?t=36363


----------



## Thomas450 (3 Juni 2010)

Hallo Dublin,
hallo Jochen,

vielen Dank für die Infos. 
Werd's gleich mal ausprobieren.


Gruß Thomas


----------

