# LibNoDave die x.te Getting Started



## steinche (3 November 2007)

Hallo Zusammen,

nachdem die Suchseite hier schon Panik bekommt, wenn ich mit der Maus in die Nähe komme, muss ich jetzt doch mal schreiben.

Inzwischen bin ich der Lösung meines Problem schon sehr nahe. Wie so viele möchte ich aus einen DB aus einer 314er via Ethernet auslesen und in Excel ablegen.
Ich bin jetzt bei LibNoDave mit dem Modul12 für Excel und kann auch alle Makros ohne Fehler ausführen. Nur wo gebe ich im Initialisierungsteil die IP zu meinem CP ein und wie lese ich meinen DB50 aus? Die InitTable habe ich ausgeführt und die IP eingetragen sowie im initialize Abschnitt die MPI auskommentiert und die TCP rein genommen, aber es will irgendwie nicht 

Viele Grüße
steinche


----------



## Zottel (3 November 2007)

steinche schrieb:


> Hallo Zusammen,
> 
> nachdem die Suchseite hier schon Panik bekommt, wenn ich mit der Maus in die Nähe komme, muss ich jetzt doch mal schreiben.
> 
> ...


Und was kommt bei dem "ohne Fehler ausführen" heraus?



> Nur wo gebe ich im Initialisierungsteil die IP zu meinem CP ein


Du schreibst doch, du hast InitTable ausgeführt. Das schreibt *irgendeine* IP-Adresse in die Tabelle um dir zu zeigen, wo die hin soll und du ersetzt sie durch die richtige.


> ...und wie lese ich meinen DB50 aus?


Da must du das Makro readFromPLC ändern:
Im Aufruf von daveReadBytes
1. daveFlags durch daveDB ersetzen
2. die 0 direkt hinter daveFlags durch 50 ersetzen
3. die 16 durch die Anzahl der Bytes, die dein DB lang ist oder die du auslesen willst.


> Die InitTable habe ich ausgeführt und die IP eingetragen sowie im initialize Abschnitt die MPI auskommentiert und die TCP rein genommen, aber es will irgendwie nicht
> Viele Grüße
> steinche


Wie soll ich mir das " irgendwie nicht " vorstellen?
Tut es was? tut es nix? Hast du readme und FAQ und so gelesen? Wenn ja, warum probierst du es nicht mit der debug Ausgabe? Wie das geht:


FAQ.de.txt schrieb:


> Q: Kannst du mir helfen?
> A: Bevor du fragst, probiere die Testprogramme wie oben beschrieben. Wenn die bei dir nicht funktionieren, schicke mir die Ausgabe mit der Debug-Option, z.B.:
> testMPI -d COM1 >debugout.txt
> Wenn sie funktionieren, deine Anwendung aber nicht,
> ...


Funktioniert testiso_tcp ?
Wenn ja, funktioniert das Lesen der Merker in das Excel-Blatt?
Die Beispiele lesen Merker, weil es die in jeder S7 gibt. Wenn ich noch ein Beispiel für DB50 beilege, meckern 100 Leute, daß es nicht funktioniert. Und 99 von denen haben einen keinen DB 50 in ihrem Programm.
Es ist leider so, daß man, um deine Aufgabe zu lösen, etwas SPS,  etwas Programmieren und auch noch etwas EXCEL können muß.
Ich bin inzwischen der Meinung, daß viele Leute, die mich wegen Libnodave anschreiben, nie im Leben Prodave oder Accon AG-Link oder ein anderes Produkt kaufen würden, weil sie selbst Zweifel haben, daß sie damit etwas anfangen können.
Da Libnodave aber nichts kostet, kann man es ja einfach mal probieren...
Mein Support müßte zehnmal so teuer sein, wie der jedes kommerziellen Anbieters, weil ich SPS-Leuten Programmierkurse, Programmieren SPS-Kenntnisse und Praktikanten beides vermitteln soll...
Und dann schreibt heute ein Ochse auf Deutsch in die englische Mailingliste von Libnodave (es gibt auch eine deutsche), daß er es gut fände, wenn der komplette Sourcecode der .dll dabei wäre. Das ist er von Anfang an!!!!!!
Ich fände gut wenn:
- der Mann seinen Compiler beherrschte
- und wenn nicht, daß er auf die Makefiles vertrauen würde und wenigstens die Pfade anpassen könnte
- Alle mitgelieferten Textdateien lesen würde
- Die Finger davon lassen würde, eine fertige .dll selbst compilieren zu wollen.
Ich habe den Sourcecode gerne rausgegeben, aber nicht, um mir die Meckerei anzuhören...
Das mußte mal gesagt werden.


----------



## IBFS (3 November 2007)

Zottel schrieb:


