S7 <--> tcp/ip

tobl2002

Level-2
Beiträge
75
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich habe folgende Aufgabenstellung:
Es soll eine Verbindung zu einer PC erstellt werden, welcher über Ethernet mit meiner S7-300 CPU vernetzt ist.
Dazu habe ich bereits einiges über LIBNODAVE gefunden und für die SPS mit AG_Send usw. Das ist soweit auch erst mal alles klar.

jetzt zu meinem Problem: die Daten vom pc sollen im folgenden Aufbau gesendet bzw. empfangen werden: <stx>C|Daten|etx>
Wie mache ich das?
muss ich das noch irgendwie als String in meinen DB schreiben, oder macht das meine baustein?

Danke für eure hilfe.

Gruß
Tobl
 
Das sind zwei verschiedene Wege.

Bei Libodave braucht Du auf der SPS eigentlich gar nix zu machen, da Du mit dem Treiber direkt auf die variablen der SPS zugreifen kannst.

Wenn Du einen AG_Send einsetzen mußt/willst geht das mit Linodave nicht, dann must Due am PC einen TCP/IP Port abfragen der der Daten empfängt.

Falls es keine konkrete Vorgabe gibt, wäre Libnodave wahrscheinlich die bessere Wahl.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok also kein AG_send^^

konkrete Vorgaben gibt es keine. Die Software soll mit C# erstellt werden, was ein anderer macht. und Libodave war da der erste gedanke.

gibt es ein sinnvolles beispiel in dem irgendwas von in die SPS geschrieben bzw. ausgelesen wird? Ich habe bis jetzt nur ein beispiel von vierlagig gefunden, in dem neue Db´s angelgt werden. Damit kann ich aber gar nix anfangen.

Sehr wichtig ist mir auch noch das oben genannte Format. wie bekomme ich das hin???
 
konkrete Vorgaben gibt es keine. Die Software soll mit C# erstellt werden, was ein anderer macht. und Libodave war da der erste gedanke.

gibt es ein sinnvolles beispiel in dem irgendwas von in die SPS geschrieben bzw. ausgelesen wird? Ich habe bis jetzt nur ein beispiel von vierlagig gefunden, in dem neue Db´s angelgt werden. Damit kann ich aber gar nix anfangen.

Sehr wichtig ist mir auch noch das oben genannte Format. wie bekomme ich das hin???

Wenn du dir Libnodave runtergeladen hast, dann solltest du dir dort mal im Ordner "Dot.NET\CS\" die Beispiele anschauen, die sollten dir weiterhelfen.
 
Wenn du dir Libnodave runtergeladen hast, dann solltest du dir dort mal im Ordner "Dot.NET\CS\" die Beispiele anschauen, die sollten dir weiterhelfen.

ich denke mal die datei kann ich mir nur mit c# anschauen, was ich aber leider nicht da habe. und wie geschrieben macht diesen bereich ein anderer und habe ich auch nix mit am hut (nur später die genauen daten absprechen). mir geht es nur um die sps.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich denke mal die datei kann ich mir nur mit c# anschauen, was ich aber leider nicht da habe. und wie geschrieben macht diesen bereich ein anderer und habe ich auch nix mit am hut (nur später die genauen daten absprechen). mir geht es nur um die sps.

Na dann bist du fein raus ;), da muss sich der PC Programmierer was ausdenken, was für diesen allerdings kein Problem sein dürfte. Bei der Verwendung Von Libnodave brauchst du auf der Seite der SPS nur den Bereich bereitstellen wo die Daten geschrieben bzw. gelesen werden sollen.
 
Excel

Hallo.

Ich bin gerade dabei das Excel beispiel von vierlagig zu testen.
Ich arbeite mit einer Soft-SPS die auch richtig eingerichtet ist und auch online alles funktioniert.
beim aufrufen des befehls daveconnectPLC(dc) hängt sich jedesmal mein Excel auf.

ist die übertragungsgeschwindigkeit bei Isoontcp egal?


Gruß
Tobi
 
so, ich bin dann mal einen schritt weiter gekommen, daten schreiben und lesen funktioniert. aber leider nur 1x... danach hängt sich wieder alles auf^^

