libnodave anfänger

dannyli

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Erstmal grosses Lob ist ein echt klasse Forum hier.......

Habe im Rahmen meiner Bachelorarbeit die Aufgabe verschiedene DB aus einer
S7 CPU 314 2DP auszulesen und in eine SQL DB zu schreiben.Dies scheit ja laut den Beiträgen mit libnodave möglich zu sein. Da ich im Bereich Hochsprachen so gut wie keine Ahnung habe versuche ich ich mich nun in das Thema einzulesen:

Im Ordener doc\gettingStarted unter What the programm can do werden verschiedene Optionen beschrieben um über das Testprogramm mit der CPU zu kommunizieren If you specify the option -w........ usw.
Will in VB2008 schreiben

Hier meine Fragen: -kann ich in vb2008 schreiben? ist das testprogramm im dot.net ordener unter vb das richtige für mich zum testen?Wo kann ich die o.g. Optionen einstellen?
Wäre weiterhin dankbar wenn ich ein paar allgemeine Informationen über das strukturieren eines solchen Programms bekommen könnte bzw. wie ich libnodave im Programm einsetze.

so denke da reicht erstmal
vielen dank für eure Bemühungen schon mal vor ab.....

mfG
dannyli
 
Hallo dannyli,

ich arbeite seit ca. 2 Jahren mit libnodave und kann mit voller Überzeugung sagen, dass das was du vorhast wirklich so funktioniert!

Als erstes würde ich hingehen und zuerst einmal ein Testprogramm schreiben, mit dem du einmal die Kommunikation aufbauen, abbauen und Werte aus der SPS lesen bzw. schreiben kannst. Das kannst du dann ja so lange erweitern bis es dann auch noch die Daten in die Datenbank schreibt und dann zum Schluss das ganze zu automatisieren.

Ich persönlich programmiere meine Programme bevorzugt mit Delphi, davon gibt es auch eine kostenlose Version (Turbo Delphi) und dafür ist auch eine Komponente dabei, mit der das Arbeiten mit libnodave relativ einfach wird, ob und wie es mit VB2008 funktioniert kann ich dir nicht sagen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Human

Erstmal danke für deine Antwort. Habe versucht ein kleines Programm zu erstellen mit dem ich erstmal eine Verbindung zur SPS herstellen kann. bekomme nun angezeigt libnodave.doserialType is not defined. habe die libnodave .dll schon in mein system 32 kopiert. was muss ich machen um die libnodaves zu definieren?
 
Ich mu0ß mal blöd nachfragen. Ist VB2008 nicht .Net? Da gabs dann doch noch eine Wrapper-DLL.
 
Hallo Ralle

wie gesagt bin ich blutiger Amfänger was Hochsprachen betrifft. Programmiere mit MS Visual Basic Express Edition. Habe für meine ersten versuche ein älteres Beispiel von earny verwendet siehe:
http://www.sps-forum.de/showthread.php?t=24391 dieses Beispiel konnte ich soweit nachvollziehen und eine eigene Form in 2008 erstellen. mit der ich zunächst mal eine Kommunikation aufbauen will. hier mal den code den ich bis jetzt geschrieben habe:

