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!

    • Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von monkye () aus folgendem Grund: Nachtrag...

    • Der WIZNET Chip hat EINE MAC und EINE IP und kann je nach Typ 4 oder 8 Socks parallel auf UDP oder TCP öffnen.

      Katip, du musst schon das Sample von MCS verstehen. Einfacher wird es leider nicht.
      Ich habe Software für die WIZNET Typen geschrieben, ohne die in Bascom integrierten Befehle, was es auf keinen Fall einfacher gestaltet!
      Code first, think later - Natural programmer :D
    • katipefendi schrieb:

      Hi,

      um mal das ganze einfach darzustellen, versuche ich den AVR per VB Software anzusprechen.
      Also, ohne Webseiten Aufruf.

      Der AVR soll als Server arbeiten.
      Ich bekomme das mit dem Socketlisten nicht hin.

      Aus dem Beispiel von MCS ist es ganz einfach erklärt nur im Praxis ist alles komplex.

      Hat jemand von Euch in der Richtung mal was getan?


      VG
      Katip

      Das Beispiel von MSC benutzt einen Zähler für die einzelnen Verbindungen (abhängig vom Typ des WizNet-Chips), um so die Verarbeitung zu unterscheiden - z.B. um eine Webseite auszuliefern oder Daten zu empfangen.

      Die Herausforderung besteht darin, die einzelnen Verbindungen nicht nur inhaltlich - sondern vielmehr in ihrem aktuellen Status auseinanderzuhalten. Die Basisstruktur ist ja da, in dem über eine simple Fallunterscheidung nach GET oder PUT gesucht wird. Um so variabler Deine geplanten Möglichkeiten sind, desto komplexer wird die Verwaltung die Du machen musst.

      In meinem ursprünglichen Beispiel ging es um eine mehr oder minder feste Seite mit der Möglichkeit Inhalte dynamisch darzustellen und/oder Benutzereingaben zu ermöglichen. Hauptthemen sind der verfügbare RAM (Puffer) und Flash bzgl. der Darstellung von Inhalten. Es lohnt u.U. auf eine große ATMEGA Version umzusatteln und dann mit SD-Karte mehr Freiräume in Sachen Speicher zu erreichen...
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Wäre es nicht einfacher nur einen Socket mit einer festen Ip und einem festen Port zu nutzen? Soweit ich das Datenblatt verstanden habe kann der Wiz selbständig auf Arp und Syn antworten. Dann muß ihm nur noch die Mac,IP und Port mitgeteilt werden, und das er zuhören soll bis der Winsock vom VB ihn anspricht .
      Wäre auch einfacher für den Avr. Er muß nicht immer alle Sockets abfragen nur noch einen und den kann man noch ein Int geben der dann auslöst wenn Daten eingegangen sind.
    • ich möchte das mein Laufschrift immer zuhört, d.h. wenn ich mit vb Socket die Verbindung aufbauen möchte, dann muss winzet diese annehmen, sobald die IP umd Port übereinstimmen.

      lt. Mcs soll das ja mit dem Befehl Socketlisten funktionieren, doch die Verbindung wird nach eingestellten Timeout abgebrochen.

      Der Timeout ist nichts anderes als in VB eingestelltes interval für das Verbindungsaufbau versuch.

      VG
      Katip
    • ich möchte das mein Laufschrift immer zuhört, d.h. wenn ich mit vb Socket die Verbindung aufbauen möchte, dann muss winzet diese annehmen, sobald die IP umd Port übereinstimmen.

      lt. Mcs soll das ja mit dem Befehl Socketlisten funktionieren, doch die Verbindung wird nach eingestellten Timeout abgebrochen.

      Der Timeout ist nichts anderes als in VB eingestelltes interval für das Verbindungsaufbau versuch.

      VG
      Katip

      six1 schrieb:

      ??? Nach deinen Worten hast du ein Problem mit einem Timeout in VB
      Nein six1, von PC zu PC funktioniert die Verbindung.
      Nur nicht zum Wiznet.
    • six1 schrieb:

      Dann zeig mal ein bisschen Sourcecode...
      Hi Six1,

      ich verwende den Code von MCS

      BASCOM-Quellcode

      1. '-----------------------------------------------------------------------------------------
      2. 'name : servertest_SPI.bas
      3. 'copyright : (c) 1995-2012, MCS Electronics
      4. 'purpose : start the easytcp after the chip is programmed
      5. ' and create 2 connections
      6. 'micro : Mega88
      7. 'suited for demo : yes
      8. 'commercial addon needed : no
      9. '-----------------------------------------------------------------------------------------
      10. $regfile = "m32def.dat" ' specify the used micro
      11. $crystal = 16000000 ' used crystal frequency
      12. $baud = 19200 ' use baud rate
      13. $hwstack = 128 ' default use 32 for the hardware stack
      14. $swstack = 128 ' default use 10 for the SW stack
      15. $framesize = 128 ' default use 40 for the frame space
      16. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
      17. 'Init the spi pins
      18. Spiinit ' xram access
      19. Print "Init , set IP to 192.168.178.29" ' display a message
      20. Enable Interrupts ' before we use config tcpip , we need to enable the interrupts
      21. 'Config Tcpip = Int1 , Mac = 12.128.12.34.56.78 , Ip = 192.168.1.70 , Submask = 255.255.255.0 , Gateway = 192.168.1.1 , Localport = 80 , Tx = $55 , Rx = $55 , Chip = W5100 , Spi = 1
      22. Config Tcpip = Noint , Mac = 0.8.&Hdc.77.05.11 , Ip = 192.168.178.29 , Submask = 255.255.255.0 , Gateway = 192.168.178.1 , Localport = 5000 , Chip = W5500 , Spi = 1 , Cs = Portb.4
      23. $lib "datetime.lbx" 'this example uses date time routines
      24. Dim Bclient As Byte ' socket number
      25. Dim Idx As Byte
      26. Dim Result As Word , Result2 As Word ' result
      27. Dim S As String * 80
      28. Dim Flags As Byte
      29. Dim Peer As Long
      30. Dim L As Long
      31. Do
      32. Waitms 1000
      33. For Idx = 0 To 3
      34. Result = Socketstat(idx , 0) ' get status
      35. Select Case Result
      36. Case Sock_established
      37. If Flags.idx = 0 Then ' if we did not send a welcome message yet
      38. Flags.idx = 1
      39. Result = Tcpwrite(idx , "Hello from W5100A{013}{010}") ' send welcome
      40. End If
      41. Result = Socketstat(idx , Sel_recv) ' get number of bytes waiting
      42. Print "Received : " ; Result
      43. If Result > 0 Then
      44. Do
      45. Print "Result : " ; Result
      46. Result = Tcpread(idx , S)
      47. Print "Data from client: " ; Idx ; " " ; Result ; " " ; S
      48. Peer = Getdstip(idx)
      49. Print "Peer IP " ; Ip2str(peer)
      50. Print "Peer port : " ; Getdstport(idx)
      51. 'you could analyse the string here and send an appropiate command
      52. 'only exit is recognized
      53. If Lcase(s) = "exit" Then
      54. Closesocket Idx
      55. Elseif Lcase(s) = "time" Then
      56. Result2 = Tcpwrite(idx , "12:00:00{013}{010}") ' you should send date$ or time$
      57. End If
      58. Loop Until Result = 0
      59. End If
      60. Case Sock_close_wait
      61. Print "close_wait"
      62. Closesocket Idx
      63. Case Sock_closed
      64. Print "closed"
      65. Bclient = Getsocket(idx , Sock_stream , 5000 , 64) ' get socket for server mode, specify port 5000
      66. Print "Socket " ; Idx ; " " ; Bclient
      67. Socketlisten Idx
      68. Print "Result " ; Result
      69. Flags.idx = 0 ' reset the hello message flag
      70. Case Sock_listen ' this is normal
      71. Case Else
      72. Print "Socket status : " ; Result
      73. End Select
      74. Next
      75. Loop
      76. End
      Alles anzeigen
    • six1 schrieb:

      Bclient = Getsocket(idx , Sock_stream , 5000 , 64 0)
      So, ich habe mal jetzt den Parameter auf 0 gesetzt hat funktioniert dann wieder auf 64 und es funktionierte immer noch.
      OK...

      Nun, stürzt das ganze aber ab.

      Habe jeden Schritt fotografiert:

      1. Verbunden und warte auf weitere Commandos
      bascom1.PNG

      2. Text = "time" gesendet als Ergebnis 5 erhalten und AVR blieb stehen.
      bascom2.PNG

      3. Erst nach dem ich die Verbindung vom PC Software zu AVR trenne, wird mir der zuvor gesendete Text = time angezeigt.
      Wobei dieser Schritt gar nicht ausgeführt wird.

      BASCOM-Quellcode

      1. If Lcase(s) = "exit" Then
      2. Closesocket Idx
      3. Elseif Lcase(s) = "time" Then
      4. Result2 = Tcpwrite(idx , "12:00:00{013}{010}") ' you should send date$ or time$
      5. End If

      bascom3.PNG

      Source für den VB.net

      BASCOM-Quellcode

      1. Option Explicit On
      2. Option Strict On
      3. Public Class Form1
      4. Private Sub Winsock1_Connected(sender As Winsock_Control.Winsock) Handles Winsock1.Connected
      5. Invoke(Sub() Button1.Enabled = False)
      6. Invoke(Sub() Button3.Enabled = True)
      7. End Sub
      8. Private Sub Winsock1_DataArrival(sender As Winsock_Control.Winsock, BytesTotal As Integer) Handles Winsock1.DataArrival
      9. Dim s As String
      10. Winsock1.GetData(s)
      11. Invoke(Sub() TextBox1.Text = "")
      12. Invoke(Sub() TextBox1.Text = s)
      13. End Sub
      14. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      15. Winsock1.RemoteIP = "192.168.178.29"
      16. Winsock1.RemotePort = 5000
      17. Winsock1.Connect()
      18. End Sub
      19. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      20. Winsock1.Send("exit")
      21. End Sub
      22. Private Sub Winsock1_Disconnected(sender As Winsock_Control.Winsock) Handles Winsock1.Disconnected
      23. Invoke(Sub() Button1.Enabled = True)
      24. Invoke(Sub() Button3.Enabled = False)
      25. Invoke(Sub() TextBox1.Text = "")
      26. End Sub
      27. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
      28. Winsock1.Close()
      29. End Sub
      30. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
      31. Winsock1.Send("time")
      32. End Sub
      33. Private Sub Winsock1_HandleError(sender As Winsock_Control.Winsock, Description As String, Method As String, myEx As String) Handles Winsock1.HandleError
      34. MsgBox(Description)
      35. Winsock1.Close()
      36. Winsock1.Dispose()
      37. End Sub
      38. End Class
      Alles anzeigen
    • six1 schrieb:

      Im Server Betrieb muss der Socket immer wieder geöffnet werden, sonst kannst du ja von außerhalb nicht verbinden!
      OK, aber ich sehe da bei der Verbindungsaufbau keinen unterschied, d.h. egal ob ich da eine 0 oder die 64 habe, Verbindung wird immer aufgebaut, auch nach dem Trennen kann ich mich wieder verbinden.

      Aber diese sollte jetzt keinen Einfluss darauf haben, dass das Programm im AVR stehn bleibt sobald ich den String time oder exit oder egal was sende, bis ich den Winsock Trenne.