IP, Submaske, Gateway und Port in Memory schreiben und lesen

    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!

    • Hast du mal deine Function Dhcp_ok geprüft? Vielleicht liegt der Fehler darin.
      Kann aber auch sein, dass du die Abfrage einfach nur an der falschen Stelle machst.
      Hast du auch mal probiert den Rückgabewert von Dhcp_ok vorher einer Variablen zu übergeben und dann erst aus zu werten (also die Variable)?
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Das ist jetzt sicher kontraproduktiv. Aber wozu das DHCP ? Nur das Deine Fritzbox den Wiz anzeigt? Oder gibt es einen "richtigen" Grund? Der Lernerfolg allein wäre es natürlich auch wert, aber wenn die Zeit begrenzt ist gibts vielleicht anderes das wichtiger ist / mehr Spass macht.
      Große Codes sind auch nur viele kleine von dehnen jeder Einzelne verständlich ist. Da ich nur mit einem Bildschirm arbeite, hat es sich als sinnvoll erwiesen die Dims auszudrucken um nicht immer zurückscrollen zu müssen. Kommentieren ist auch hilfreich. Wenn Deine .bas dann irgendwann zu 98% aus Kommentaren besteht blickt jeder durch ;)
      Meine Schreibfaulheit rächt sich jedesmal wenn ich nach Monaten einen Code ändern oder erweitern will.
      Dann werden erst mal ein Haufen Kommentare geschrieben und dann läufts fast von alleine.
    • Pluto25 schrieb:

      Aber wozu das DHCP ?
      ich möchte das für mein ego machen. Jedes Gerät, was Netzwerk fähig ist, hat die Optionen, IP manuell einzustellen, die Werk eingestellte IP zu verwenden oder die IP vom Router zu beziehen. Warum sollte mein Laufschrift das nicht haben?

      Und evtl. könnte ich die Funktion später auch für meine andere Projekte anwenden falls ich doch mal etwas mit TCP/IP machen möchte.

      Aber ich bin ja damit fast am Ziel, nur der Code möchte nicht an der Stelle weiter machen, wo er die Dhcp abfragt. Da ist irgend etwas faul. Und so groß ist ja der Gesamte Code nicht.

      Ohne den dhcp Teil funktioniert der Rest des Codes very well.

      Also ich bitte euch mich dabei zu unterstützen,
      da ich sonst die Nerven verlieren könnte und für immer den BASCOM deinstallieren und nie diesen Forum besuchen würde. Und ihr hättet dann einen Problem; nämlich einen Türken weniger im Forum :D :D
      Aber ich denke, bin der einzige Türke hier, denn alle anderen sind Fußball fun, ich leider nicht. Bin BASCOM FUN a_22_9ac28a82

      Vg
      Katip
    • Könnte es sein, das hier der verschachtelte IF... einfach zu viel ist und es kommt nicht von hier raus, warum auch immer??

      BASCOM-Quellcode

      1. If Ip_from_dhcp = 0 Then
      2. If Dhcp_ok() = 1 Then
      3. Print "DHCP OK"
      4. Else
      5. Print "DHCP Error"
      6. End If
      7. Else
      8. Gosub Set_eth_values
      9. End If
      Alles anzeigen
      ich meine das hier Print "DHCP OK" wird ja ausgegeben und warum geht es nicht weiter?
      das ist ein Rätsel

      Und wenn If Ip_from_dhcp = 1 ist, dann läuft es einwandfrei mit Gosub Set_eth_values
    • Hast du denn schon mal probiert die Abfrage an einer anderen Stelle einzufügen?


      BASCOM-Quellcode

      1. $regfile = "m32def.dat"
      2. $crystal = 16000000
      3. $baud = 19200
      4. $hwstack = 128
      5. $swstack = 128
      6. $framesize = 128
      7. $lib "datetime.lbx"
      8. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
      9. Spiinit
      10. Enable Interrupts ' before we use config tcpip , we need to enable the interrupts
      11. W5500_nreset Alias Portd.7
      12. Config Pind.7 = Output
      13. Reset W5500_nreset
      14. Waitms 5
      15. Set W5500_nreset
      16. Waitms 500 'Diese Zeitinterval muss mindestens 300ms sein, damit das W5500 initialisieren kann
      17. '######################### VARIABLEN FÜR DIE ETHERNET VERBINDUNG ###############
      18. Declare Function Xidcookie_ok() As Byte
      19. Declare Function Parse_dhcp_msg(byval Doption As Byte) As Byte
      20. Declare Function Dhcp_ok() As Byte
      21. Declare Sub Print_parse()
      22. 'we will use the tt array only in the begin
      23. Dim Tt(548) As Byte 'DHCP buffer
      24. Dim Xid(4) As Byte
      25. Dim Mac_add(6) As Byte
      26. Dim Pa(4) As Byte
      27. Dim Dhcp_ip(4) As Byte , Dhcp_submask(4) As Byte , Dhcp_gateway(4) As Byte
      28. 'Transaction ID
      29. 'This number should be random but we use the MAC address 0.8.220.77.05.11
      30. Xid(1) = 220
      31. Xid(2) = 77
      32. Xid(3) = 05
      33. Xid(4) = 15
      34. 'Mac Address
      35. 'This number should match the one in the 'Config Tcpip...' line
      36. 'Do not use first byte
      37. Mac_add(1) = 0
      38. Mac_add(2) = 8
      39. Mac_add(3) = 220
      40. Mac_add(4) = 77
      41. Mac_add(5) = 05
      42. Mac_add(6) = 15
      43. Dim Ee_ip(4) As Eram Byte 'At 4
      44. Dim Ee_mask(4) As Eram Byte 'At 6
      45. Dim Ee_gateway(4) As Eram Byte 'At 14
      46. Dim Ee_port As Eram String * 4 'At 18
      47. Dim Eth_ip(4) As Byte
      48. Dim Eth_mask(4) As Byte
      49. Dim Eth_gateway(4) As Byte
      50. Dim Eth_port As String * 4
      51. Dim Ip_ As Long
      52. Dim Subnetmask_ As Long
      53. Dim Gateway_ As Long
      54. Dim Port_ As Long
      55. Config Pina.1 = Input
      56. Porta.1 = 1
      57. Ip_from_dhcp Alias Pina.1
      58. Config Tcpip = Noint , Mac = 0.8.220.77.05.15 , Ip = Ip_ , Submask = Subnetmask_ , Gateway = Gateway_ , Localport = 2005 , Chip = W5500 , Spi = 1 , Cs = Portb.4
      59. Waitms 300
      60. '######################## ENDE DER ETHERNET VARIABLEN ##########################
      61. '-------------------------------------------------- WATCHDOG ZÄHLER FÜR DEN TIMEOUT ------------------------------------------
      62. Config Timer1 = Timer , Prescale = 64 'Timer konfigurieren
      63. On Timer1 Timerroutine 'Timerinterrupt Subroutine zuweisen
      64. Enable Timer1 'Timer aktivieren
      65. Timer1 = 13036 '210ms
      66. Stop Timer1
      67. '-----------------------------------------------------------------------------------------------------------------------------
      68. Print "Config Timer1"
      69. Config Pina.0 = Input
      70. Porta.0 = 1
      71. Ipreset Alias Pina.0
      72. Config Portc = Output
      73. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den Power LED Grün LED
      74. Config Portd.2 = Output 'PIN 26 am AVR
      75. Betriebsled Alias Portd.2
      76. Betriebsled = 1
      77. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den Blau LED
      78. Config Portd.3 = Output
      79. Interfaceactivated Alias Portd.3
      80. Interfaceactivated = 1
      81. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den TimeOut Orange LED
      82. Config Portd.6 = Output
      83. Timeoutled Alias Portd.6
      84. Timeoutled = 1
      85. '-------------------------------------- WATCHDOG FÜR DEN INTERNEN SOFTWARE CHRASH --------------------------------------------
      86. Config Watchdog = 2048 'Timeout = 2 Sekunden
      87. '-------------------------------------- AUSGANGS VARIABLEN --------------------------------------------------------------------
      88. Dim Bclient As Byte ' socket number
      89. Dim Idx As Byte
      90. Dim Flags As Byte
      91. Dim Peer As Long
      92. Dim Result1 As Word
      93. Dim Tmp As Byte
      94. Dim S As String * 80
      95. Dim Sfc As String * 80
      96. Dim B As String * 80
      97. Dim Y As String * 80
      98. Dim Command_array(14) As String * 16
      99. Dim Channel1 As String * 3
      100. Dim Channel2 As String * 3
      101. Dim Channel3 As String * 3
      102. Dim Channel4 As String * 3
      103. Dim Channel5 As String * 3
      104. Dim Channel6 As String * 3
      105. Dim Channel7 As String * 3
      106. Dim Channel8 As String * 3
      107. Dim Timeout_ausgeloest As Byte
      108. Dim Timerwert As Word
      109. Dim Zt As Byte
      110. Dim Zt_reset As Byte
      111. Dim Isttimeraktiviert As String * 1
      112. '----------------------- LED SELBSTTEST 1 SEKUNDE AN UND AUS -------------------
      113. Wait 1
      114. Isttimeraktiviert = "0"
      115. Zt_reset = 27
      116. Interfaceactivated = 0
      117. Timeoutled = 0
      118. Error_led = 0
      119. If Ip_from_dhcp = 0 Then
      120. If Dhcp_ok() = 1 Then
      121. Print "DHCP OK"
      122. Else
      123. Gosub Set_eth_values
      124. Print "DHCP Error"
      125. End If
      126. Else
      127. Gosub Set_eth_values
      128. End If
      129. Local_port = Port_
      130. Settcp 0.8.220.77.05.15 , Ip_ , Subnetmask_ , Gateway_
      131. Print "SETTCP OK"
      132. Do
      133. Debounce Ipreset , 0 , Set_ip_reset , Sub 'Stantard Werte Zuweisen
      134. Start Watchdog
      135. ...
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Pluto25 schrieb:

      an zeile 88 (besser 155 bei Djmsc's Lösung)
      um die Plausiebelität der Werte zu Prüfen
      Möglicherweise bleibt er stehen weil dort Unsinn rauskam?
      Bei der Lösung


      BASCOM-Quellcode

      1. If Ip_from_dhcp = 0 Then
      2. If Dhcp_ok() = 1 Then
      3. Print "DHCP OK"
      4. Print Ip_
      5. Print Subnetmask_
      6. Print Gateway_
      7. Print Port_
      8. Else
      9. Print "DHCP Error"
      10. End If
      11. Else
      12. Gosub Set_eth_values
      13. End If
      14. Local_port = Port_
      15. Settcp 0.8.220.77.05.15 , Ip_ , Subnetmask_ , Gateway_
      16. Print "SETTCP OK"
      17. Do
      18. Debounce Ipreset , 0 , Set_ip_reset , Sub 'Stantard Werte Zuweisen
      19. Start Watchdog
      20. For Idx = 0 To 3
      21. Result1 = Socketstat(idx , 0)
      Alles anzeigen
      bekomme ich folgendes ausgegeben:


      <-- Receive DHCP Offer (556 bytes)
      My IP: 192.168.178.42
      Sub Net Mask: 255.255.255.0
      Default Gateway: 192.168.178.1
      DHCP Server: 192.168.178.1
      DNS Server: 192.168.178.1
      Reconfig...
      DHCP OK
      -1062686166
      -256
      -1062686207
      2005


      und zum Schluss wird dieses NICHT ausgegeben
      Print "SETTCP OK"
    • Wenn ich das mal ohne DHCP laufen lasse, d.h. Ip_from_dhcp = 1


      BASCOM-Quellcode

      1. If Ip_from_dhcp = 0 Then
      2. If Dhcp_ok() = 1 Then
      3. Print "DHCP OK"
      4. Print Ip_
      5. Print Subnetmask_
      6. Print Gateway_
      7. Print Port_
      8. Else
      9. Toggle Error_led
      10. Print "DHCP Error"
      11. End If
      12. Else
      13. Gosub Set_eth_values
      14. End If
      15. Print Ip_
      16. Print Subnetmask_
      17. Print Gateway_
      18. Print Port_
      19. Local_port = Port_
      20. Settcp 0.8.220.77.05.15 , Ip_ , Subnetmask_ , Gateway_
      21. Print "SETTCP OK"
      Alles anzeigen
      dann klappt es, ich bekomme dann:
      -1062686131
      -256
      -1062686207
      2005
      SETTCP OK