# MW20 lesen mit LibNoDave



## Earny (23 November 2008)

Hallo,
es will einfach nicht gelingen, den Wert im MW20 zu lesen. Der Wert im MW20 geht im Bereich 0 bis 5000 in Zehnerschritten rauf und runter. 
In der Textbox steht immer nur der Wert "0". Der Timer arbeitet. Es gibt keine Fehlermeldung. Ich teste mit Accontrol.


```
[COLOR=#0000ff]Private[/COLOR] [COLOR=#0000ff]Sub[/COLOR] Timer2_Tick([COLOR=#0000ff]ByVal[/COLOR] sender [COLOR=#0000ff]As[/COLOR] System.Object, _
[COLOR=#0000ff]ByVal[/COLOR] e [COLOR=#0000ff]As[/COLOR] System.EventArgs) [COLOR=#0000ff]Handles[/COLOR] Timer2.Tick
[COLOR=#0000ff]Dim[/COLOR] MW(1) [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Byte[/COLOR]
[COLOR=#0000ff]If[/COLOR] fds.rfd > 0 [COLOR=#0000ff]Then[/COLOR]
[COLOR=#008000]'MW20 = 20x8 = 160[/COLOR]
res = dc.readBytes(libnodave.daveFlags, 0, 160, 2, MW)
txtWert.Text = dc.getS16
[COLOR=#0000ff]End[/COLOR] [COLOR=#0000ff]If[/COLOR]
[COLOR=#0000ff]End[/COLOR] [COLOR=#0000ff]Sub[/COLOR]
```
 
Gruß
Earny


----------



## Rainer Hönle (23 November 2008)

Was sagt der Debugger dazu? Wird die Anweisung ausgeführt? Wo kommt welcher Wert zurück?


----------



## Andreas138 (23 November 2008)

Bei readBytes wird die Startadresse in Bytes angegeben, also in diesem Fall 20


----------



## Earny (23 November 2008)

Hallo Rainer,

"res" erhält den Wert "0". Das steht glaube ich für OK.
Der "dc.getS16" liefert die "0" in die Textbox. Das müsste so sein, weil die Textbox in der Voreinstellung leer ist.

Der Debugger meldet in der Ausgabe:
openSocketw.c: bind Socket error: No error 
openSocketw.c: Connected to host: 192.168.53.53 

Ich habe die Sache jetzt nicht mehr mit Accontrol, sondern mit einer wirklichen CPU getestet. Das MPI/LAN-Kabel hat die IP-Adresse
192.168.53.53

Gibt es außer der "libnodave.dll" noch weitere Dateien, die man nach System32 kopieren muss, wenn man mit VB2005 arbeitet?
Für die Bit-Verarbeitung hat aber die "libnodave.dll" genügt.

Ich habe bisher keine Erfahrung mit dem Lesen von Digitaladressen der S7 mit LibNoDave.

Gruß
Earny


----------



## Andreas138 (23 November 2008)

Hallo Earny,

dc.gets16 liefert eine Null, weil in MW160 nichts steht.
Die korrekte Anfrage lautet:
res=dc.readBytes(libnodave.daveFlags,0,20,2,MW)


----------



## Earny (23 November 2008)

Hallo Andreas,
Danke, ich hab das eben auch gerade herausgefunden. Ich habe mich heute mit dem Lesen und Schreiben von Bits beschäftigt. Da wäre die 160 richtig gewesen.

Jetzt habe ich ein neues Problem:
Die Aktualisierung des Wertes über LibNoDave aus dem MW20 in meine VB2005-Visualisierung ist aber relativ langsam. Der Timer ist auf 100 ms eingestellt. Es wird allerdings nur alle 1 bis 1,5 s ein Wert aktualisiert.
Kann man die Kommunikation über LibNoDave schneller hinbekommen?

Gruß
Earny


----------



## Andreas138 (23 November 2008)

In meinem Testprogramm hat das Auslesen 500ms gedauert und ich hab 4 Anfragen gesendet. Hast Du mal probiert, mittels MPI2-Protokoll und dem in PLC-VCom eingerichteten virtuellen Com-Port die Verbindung aufzubauen?
So hatte ich es gemacht.


----------



## Earny (23 November 2008)

Hallo Andreas,
ich habe mal PLCVCom aktiviert. Damit wird es auch nicht schneller.
Anschließend habe ich noch mal den Test mit Accontrol gemacht. Das ist genauso langsam. Ich glaube die Wahl des Adapters "MPI/LAN-Kabel" bzw. Siemens-Adapter bzw. Accontrol spielt keine entscheidende Rolle.

Gruß
Earny


----------



## Andreas138 (23 November 2008)

Ich habs grad noch mal mit ACControl getestet, damit gehts sogar noch schneller. Als Indikator nehme ich einen Timer, den ich auslese. Mein VB-Timer ist auf 100ms eingestellt und der Wert des S7-Timers den ich auslese, wird alle 100-200ms aktualisiert


----------

