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

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

Thema: TCP Socketverbindung zu S7/300 CP343-1 Lean

  1. #1
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich möchte Daten über TCP vom PC zur S7 und umgekehrt senden bzw. empfangen.
    Das ganze funktioniert soweit auch.

    Habe auf der S7 Seite eine Send/Receive TCP Verbindung und auf der PC Seite Socket (VB6).

    Mein Problem liegt im Verbindungsaufbau. Der erste funktioniert einwandfrei und sofort.
    Ein zweiter dauert teilweise bis zu 2 Min.
    Evtl. hängt das mit einer XP Sicherheitsfunktion zusammen, das ein Port nach der Verwendung für eine bestimmte Zeit blockiert wird.
    Auf der Socket Seite (wenn PC = Client) tritt dann der Fehler 100048 (Adresse ist bereits in Gebrauch) auf.

    Hatte irgendjemand schonmal ähnliche Probleme und eine Lösung (evtl. auch eine andere Lösung) dafür?
    Und wenn ja, welche?

    Danke für Eure Hilfe.

    Gruß
    Zitieren Zitieren TCP Socketverbindung zu S7/300 CP343-1 Lean  

  2. #2
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Wird für den weiteren Verbindungsaufbau dasselbe socket-Objekt verwendet oder ein neues? Wie wurde die "alte" Verbindung geschlossen?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  3. #3
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Guten Morgen Rainer,

    die Verbindung wird beim Beenden des Programms mit 'socket.close' geschlossen.
    Es ist dasselbe socket-objekt, gleicher Port.
    Hier mal ein Code-Ausschnitt ...

    server1 = socket-objekt auf der Form

    Code:
    Private Sub Form_Load()
        server1.Protocol = sckTCPProtocol
        server1.RemoteHost = "a.b.c.d"
        server1.LocalPort = 2001
        server1.RemotePort = 2000
        server1.Listen
    End Sub
     
    Private Sub server1_ConnectionRequest(ByVal requestID As Long)
        If server1.State <> sckClosed Then server1.Close
        server1.Accept requestID
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
       If server1.State = sckConnected Then
           server1.Close
       End If
    End Sub
     
    Private Sub server1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        MsgBox "Socket Error " & Number & ": " & Description
        server1.Close
    End Sub

  4. #4
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard


    Versuch mal den localport unspezifiert zu lassen.
    Eventuell =0 setzen, könnte helfen.


  5. #5
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Zitat Zitat von argv_user Beitrag anzeigen
    Versuch mal den localport unspezifiert zu lassen.
    Eventuell =0 setzen, könnte helfen.
    Das funktioniert zwar (diesen Vorschlag hab ich auch schon auf der Microsoft Website gelesen), hat aber den Nachteil, dass sich jeder mit dem CP verbinden kann.
    Oder gibt es eine Möglichkeit, auf S7-Seite nur die IP ohne Port Nr. einzugeben? In Netpro kommt dann immer die Meldung ungültige Port Nummer.

  6. #6
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Such mal nach setsockopt mit SO_REUSEADDR, das könnte helfen.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  7. #7
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard

    Zitat Zitat von ssound1de Beitrag anzeigen
    Das funktioniert zwar (diesen Vorschlag hab ich auch schon auf der Microsoft Website gelesen), hat aber den Nachteil, dass sich jeder mit dem CP verbinden kann.
    Oder gibt es eine Möglichkeit, auf S7-Seite nur die IP ohne Port Nr. einzugeben? In Netpro kommt dann immer die Meldung ungültige Port Nummer.
    Tatsächlich kann sich jeder mit dem CP verbinden, der Port und IP kennt.
    Die Simatic-Steuerungen kennen da nach meinem bisherigen Kenntnisstand
    keine Zugriffsbeschränkungen. OK, mag sein, dass die RemotePort-Nummer als PIN durchgeht. Aber das hilft ja hier nicht weiter.

    Besser: Nicht die "Form" die Verbindung aufbauen und schliessen lassen,
    denn das ist Murks. Der Anwender kennt nämlich das Zeitverhalten der SPS nicht. Die braucht unter Umständen etwas interne Zeit, um eine Verbindung als beendet zu erklären. Stattdessen klickt da einer rum und wundert sich warum die SPS nicht schnell genug Antwort gibt.

    Lösung: Tatsächlich beim Programmstart, oder eben beim erstmaligen Aufruf der Form, die Verbindung aufmachen, das Zumachen aber aufheben bis zum Programmende, nicht nur bis zum Formende. Also einfach auflassen bis es keiner mehr braucht; das klappt bestimmt. Ist ein Merker.

  8. #8
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Ich kann doch nicht der einzige sein, der dieses Problem hat ...

    Danke für Eure Antworten.

    @Rainer
    Habe setsockopt probiert. Das Bit SO_REUSEADDR kann ich auch setzen.
    Das ganze funktioniert aber nur über die Bind Methode - da gibt es dann ein anderes Prob.
    Die Connect Methode liefert als Handle -1 was logischweise für setsockopt ungültig ist.
    Über Bind bekomme ich zwar ein Handle, Socket ist dann aber nicht im Socket.State = Connected (7) sondern im Socket.State = Connecting (6).
    Und bleibt da auch. Jetzt hänge ich an dem Punkt wieder fest.

    @argv_user
    Mein Testprog hat nur eine Form. Programmstart = Formload und Form unload = Ende und close.

    Noch irgendeine Idee?
    Wenn ichs nicht hinbekomme müssen wir halt mit den max. 2 Min. Verzögerung leben. Ist jetzt auch nicht superschlimm, aber trotzdem nervig.

    Und auf der S7 Seite nur die IP des Zielrechners ohne Port eingeben geht wohl nicht, oder? Dann wäre nämlich für die S7 klar, das nur eine Verbindung von Rechner ABC erlaubt ist und von sonst niemandem.

  9. #9
    Registriert seit
    13.03.2006
    Beiträge
    428
    Danke
    5
    Erhielt 43 Danke für 43 Beiträge

    Standard

    Ich kann mich düster daran erinnern früher auch mal so ein problem gehabt zu haben.
    Heute sieht das bei mir so aus:

    setsockopt(os,SOL_SOCKET,SO_REUSEADDR,(const char *) &option,sizeof(option));
    <snip>
    ret = bind(os, (struct sockaddr *) &localAddr, sizeof(localAddr));
    <snip>
    ret = listen(os, 5);
    <snip>
    s = accept(os, (struct sockaddr *) &sockaddr[0], &socklen);

    Also: SO_REUSEADDR ist wichtig und evtl. auch listen(os,5) damit er mehrere anliegende verbindungswünsche akzeptiert.

  10. #10
    Registriert seit
    13.03.2006
    Beiträge
    428
    Danke
    5
    Erhielt 43 Danke für 43 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ach, noch was:

    Bei der 2-ten verbindung muss nur noch accept aufgerufen werden.

    Nicht:setsockopt, bind und listen

Ähnliche Themen

  1. CP343-1 lean CP343-1 Lean
    Von M.R. im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.06.2010, 11:46
  2. Cp343-1 lean
    Von franzlurch im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.10.2008, 14:01
  3. Biete CP343-1 LEAN
    Von WendeMarkus im Forum Suche - Biete
    Antworten: 4
    Letzter Beitrag: 14.05.2008, 16:34
  4. CP343 Lean an S7 300 CPU
    Von Jochen Kühner im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.03.2007, 01:08
  5. 315-2DP und CP343-1 Lean
    Von tremendo im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 10.04.2006, 13:25

Lesezeichen

Berechtigungen

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