hier ist mal der code den ich verwende:
Code:
Sub Byte_schreiben()
Dim buffer(1024) As Byte
Dim ph As Long, di As Long, dc As Long
res = initialize(ph, di, dc)
Db = 200
If res = 0 Then
'daveWriteBytes(dc, daveDB, Datenbausteinnummer, Startadresse, länge, Buffer)
If res = 0 Then
    a = davePut16(buffer(0), Cells(16, 2))
    res2 = daveWriteBytes(dc, daveDB, Db, 0, 2, buffer(0))
 
    Else
        e$ = daveStrError(res)
 
    End If
End If
Call cleanUp(ph, di, dc)
End Sub
 
Private Function initialize(ByRef ph As Long, ByRef di As Long, ByRef dc As Long)
ph = 0
di = 0
dc = 0
Rem uncomment the daveSetDebug... line, save your sheet
Rem run excel from dos box with: excel yoursheet >debugout.txt
Rem send me the file debugout.txt if you have trouble.
'Call daveSetDebug(daveDebugAll)
initialize = -1
port$ = "102"
peer$ = "192.168.0.5"
ph = openSocket(port$, peer$)    ' for ISO over TCP
Cells(2, 1) = "port handle:"
Cells(2, 2) = ph
If (ph > 0) Then
di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
'
'You can set longer timeout here, if you have  a slow connection
'    Call daveSetTimeout(di, 500000)
    res = daveInitAdapter(di)
    Cells(3, 1) = "result from initAdapter:"
    Cells(3, 2) = res
    If res = 0 Then
' with ISO over TCP, set correct values for rack and slot of the CPU
Rack$ = Cells(5, 2)
Slot$ = Cells(6, 2)
        dc = daveNewConnection(di, 0, Rack$, Slot$)
        res = daveConnectPLC(dc)
        Cells(4, 1) = "result from connectPLC:"
        Cells(4, 2) = res
        If res = 0 Then
            initialize = 0
        End If
    End If
End If
End Function
 
'
' Disconnect from PLC, disconnect from Adapter, close the serial interface or TCP/IP socket
'
Private Sub cleanUp(ByRef ph As Long, ByRef di As Long, ByRef dc As Long)
If dc <> 0 Then
    res = daveDisconnectPLC(dc)
    Call daveFree(dc)
    dc = 0
End If
If di <> 0 Then
    res = daveDisconnectAdapter(di)
    Call daveFree(di)
    di = 0
End If
If ph <> 0 Then
    res = closePort(ph)
    ph = 0
End If
End Sub

Kann mir irgendjemand dabei schnell helfen? wenn nicht muss ich wohl oder übel eine OPC server nehmen, da die Anlage schon bald fertig sein muss.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie bereits von jabba gesagt, sind kannst du mit LibNoDave direkt auf die CPU daten zugreiffen (braucht eine PG-Kommunikations Ressource auf der SPS).
So wie du schreibst, brauchst du aber eine TCP-IP Kommunikation um deine Protokollvorgabe mit Start und Endzeichen zu erfüllen. Da kämen dann AG_SEND / AG_RECV zum einsatz.
 
Wenn Du eine reine TCP/IP Kommunikation machen willst, haben wir dafür eine C++ Klasse.
http://pvbrowser.de/pvbrowser/sf/manual/rllib/html/classrlSocket.html

Damit kannst Du Dein Format problemlos realisieren.

Als Alternative zu libnodave gibt es noch unsere Implementierung.
http://pvbrowser.de/pvbrowser/sf/manual/rllib/html/classrlSiemensTCP.html

Wenn Ihr C# verwendet, vermute ich mal, ist das unter Windows.
Da sollte es kein Problem sein unsere rllib.lib von C# aus anzusprechen,
der PC Programmierer muss nur noch die Anbindung an das C++ Interface machen, was er ja schon öfters gemacht haben sollte.

Du findest unser Projekt unter:
http://pvbrowser.org

Unter
http://tech.groups.yahoo.com/group/pvbrowser/
kann da auch diskutiert werden.

Zur Not auch auf Deutsch :-)
 
Zurück
Oben