Ist LibNoDave so langsam?

Earny

Level-1
Beiträge
422
Reaktionspunkte
38
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich will von einer S7-300-CPU kontinuierlich den Wert im MW20 einlesen. Dazu habe ich in VB2005 die Timer2-Prozedur angelegt, die alle 100 ms aufgerufen wird.
Dabei stelle ich fest, dass die Wertänderung im MW20 in VB2005 nicht schnell genug erfasst wird. Die S7-CPU verändert alle 100 ms den Wert im MW20. In VB2005 macht sich aber nur alle 2 bis 3 s eine Wertänderung bemerkbar. Es spielt dabei keine Rolle, ob ich für die Übertragung einen alten PC-Adapter von Siemens (6ES7 972-0CA22-0XA0) mit der Einstellung 38,4 kBit/s oder ein schnelles MPI-LAN-Kabel der Prozessinformatik mit 187,5 kBit/s einsetze. Auch beim Einsatz von Accontrol als fiktive CPU bleibt das Resultat gleich:
Nur alle 2 bis 3 s macht sich in VB2005 in der Textbox "txtWert" eine Wertänderung bemerkbar. Die Messung mit dem GetTickCount hat ergeben, dass die ReadBytes-Methode beim Siemens-PC-Adapter ca. 78 ms, beim MPI-Lan-Kabel ca. 15-30 ms und bei Accontrol ca. 0 ms benötigt. Bei diesen Messungen war das Timer2-Intervall auf 5 s eingestellt. Der Wert selbst wird richtig dargestellt.
Ich habe die "libnodave.dll" ins System32 kopiert und die "libnodave.net.dll" in den VB-Projektordner in ...\bin\debug
Für die "libnodave.net.dll" habe ich einen Verweis angelegt.

Hier der Programmcode des Timers2:

Private Sub Timer2_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer2.Tick
Dim MW(1) As Byte, Wert As Short, Zeit As Long
If fds.rfd > 0 Then
Zeit = GetTickCount
res = dc.readBytes(libnodave.daveFlags, 0, 20, 1, MW)
Wert = dc.getS16
Zeit = GetTickCount - Zeit
txtDauer.Text = Zeit
txtWert.Text = Wert
End If
End Sub

Gruß
Earny
 
LibnoDave ist schnell genug!!

Hallo Earny,

das auszulesende Word ist 2 Byte lang. Das sollte im Aufruf auch so angegeben werden.
res = dc.readBytes(libnodave.daveFlags, 0, 20, 2, MW)

Gruß
Andreas
 
Es ist ja auch kein Problem. Bei mir dauert das Auslesen im Schnitt 15ms (ich teste mit ACControl). Allerdings erfasst die Prozedur von Earny die Zahlenwertänderung in MW20 nur in 256er Schritten, da das MB21 nicht ausgelesen wird. Deshalb wird in VB nur alle 2-3sec ein veränderter Wert angezeigt (S7-Wert wird alle 100ms um 10 verändert)
 
Zurück
Oben