Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: WinCC Verbindungsprobleme Libnodave

  1. #1
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich habe ein .Net Control in WinCC (V7.0 und V7.2) eingebunden, der Verbindungsaufbau, Schreiben, Lesen aus SPS funktioniert prima, jedoch kommt es von Zeit zu Zeit zu Verbindungsaufällen (Verbindung zur SPS funktioniert jedoch, ping geht). Auch wenn ich einen Button, in meinem Control einfüge, zum erneuten Verbindungsaufbau, funktioniert es nicht, erst nachdem ich die Runtime neu starte, ist die Verbindung wieder da. Wenn ich die Runtime etwas laufen lasse, dann geht die Verbindung auch wieder.

    Arbeitet vll auch jemand mit Libnodave und hatte ein ähnliches Problem?
    Und hat vll. eine Idee, wo der Fehler liegen könnte?

    Vielen Dank im Voraus!

    mfG
    Zitieren Zitieren WinCC Verbindungsprobleme Libnodave  

  2. #2
    Registriert seit
    09.08.2006
    Beiträge
    3.626
    Danke
    911
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Kannst Du mir erklären, warum Du in WinCC libnodave zur Kommunikation mit der SPS verwendest? Eigentlich sollte ja WinCC in der Lage sein, eigenständig mit der SPS zu kommunizieren ?

    Gruß.

  3. #3
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Natürlich, aber für einige Einstellungen, welche sonst sehr viele Variablen verbrauchen würden, arbeiten wir mit diesem .Net Control, welches ich mit VB programmiert habe, und so auch viele Funktionen dort nutzen konnte, die in WinCC etwas eingeschränkter sind. Denn so greife ich mit dem .Net Control über libnodave direkt auf die SPS zu...

    mfG

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Gibst Du nach dem Schließen der Libnodave-Verbindung auch den verwendeten Socket/Port wieder frei?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Ich schließe die Libnodave-Verbindung ja eigentlich nicht (nicht wissentlich zumindest), es wird nur immer mal wieder zwischendurch (oft nach schnellen Bildwechseln) unterbrochen.
    Aber prinzipiell öffne ich ihn hiermit den Socket (...=libnodave.openSocket(102, IP) ) beim Aufbauen der Verbindung, und schließe ihn aber nirgends wieder...Sollte dieser wieder geschlossen werden?

    mfG Jenny

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Hmm, irgendwann gehen Dir dann Ressourcen aus.
    Beobachte mal die Anzahl der offenen Ports, z.B. mit netstat.

    Code:
    Private Sub cleanUp(ByRef ph As Long, ByRef di As Long, ByRef dc As Long)
    Dim res
    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)
        res = closeSocket(ph) 'bei ISO over TCP, sonst wird bei jedem opensocket() ein weiterer Port belegt
        ph = 0
    End If
    End Sub
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Blockmove (09.10.2013),Jennsy (10.10.2013)

  8. #7
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo PN/DP,
    Vielen Dank für deine Antwort! Habe das anscheinend komplett überlesen in den Erklärungen.
    Nur ich hätte noch eine Bitte, könntest du mir das vielleich noch erklären, wo ich das einbauen muss? Weil beim Laden der Form stelle ich ja wie gesagt, die Verbindung her, und öffne den Socket, aber ich darf ihn hier ja auch nicht schon wieder schließen, oder doch? Bitte entschuldige meine vielleicht blöde Frage, aber ich arbeite noch nicht wirklich lange in dieser Branche und für mich ist das alles noch so gut wie Neuland...
    Code:
    Private Sub UserControl1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ' *******************Verbindung aufbauen**************************************************
            fds.rfd = libnodave.openSocket(102, IP)
            fds.wfd = fds.rfd
            If fds.rfd > 0 Then       ' if step 1 is ok
                di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
                di.setTimeout(1000000)  ' Make this longer if you have a very long response time
                res = di.initAdapter
                '
                If res = 0 Then       ' init Adapter is ok
                    dc = New libnodave.daveConnection(di, 0, rack, slot)  ' rack and slot don't matter in case of MPI
                    res = dc.connectPLC()
                    If res = 0 Then
                        Connection = True
                        ToolStripStatusLabel1.Text = "Connected " + IP
                    Else
                        ToolStripStatusLabel1.Text = "Connection lost"
    
                    End If
                End If
            End If
            '*****************Sichtbarkeiten beim Start festlegen
    
            '***und dann werden noch die Texte für Buttons etc. aus einem Textfile geladen, bzw. die Sprachauswahl getroffen
    End Sub

  9. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Jennsy Beitrag anzeigen
    für einige Einstellungen, welche sonst sehr viele Variablen verbrauchen würden, arbeiten wir mit diesem .Net Control, welches ich mit VB programmiert habe
    Solche Powertag_sparen-Verbindungen würde ich nur für eher selten benötigte Sachen benutzen. Für alles was zyklisch benötigt wird würde ich auf jeden Fall die WinCC-eigene Kommunikation benutzen. Außerdem muß man sicher aufpassen, daß man keine Tags in beiden Verbindungen verwendet.


    Zitat Zitat von Jennsy Beitrag anzeigen
    könntest du mir das vielleich noch erklären, wo ich das einbauen muss?
    Mit "richtigem" VB, .Net, Forms ... habe ich keine Erfahrung - kann also keine fundierten Tips geben. Mein Code ist VBA (Excel). Ein komplett-Projekt findest Du hier.

    Ich lese immer nur einmalig "auf Knopfdruck" die Daten aus der SPS.
    Dafür baue ich die LibNoDave-Verbindung zur SPS auf, lese meine Variablen und schließe die Verbindung sofort wieder. Etwa so:
    Code:
    Dim ph As Long, di As Long, dc As Long
    Dim res, resmb, peer$, MpiPpi, Rack, slot
    
    ph = 0: di = 0: dc = 0
    ' Verbindungsparameter TCP: peer$, Rack, Slot (MpiPpi wird nicht genutzt)
    peer$ = "192.168.123.123"
    MpiPpi = 2: Rack = 0: slot = 2
    
    ph = openSocket(102, peer$) ' for ISO over TCP
    If (ph > 0) Then
        di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
        res = daveInitAdapter(di)
        If res = 0 Then
            dc = daveNewConnection(di, MpiPpi, Rack, slot)
            res = daveConnectPLC(dc)
            If res = 0 Then ' Verbindung zu PLC erfolgreich aufgebaut
    ...
                'Werte lesen aus DB123.DBB0...DBB13 14 Bytes
                res2 = daveReadBytes(dc, daveDB, 123, 0, 14, 0)
    ...
    End If
    
    Call cleanUp(ph, di, dc)
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #9
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Mit "richtigem" VB, .Net, Forms ... habe ich keine Erfahrung - kann also keine fundierten Tips geben. Mein Code ist VBA (Excel). Ein komplett-Projekt findest Du hier.
    Vielen, vielen Dank trotzdem.
    Nur verstehe ich nicht ganz, wann dieser CleanUp aufgerufen wird? Kann ich diesen CleanUp jedes Mal beim Laden der Form machen, bevor ich die Verbindung erneut überprüfe/herstelle und die Sockets öffne? Denn irgendwie scheint das bei mir nicht so ganz zu funktionieren

    Und wenn ich mit einem Button die Verbindung unterbreche:
    Code:
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click    
        dc.disconnectPLC()
            libnodave.closePort(fds.rfd)
            libnodave.closePort(fds.wfd)
           di.disconnectAdapter()
                 If res = 0 Then       ' init Adapter is ok
                dc = New libnodave.daveConnection(di, 0, rack, slot)  ' rack and slot don't matter in case of MPI
                res = dc.connectPLC()
                If res = 0 Then       ' init Adapter is ok
                    Connection = True
                    ToolStripStatusLabel1.Text = "Connected " + IP
                Else
                    ToolStripStatusLabel1.Text = "Connection lost"
                End If
    
            End If
    End Sub
    und mit einem zweiten wieder aktiviere:
    Code:
     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            If res = -1025 Or res = -1 Or res = 0 Then
                MsgBox("trifft zu", MsgBoxStyle.DefaultButton1, "Test")
                fds.rfd = libnodave.openSocket(102, IP)
                MsgBox("open socket", MsgBoxStyle.DefaultButton1, "Test")
                fds.wfd = fds.rfd
                If fds.rfd > 0 Then       ' if step 1 is ok
                    di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
                    di.setTimeout(1000000)  ' Make this longer if you have a very long response time
                    res = di.initAdapter
                    '
                    MsgBox(res, MsgBoxStyle.DefaultButton1, "Test")
                    If res = 0 Then       ' init Adapter is ok
                        dc = New libnodave.daveConnection(di, 0, rack, slot)  ' rack and slot don't matter in case of MPI
                        res = dc.connectPLC()
                        If res = 0 Then
                            Connection = True
                            ToolStripStatusLabel1.Text = "Connected " + IP
                        Else
                            ToolStripStatusLabel1.Text = "Connection lost"
    
                        End If
                    End If
                    End If
                End If
           
        End Sub
    geht das ganze, nur sobald, die Verbindung 'automatisch' unterbrochen wird, funktioniert es nicht mehr, sie mit diesem 'Verbindung herstellen'-Button zu reaktivieren...

    mfg Jenny
    Geändert von Jennsy (10.10.2013 um 09:59 Uhr)

  11. #10
    Registriert seit
    09.08.2006
    Beiträge
    3.626
    Danke
    911
    Erhielt 656 Danke für 542 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jennsy Beitrag anzeigen
    Bitte entschuldige meine vielleicht blöde Frage, aber ich arbeite noch nicht wirklich lange in dieser Branche und für mich ist das alles noch so gut wie Neuland...
    Zitat Zitat von PN/DP Beitrag anzeigen
    Solche Powertag_sparen-Verbindungen würde ich nur für eher selten benötigte Sachen benutzen. Für alles was zyklisch benötigt wird würde ich auf jeden Fall die WinCC-eigene Kommunikation benutzen. Außerdem muß man sicher aufpassen, daß man keine Tags in beiden Verbindungen verwendet.
    Jo, solch ein Kommentar lag mir schon lange auf der Zunge

    Nebenbei, man hat mit den selbstgebastelten Controls für WinCC auch meist mehr Ärger als Freude. Spätestens beim nächsten WinCC Update. Und was ist eigentlich bei WinCC Client-Server Lösungen? Da funktioniert das Ganze sowieso nicht.

    Ich kenn jetzt Deine Anwendung zwar nicht, aber die Frage, ob das Ganze Sinn macht, würd ich mir schon stellen.

    Gruß.

Ähnliche Themen

  1. WinCC Verbindungsprobleme
    Von Jennsy im Forum HMI
    Antworten: 1
    Letzter Beitrag: 30.07.2013, 07:53
  2. Libnodave<->S7 Verbindungsprobleme
    Von Magoo50 im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 04.04.2011, 18:42
  3. Verbindungsprobleme Libnodave SPS
    Von Peter1234 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 24.11.2010, 13:11
  4. Antworten: 3
    Letzter Beitrag: 07.06.2010, 15:39
  5. TP177A Verbindungsprobleme
    Von PhGruber im Forum HMI
    Antworten: 9
    Letzter Beitrag: 24.03.2010, 15:26

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •