Anfänger Webserver mit Wiznet 5200

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • six1 schrieb:

      Nicht die Verbindung aufbauen und darauf hoffen, dass die in 2 Wochen auch noch steht, sondern die Verbindung aufbauen zum Server (Wiz), Daten senden und Sock wieder schließen!
      ?( ?( ?( ?(

      Aber Sock schließen bedeutet doch, die Verbindung trennen?!

      Eine TCP/IP Verbindung muss stabil stehen, wenn man sie aufbaut und solange bis man sie wieder trennt.
      Ich kann doch nicht vor jeden Sendevorgang die Verbindung aufbauen nach jedem Datenabruf oder nach jeden Sendevorgang die Verbindung wieder trennen.!?!?

      Irgendwas ist da faul.
    • katipefendi schrieb:

      Was könnte da die Ursache sein?
      du benutzt z.B. zeitintensive Stringoperationen, der Vorschlag mit dem Bytearray ist ja nicht einfach so gesagt.
      Das LF-Problem, das angesprochen wurde scheint mir auch noch nicht gelöst.
      Wireshark hilft, zu sehen, ob die Verbindung korrekt läuft.
      Ansonsten kannst du pro Port ein Timeout programmieren, das den Socket zurücksetzt und auf listen setzt.
      So haben wir es damals beim NET-IO gemacht

      P.S:Toll, den Beitrag hatte ich schon vor 3 Stunden geschrieben, aber das Sendeproblem hat ihn nicht abgeschickt...
    • Warum wird er geschlossen? Sollte er nicht horchen ob jemand was von ihm will und dann antworten. Egal ob 10x pro Sekunde oder 1 mal am Tag ? Wie muß ich mir den Verbindungsaufbau vorstellen? Sobald er Strom hat ist er da und jeder der ihn kennt sollte ihn fragen können. Und wenn er aus ist merken die Fragenden das er fehlt und probieren es später nochmal. Irgenwie sehe ich keinen Grund ihn zu schließen.
    • Das Closed wäre nur die Bestätigung auf das Fin oder eine komplettabschaltung? Wenn ein Fragender sich verabschiedet heißt das ja nicht das ein anderer nicht bedient werden sollte - oder der selbe sich bald wieder meldet.

      six1 schrieb:

      Du hast grundsätzlich den falschen Ansatz!
      Nicht die Verbindung aufbauen und darauf hoffen, dass die in 2 Wochen auch noch steht, sondern die Verbindung aufbauen zum Server (Wiz), Daten senden und Sock wieder schließen!
      Weshalb ist das falsch? Je nach Anwendung muß die Verbindung bis zum Verschrotten stehen bleiben - also über viele Jahre. Neulich war ich an einer Maschine da war selbst der Notaus nur an der Steuerung. Wenn die dann noch erst eine Verbindung aufbauen muß, ist der Arm ab.
    • Pluto25 schrieb:

      Das Closed wäre nur die Bestätigung auf das Fin oder eine komplettabschaltung?
      nein, da wird nichts abgeschaltet. Nach Fin kann die Verbindung u.U. weiter gehen, um den Port weiter zu benutzen.
      Nach Closed wird die Portnummer zu gemacht und dann setzt du den Port auf Listen.

      Pluto25 schrieb:

      Je nach Anwendung muß die Verbindung bis zum Verschrotten stehen bleiben
      nein, aber die Verbindung kann schon mal eine Weile stehen bleiben, je nach Größe der Daten. Wenn die Daten durch sind und nicht gleich weiter gemacht wird, nach Absprache, dann wird der Port geschlossen.

      Pluto25 schrieb:

      da war selbst der Notaus nur an der Steuerung. Wenn die dann noch erst eine Verbindung aufbauen muß, ist der Arm ab.
      Ich arbeite selbst mit solchen Maschinen, da ist der Notaus bestimmt nicht über IP angesteuert, das würde keiner abnehmen und die BG ist da sicher auch nicht mit einverstanden.
    • In dem Fall hängt er an einem Modul das mit RS232 o.ä. spricht. Und selbst da weiß ich nicht wie die die Abnahme bekamen. Sobald mir eine Modernere unterkommt werde ich berichten.
      Ich denke ich habe ein Verständniss Problem: Die Daten sind niemals (oder mehrmals pro Sekunde) durch. Irgendwas ist immer : Temperaturen abfragen, Motoren schalten, Schalterzustände erfassen usw.
    • Pluto25 schrieb:

      Ich denke ich habe ein Verständniss Problem: Die Daten sind niemals (oder mehrmals pro Sekunde) durch. Irgendwas ist immer : Temperaturen abfragen, Motoren schalten, Schalterzustände erfassen usw.
      Im Prinzip hast du eine Webseite, die aus mehreren Dateien besteht. Eine HTML Datei, Bilder, dynamisches Zeug.
      Der Browser ruft die Seite (html) auf und fragt dafür den Server nach einer Verbindung (Syn) für diese Daten.
      Es wird dann eine Portnummer ausgehandelt und die Datenlänge und die Übertragung beginnt.
      Während der Übertragung der html-Seite erkennt der Browser diverse andere nachzuladende Daten in dem html-Code, also Bilder, css usw. und fragt beim Server für jede Datei eine weitere Verbindung an. Der WIZ schafft bis zu 8 Stück davon.
      Wenn die Daten für den jeweiligen Port durch sind, wird wieder geschlossen und die nächste Verbindung ist startklar durch den listen Status.
      Wenn du einen Knopf auf der Webseite drückst, geht das Spiel von vorne los. (GET und POST) Dynamisches Zeug wie Ajax verwaltet der Browser und läd genauso nach, wie bei der Webseite.

      (Wenn ich das alles noch so richtig in Erinnerung habe, ist ne Weile her ;))
    • Michael schrieb:

      Im Prinzip hast du eine Webseite, die aus mehreren Dateien besteht. Eine HTML Datei, Bilder, dynamisches Zeug.
      Der Browser ruft die Seite (html) auf und fragt dafür den Server nach einer Verbindung (Syn) für diese Daten.
      Und das alles hübsch in gleichgroßen Paketen verpackt und verschnürt für den Versand :)
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Ein Sock wird nicht zwangsweise offen gehalten, um ab und zu mal ein paar Daten zu senden.
      Wenn dies das Ziel wäre, dann könntet ihr nie mit einem Server connecten, weil alle Socks für NICHTS offen gehalten wären...

      Man verbindet, tauscht die Daten aus und wenn das beendet ist, wird die Verbindung gekappt und der Server geht wieder in "Listen" für die nächste Connection.

      Vertraut mir, das klappt in aller Regel :D
      Code first, think later - Natural programmer :D
    • djmsc schrieb:

      Und das alles hübsch in gleichgroßen Paketen verpackt und verschnürt für den Versand
      Die Paketgröße ist nur an eine maximale Größe gebunden, die letztlich versendete Größe verwaltet der WIZ dynamisch.
      Der Flaschenhals ist hier der AVR, der Die Daten eh nicht schnell genug parallel dem WIZ liefern kann.
      Dann kann aus einem Paket mit 1500 Byte schnell mal 10 Pakete mit je 100 - 200 Byte werden ;)
    • Und da gehen unsere Welten auseinander: Während 'katipefendi' die Zeit wissen will und ich ein paar log- und Steuerdaten übertrage seid Ihr im WWW unterwegs. Da treffen ein paar 10 Byte auf etliche kilo oder sogar Megabyte. Dann reicht natürlich ein port mit einer fixen Portnummer nicht mehr. So n Avr kann schon einige einfache Webseiten vielleicht sogar mit Bildern betreiben etwa in dieser Art :
      thermoscope.at
      Aber darüber hinaus scheint er mir die falsche Wahl. Meißt hat er doch einen richtigen Job und nutzt das Wiz nur um Ergebnisse mitzueilen oder Befehle zu bekommen.
    • Also, das kann nicht sein.

      Ich baue die Verbindung auf, sende mein Text oder nicht und zwischen durch wird dann die Verbindung in willkürliche interval getrennt.
      Das ist nicht das richtiges Verhalten von einem TCP/IP Verbindung.


      Verbindungsaufbau PC seitig:

      BASCOM-Quellcode

      1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      2. Winsock1.RemoteIP = txtIP.Text
      3. Winsock1.RemotePort = CInt(txtPort.Text)
      4. Winsock1.Connect()
      5. End Sub

      Rückmeldung vom AVR:

      bascom1.PNG

      Es spielt keine Rolle, ob ich den Text sende oder nicht. Die Verbindung wird einfach willkürlich getrennt

      @six1, und das ist Korrekt?
    • Hallo nochmal,

      ich glaube ich habe den Fehler gefunden.
      Der Rest Draht war nicht im code berücksichtigt, zwar war es an der PinD. 7 angeschlossen aber nicht auf Set gesetzt.

      Nun habe ich im Code:
      Config PIND. 7 =Output
      W5500_nreset Alias PORTD. 7
      Set W5500_nreset

      So seit dem habe ich das Problem nicht, werde es aber weiterhin beobachten.

      wünsche allen noch eine Gute Nacht
      und danke an alle, die mich dabei unterstützt haben.

      :thumbsup:
    • Brauchst du eine halbe Stunde um "Hallo Bascom Welt" zum Ziel Gerät zu senden?

      Ich glaube, du hast mich auch nicht richtig verstanden.
      Der WIZ ist der SERVER und steht nach der Initialisierung im Zustand LISTEN; er wartet also auf eingehende Verbindungen.
      Deine Absicht ist, Texte und Status Bytes an den SERVER zu senden. Hierfür öffnest du eine Verbindung zum SERVER, übermittelst deine Daten und beendest die Verbindung wieder.


      Nun betrachten wir mal deine Logik:
      Du baust eine Verbindung zum Server auf und übermittelst deine Daten. Danach wird die Verbindung beibehalten, falls man irgendwann einen neuen Text senden möchte.
      Ist der Zeitpunkt gekommen, den neuen Text zu senden, was nach Stunden, Tagen oder Wochen der Fall sein könnte, sendet man einfach auf eine uralt Connection, welche wahrscheinlich durch Reboot des Server längst geschlossen ist.

      Überdenke mal dein Szenario und teile mal genauere Umstände und Abläufe deiner Gedanken mit, ansonsten kann ich keinen vernünftigen Grund sehen, eine Connection über längere Zeiträume zu etablieren.
      Etwas anderes ist es natürlich, wenn dein Server in einer Übertragung abbricht! Hier liegt ein Fehler vor.
      Code first, think later - Natural programmer :D
    • ...und was mir da noch in den Sinn kommt:
      Kommentiere mal die Verarbeitung deiner empfangenen Daten komplett aus!
      Also alle String Manipulationen auskommentieren.
      Es kann auch sein, das der Mega abschmiert und neu startet, weil eine Stringgrenze nicht gesetzt ist! (Abschließende 0)
      Es ist, auch wenn ich mich an dieser Stelle wiederhole, nicht sinnvoll, den Empfangspuffer als String zu behandeln.

      Im SUSI Projekt findest du "tonnenweise" Material zur Behandlung des Empfangspuffers und MEMCPY Funktionen!
      Code first, think later - Natural programmer :D
    • Wie äußert sich das Trennen? Wenn ich hier den Stecker ziehe oder Strom ausschalte dauert es eine Weile bis es überhaupt (von VB) bemängelt wird und sobald der Stecker wieder drin ist gehts weiter als wäre nichts gewesen. Natürlich meldet es sich wieder an aber das geschied im Hintergrund. Und dem AVR ists sowieso egal. Wie kommt denn dannach wieder eine Verbindung zustande? Reset am AVR? Computer neu hochfahren? Fritzbox resetten ?