> Wenn ja, funktioniert das Lesen der Merker in das Excel-Blatt?
> Die Beispiele lesen Merker, weil es die in jeder S7 gibt. Wenn ich noch ein Beispiel für DB50 beilege, meckern 100 Leute, daß es nicht funktioniert. Und 99 von denen haben einen keinen DB 50 in ihrem Programm.
> ...
> Ich habe den Sourcecode gerne rausgegeben, aber nicht, um mir die Meckerei anzuhören...
> Das mußte mal gesagt werden.


 

Zottel, ich verstehe deinen Frust  - und das auch noch zum Sonnabendabend -   irrg!



Gruß


----------



## steinche (4 November 2007)

@Zottel

erst mal Danke für Deine - vor allem schnelle - Antwort, auch wenn ich nicht verstehe, warum Du Dich so aufregst! Ersten haben ich mich durch die Hilfe gewühlt, die FAQs gelesen und zudem kenne ich nur zu gut das Problem, wenn jeden Tag die gleiche Frage 10 mal kommt. Du kannst mir also glaube, dass ich nicht direkt nach dem Download des Programm diesen Post geschrieben haben. Aber zurück zum Thema.

Die Verbindung zum CP steht. Nach der Ausführung von testISO_TCP.exe -d 192.168.0.43 kommt folgendes.