Option Explicit On
Option Strict Off
Public Class Form1
Dim localMPI As Integer = 0, plcMPI As Integer = 2
Dim fds As libnodave.daveOSserialType
Dim di As libnodave.daveInterface
Dim dc As libnodave.daveConnection
Dim res As Integer = 1
Private Declare Function daveGetU8from Lib "libnodave.dll" (ByRef buf As Byte) As Byte
Private Declare Function daveGetS8from Lib "libnodave.dll" (ByRef buf As Byte) As Short
Private Declare Function daveGetS16from Lib "libnodave.dll" (ByRef buf As Byte) As Short
Private Declare Function daveGetS32from Lib "libnodave.dll" (ByRef buf As Byte) As Integer
Private Declare Function daveGetFloatfrom Lib "libnodave.dll" (ByRef buf As Byte) As Single

Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick
Select Case fds.rfd 'Portstatus - lesen
Case 0
txtFDS.Text = "Nicht verbunden"
txtFDS.BackColor = Color.Orange
Case Is > 0
txtFDS.Text = "OK"
txtFDS.BackColor = Color.Green
Case Is < 0
txtFDS.Text = "Fehler"
txtFDS.BackColor = Color.Red
End Select
Select Case res 'Adapterstatus - lesen
Case 0
txtRES.Text = "OK"
txtRES.BackColor = Color.Green
Case Is < 0
txtRES.Text = "Fehler LibNoDave"
txtRES.BackColor = Color.Red
Case Is > 0
txtRES.Text = "Fehler CPU"
txtRES.BackColor = Color.Orange
End Select
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ByVal e As System.EventArgs) Handles Button1.Click
If rdbIP.Checked = True Then Call ISO_TCP()
If rdbCOM.Checked = True Then Call MPI()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ByVal e As System.EventArgs) Handles Button2.Click
di.disconnectAdapter()
libnodave.closePort(fds.rfd)
fds.rfd = 0
res = 1
di = Nothing
End Sub
Public Sub ISO_TCP()
Dim IP As String
IP = cbxIP.Text
If IP <> "" Then 'Kontrolliert, ob der Bediener eine Eingabe gemacht hat
fds.rfd = libnodave.openSocket(102, IP) 'Portstatus - lesen
fds.wfd = fds.rfd 'Portstatus schreiben = Portstatus - lesen
di = New libnodave.daveInterface(fds, "Mein Interface", localMPI, _
libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
di.setTimeout(1000000)
res = di.initAdapter
If res = 0 Then 'initAdapter OK
' Rack und Slot spielen keine Rolle bei diesem Protokoll
dc = New libnodave.daveConnection(di, plcMPI, 0, 2)
res = dc.connectPLC()
End If
Else
MsgBox("Bitte Comport angeben", MsgBoxStyle.Information, "Fehler")
End If
End Sub

Die rot markierten bereiche werden als nicht definiert deklariert weiss du oder jemand anderes damit anzufangen???
mfG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Fdür mich sieht das so aus, als wenn das aus irgendeiner anderen Scriptdatei oder Klasse kommt.

Ich bin mir da jetzt nicht ganz sicher, aber es müsste doch so eine Funktion geben, mit der du nach der Deklaration suchen kannst.

Mach das Originalprojekt auf und such mal danach, das wird da sicher irgendwo drin sein.
 
Ich seh das ähnlich wie Human. daveOSserialType findet sich z.Bsp. in der libnodave.net.dll. Keine Ahnung, wie die eigentlich bei VB2008 eingebunden wird. Kann sein, daß hier noch in irgendwas in VB eingetragen werden muß.
 
also die definition scheit funktioniert zu haben, falls mal jemand das problem haben sollte:

rechte Maustaste auf Projektname dann auf verweis hinzufügen, reier durchsuchen, im libnodave ordner order dot.net die libnodave.net.dll hinzufügen.

habe jetz noch ein sytax problem was bei vb 2005 nicht aufgetreten ist, gibt es da eine möglichkeit das anzupassen?
 
Meine Kristallkugel scheint gerade kaputt zu sein, kannst du vielleicht noch sagen an welcher Stelle von der Syntaxfehler auftritt?
 
:D

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ByVal e As System.EventArgs) Handles Button1.Click
If rdbIP.Checked = True Then Call ISO_TCP()
If rdbCOM.Checked = True Then Call MPI()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ByVal e As System.EventArgs) Handles Button2.Click
di.disconnectAdapter()
libnodave.closePort(fds.rfd)
fds.rfd = 0
res = 1
di = Nothing
End Sub


an den markierten stellen tritt er auf.....

weiterhin habe ich in folgenden codeabschnitt noch ein problem mit der laut VB2008 Handles Klausel diese erfordert eine witheventsvariable, die im enthaltenen Typ oder einem seiner Basistypen definiert wird

Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick


meine letzten drei fehler bis zum ersten Test.......

Gruss dannyli
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:D

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ByVal e As System.EventArgs) Handles Button1.Click
If rdbIP.Checked = True Then Call ISO_TCP()
If rdbCOM.Checked = True Then Call MPI()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ByVal e As System.EventArgs) Handles Button2.Click
di.disconnectAdapter()
libnodave.closePort(fds.rfd)
fds.rfd = 0
res = 1
di = Nothing
End Sub