```
openSocketw.c: enter OpenSocket
openSocketw.c: 1
openSocketw.c: 2 6600
openSocketw.c: peer:192.168.0.43=721463488
openSocketw.c: 6
openSocketw.c: 7
openSocketw.c: socket is 1960
openSocketw.c: setsockopt No error 0
openSocketw.c: 8
openSocketw.c: bind Socket error: No error
openSocketw.c: Connected to host: 192.168.0.43
send packet: :
0:0x03,0x00,0x00,0x16,0x11,0xE0,0x00,0x00,0x00,0x01,0x00,0xC1,0x02,0x01,0x00,0xC
2,
10:0x02,0x01,0x02,0xC0,0x01,0x09,
readISOpacket: 22 bytes read, 22 needed
readISOpacket: packet:
0:0x03,0x00,0x00,0x16,0x11,0xD0,0x00,0x01,0x44,0x31,0x00,0xC0,0x01,0x09,0xC1,0x0
2,
10:0x01,0x00,0xC2,0x02,0x01,0x02,
IF1 daveConnectPLC() step 1. got packet: :
0:0x03,0x00,0x00,0x16,0x11,0xD0,0x00,0x01,0x44,0x31,0x00,0xC0,0x01,0x09,0xC1,0x0
2,
10:0x01,0x00,0xC2,0x02,0x01,0x02,
PDU header:
0:0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
plen: 8 dlen: 0
Parameter:
0:0xF0,0x00,0x00,0x01,0x00,0x01,0x03,0xC0,
_daveExchange PDU number: 65535
IF1 enter _daveExchangeTCP
send packet: :
0:0x03,0x00,0x00,0x19,0x02,0xF0,0x80,0x32,0x01,0x00,0x00,0xFF,0xFF,0x00,0x08,0x0
0,
10:0x00,0xF0,0x00,0x00,0x01,0x00,0x01,0x03,0xC0,
readISOpacket: 27 bytes read, 27 needed
readISOpacket: packet:
0:0x03,0x00,0x00,0x1B,0x02,0xF0,0x80,0x32,0x03,0x00,0x00,0xFF,0xFF,0x00,0x08,0x0
0,
10:0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0x00,0x01,0x00,0xF0,
IF1 _daveExchangeTCP res from read 27
result of exchange: 0
PDU header:
0:0x32,0x03,0x00,0x00,0xFF,0xFF,0x00,0x08,0x00,0x00,0x00,0x00,
plen: 8 dlen: 0
Parameter:
0:0xF0,0x00,0x00,0x01,0x00,0x01,0x00,0xF0,
error: ok

*** Partner offered PDU length: 240 used limit 240

Connected.
Trying to read 64 bytes (16 dwords) from data block 1.
Press return to continue.
PDU header:
0:0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,
plen: 14 dlen: 0
Parameter:
0:0x04,0x01,0x12,0x0A,0x10,0x02,0x00,0x40,0x00,0x01,0x84,0x00,0x00,0x00,
_daveExchange PDU number: 65536
IF1 enter _daveExchangeTCP
send packet: :
0:0x03,0x00,0x00,0x1F,0x02,0xF0,0x80,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x0E,0x0
0,
10:0x00,0x04,0x01,0x12,0x0A,0x10,0x02,0x00,0x40,0x00,0x01,0x84,0x00,0x00,0x00,
readISOpacket: 89 bytes read, 89 needed
readISOpacket: packet:
0:0x03,0x00,0x00,0x59,0x02,0xF0,0x80,0x32,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x0
0,
10:0x44,0x00,0x00,0x04,0x01,0xFF,0x04,0x02,0x00,0x07,0xB7,0x0A,0xE4,0x00,0x1A,0x
5E,
20:0x00,0x02,0xF9,0xB2,0x29,0x02,0xFA,0x48,0x6C,0x07,0x33,0x87,0xCE,0x00,0x11,0x
19,
30:0x05,0x00,0x1E,0x9B,0x96,0x00,0x46,0xA1,0xE7,0x00,0x73,0x0C,0x02,0x00,0x05,0x
2C,
40:0xC4,0x00,0x72,0xD1,0x09,0x00,0xB6,0x85,0x9D,0x00,0x72,0xDB,0xDE,0x00,0x72,0x
BD,
50:0x80,0x00,0x72,0xB7,0xE8,0x00,0x73,0xCA,0xEC,
IF1 _daveExchangeTCP res from read 89
result of exchange: 0
PDU header:
0:0x32,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x44,0x00,0x00,
plen: 2 dlen: 68
Parameter:
0:0x04,0x01,
Data     :
0:0xFF,0x04,0x02,0x00,0x07,0xB7,0x0A,0xE4,0x00,0x1A,0x5E,0x00,0x02,0xF9,0xB2,0x2
9,
10:0x02,0xFA,0x48,0x6C,0x07,0x33,0x87,0xCE,0x00,0x11,0x19,0x05,0x00,0x1E,0x9B,0x
96,
20:0x00,0x46,0xA1,0xE7,0x00,0x73,0x0C,0x02,0x00,0x05,0x2C,0xC4,0x00,0x72,0xD1,0x
09,
30:0x00,0xB6,0x85,0x9D,0x00,0x72,0xDB,0xDE,0x00,0x72,0xBD,0x80,0x00,0x72,0xB7,0x
E8,
40:0x00,0x73,0xCA,0xEC,
Data hdr :
0:0xFF,0x04,0x02,0x00,
Data     :
0:0x07,0xB7,0x0A,0xE4,0x00,0x1A,0x5E,0x00,0x02,0xF9,0xB2,0x29,0x02,0xFA,0x48,0x6
C,
10:0x07,0x33,0x87,0xCE,0x00,0x11,0x19,0x05,0x00,0x1E,0x9B,0x96,0x00,0x46,0xA1,0x
E7,
20:0x00,0x73,0x0C,0x02,0x00,0x05,0x2C,0xC4,0x00,0x72,0xD1,0x09,0x00,0xB6,0x85,0x
9D,
30:0x00,0x72,0xDB,0xDE,0x00,0x72,0xBD,0x80,0x00,0x72,0xB7,0xE8,0x00,0x73,0xCA,0x
EC,
error: ok
_daveSetupReceivedPDU() returned: 0=ok
_daveTestReadResult() returned: 0=ok
DB1:DW0: 1975
DB1:DW1: 2788
...
DB1:DW32: 51948
Trying to read 16 bytes from FW0.
Press return to continue.
PDU header:
0:0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,
plen: 14 dlen: 0
Parameter:
0:0x04,0x01,0x12,0x0A,0x10,0x02,0x00,0x10,0x00,0x00,0x83,0x00,0x00,0x00,
_daveExchange PDU number: 65537
IF1 enter _daveExchangeTCP
send packet: :
0:0x03,0x00,0x00,0x1F,0x02,0xF0,0x80,0x32,0x01,0x00,0x00,0x00,0x01,0x00,0x0E,0x0
0,
10:0x00,0x04,0x01,0x12,0x0A,0x10,0x02,0x00,0x10,0x00,0x00,0x83,0x00,0x00,0x00,
readISOpacket: 41 bytes read, 41 needed
readISOpacket: packet:
0:0x03,0x00,0x00,0x29,0x02,0xF0,0x80,0x32,0x03,0x00,0x00,0x00,0x01,0x00,0x02,0x0
0,
10:0x14,0x00,0x00,0x04,0x01,0xFF,0x04,0x00,0x80,0x02,0xBF,0x00,0x00,0x00,0x00,0x
00,
20:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
IF1 _daveExchangeTCP res from read 41
result of exchange: 0
PDU header:
0:0x32,0x03,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x14,0x00,0x00,
plen: 2 dlen: 20
Parameter:
0:0x04,0x01,
Data     :
0:0xFF,0x04,0x00,0x80,0x02,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0
0,
10:0x00,0x00,0x00,0x00,
Data hdr :
0:0xFF,0x04,0x00,0x80,
Data     :
0:0x02,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0
0,
error: ok
_daveSetupReceivedPDU() returned: 0=ok
_daveTestReadResult() returned: 0=ok
FD0: 46071808
FD4: 0
FD8: 0
FD12: 0.000000
Finished.
```
Beim Ausführen der Excel Makros kommt folgendes;
initTable:
D2 Serial Port E2 COM1
D3 Baudarate: E3 38000
D4 Party E4 0
D6 MPI.... E6 2
D7 IP Adr. E7 192.168.0.43
D8 Accessp. E8 /S7ONLINE

In der readme.vb steht auszugsweise:

```
- Execute Macro initTable. This will put some values into the spreadsheet.
- Adjust these values to your needs.
- If you want to use a communication protocol other than MPI, adjust some lines in sub initialize
  as explained there.
```
Nach dem Importieren der .bas Datei in Excel folgende Zeile geändert:
Private Declare Function internalDaveGetBlockInfo Lib "libnodave.dll" Alias "daveGetBlockInfo" (ByVal dc As Long, ByRef buffer As Byte, ByVal type As Long, ByVal number As Long) As Long
das rote 'e' entfernt.

Danach das Makro InitTable ausgeführt und
im Modul12 folgende "Einstellungen" gemacht:
Abschnitt iniTable -> IP zu 192.168.0.43
Abschnitt initialize:
'di = daveNewInterface(ph, ph, "IF1", 0, daveProtoMPI,
di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)

Bei dem Modul readFromPLC:
B1: Testing PLC read
A2: port handle B2: -1
B12: Finished
Bereich D2:E8 wie oben

Bei den anderen Makros kommt bis auf B1 die gleiche Ausgabe.

Grüße
steinche


----------



## Zottel (4 November 2007)

Aufregen tat ich mich wegen dem anderen Ochsen, wegen der Summe meiner Erfahrungen und weil du dich unklar ausdrückst.
Die Ausgabe von testISO_TCP ist in Ordnung, du hast einen CP oder so und der steckt am Netzwerk...
In den Ausgaben von VB/Excel ist
A2: port handle B2: -1
der Punkt, glaube ich.
Das Makro ist für MPI und öffnet eine serielle Schnittstelle mittels setPort(). Du brauchst aber ein socket für Ethernet/TCP:

Original:
ph = setPort(port, baud$, Asc(Left$(parity$, 1)))
' Alternatives:
Rem ph = openSocket(102, peer$)    ' for ISO over TCP
Rem ph = openSocket(1099, peer$)' for IBH NetLink
Rem ph = openS7online(acspnt$) ' to use Siemes libraries for transport 

Mach daraus:
rem ph = setPort(port, baud$, Asc(Left$(parity$, 1)))
' Alternatives:
 ph = openSocket(102, peer$)    ' for ISO over TCP
Rem ph = openSocket(1099, peer$)' for IBH NetLink
Rem ph = openS7online(acspnt$) ' to use Siemes libraries for transport


----------



## steinche (4 November 2007)

Zottel schrieb:


> Aufregen tat ich mich wegen dem anderen Ochsen, wegen der Summe meiner Erfahrungen und weil du dich unklar ausdrückst.


Sorry, dass ich Dich so angeschnauzt habe, ich komme mit "irgendwie" auch selten weiter 



> Das Makro ist für MPI und öffnet eine serielle Schnittstelle mittels setPort(). Du brauchst aber ein socket für Ethernet/TCP.


So sieht das schon viiiel besser aus 

Hatte nur für di TCP ausgewählt und es bei ph vergessen.
Das Makro readOrderCode liefert mir auch die Bestellnummer ohne Mucken. Bei 
readFromPLC ist porthandle: 2720
result from iniAdapter: 0
result from connectPLC: 0
resuslt from readBytes: 33280

error unter Access point meldet ok

Jetzt bitte nicht hauen, aber wo sehe ich den Inhalt der ausgelesenen Merkerbytes.
Mir reicht auch schon ein Stichwort für die Suche oder FAQ wo ich weiter suchen kann.

Schönen Sonntag noch!
steinche


----------



## Zottel (4 November 2007)

steinche schrieb:


> Sorry, dass ich Dich so angeschnauzt habe, ich komme mit "irgendwie" auch selten weiter
> 
> So sieht das schon viiiel besser aus
> 
> ...


Ich denke mal, readBytes hat gar nicht funktioniert. Soweit ich mich erinnere, sollte der Rückgabecode 0 sein.
33280=0x8200 hex, Die bekannten codes liefert Libnodave auch als Klartext mittels daveStrerror, aber dieser ist schlicht nicht bekannt:-(
Die Verbindung funktioniert aber einwandfrei, weil die Bestellnummer in Ordnung war. Da gibt es nicht mehr so viele Möglichkeiten...
Du solltest nicht zuviele Byte auf einmal lesen: Dein CP hat 240 Byte als maximale PDU-Länge angeboten, damit kannst du pro Aufruf 222Bytes lesen und 218 schreiben, wenn ich es noch richtig weiß...


----------