an den markierten stellen tritt er auf.....

weiterhin habe ich in folgenden codeabschnitt noch ein problem mit der laut VB2008 Handles Klausel diese erfordert eine witheventsvariable, die im enthaltenen Typ oder einem seiner Basistypen definiert wird

Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick


meine letzten drei fehler bis zum ersten Test.......

Gruss dannyli

Verstehe ich gerade nicht.
Die ganze Zeile mit dem rot markierten ByVal ist doch Käse. Da fehlt doch ein Stück Code vorher!
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ByVal e As System.EventArgs) Handles Button1.Click
If rdbIP.Checked = True Then Call ISO_TCP()
If rdbCOM.Checked = True Then Call MPI()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ByVal e As System.EventArgs) Handles Button2.Click
di.disconnectAdapter()
libnodave.closePort(fds.rfd)
fds.rfd = 0
res = 1
di = Nothing
End Sub


an den markierten stellen tritt er auf.....

weiterhin habe ich in folgenden codeabschnitt noch ein problem mit der laut VB2008 Handles Klausel diese erfordert eine witheventsvariable, die im enthaltenen Typ oder einem seiner Basistypen definiert wird

Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick


meine letzten drei fehler bis zum ersten Test.......

Gruss dannyli
 
Hab den code aus dem vb2005 projekt von earny übernommen.
könntest du mir vieleicht einen hinweis geben was vorher noch kommen muss. verstehe das so, das wenn ich den button verbinden betätige und der jeweilige ratio button angewählt ist die entsprechende verbindung aufgebaut wird...:confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Private Sub Button1_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles Button1.Click
If rdbIP.Checked = True Then Call ISO_TCP()
If rdbCOM.Checked = True Then Call MPI()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
di.disconnectAdapter()
libnodave.closePort(fds.rfd)
fds.rfd = 0
res = 1
di = Nothing
End Sub


so muss es heissen dann sind auch die fehler weg sorry
 
Private Sub Button1_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles Button1.Click
If rdbIP.Checked = True Then Call ISO_TCP()
If rdbCOM.Checked = True Then Call MPI()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
di.disconnectAdapter()
libnodave.closePort(fds.rfd)
fds.rfd = 0
res = 1
di = Nothing
End Sub

so muss es heissen dann sind auch die fehler weg sorry

Sag ich doch ;) :ROFLMAO:
 
so das Timerproblem ist auch gelöst......

und das schlimmste ist alle Programmierer ausser haus weder Crossoverkabel noch MPI schnittstelle.....zum testen :rolleyes: naja glaub das ist das zeichen um ins wochenende zu starten...

vielen dank ralle und human für eure unterstützung.......
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so das Timerproblem ist auch gelöst......

und das schlimmste ist alle Programmierer ausser haus weder Crossoverkabel noch MPI schnittstelle.....zum testen :rolleyes: naja glaub das ist das zeichen um ins wochenende zu starten...

vielen dank ralle und human für eure unterstützung.......

Ich mach das mit einem normalen NW-Kabel, kein Cross-Over. Hängt vielleicht vom Laptop ab?

Schönes WE! :)
 
Jaja, über die Cross-Over-Kabel kann ich auch ein Liedchen singen... ich hatte mal 2 bis es ein Kollege mitbekommen hat... *ROFL*

Schönes Wochenende! :cool:
 
hallo leute
habe es gestern erfolgreich geschafft eine verbindung zu der sps herzustellen.
nun habe ich noch ein paar fragen. ich will aus mehreren DB immer wieder die gleichen werte auslesen. im doc ordner der libnodave gibts ja readbytes ich verstehe auch soweit den aufbau ,aber was hat es mit dem buffer auf sich? ist das so eine art speicher für die Daten die libnodave von der sps holt? weiterhin wird in anderen Beiträgen was von get methoden erwähnt was bedeutet das? und zu guter letzt würde mich noch interessieren wie ich das zyklische auslesen realisieren könnte vieleicht mit einer do/while schleife? wie gesagt sind meine Anfäge in hochsprchen programmierung.....

Grüsse dannyli
 
Zurück
Oben