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

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

      Hallo,

      wie das Betrf. bereits sagt, möchte ich IP, Submaske, Gateway und Port in Memory schreiben und lesen.
      Ich habe wie folgt gemacht:

      BASCOM-Quellcode

      1. Dim Memory As Eram String * 100
      2. Dim Speicher As String * 64
      3. Speicher = Memory
      4. Select Case Date
      5. Case "2" 'TCP/IP, GateWay, Submaske Einstellungen in den Speicher schreiben
      6. Reset Watchdog
      7. Gosub Setnewip
      8. Case Else
      9. End Select
      10. Setnewip:
      11. Insmemoryschreiben1 = Command_array(3) + "|"
      12. Insmemoryschreiben2 = Command_array(4) + "|"
      13. Insmemoryschreiben3 = Command_array(5) + "|"
      14. Insmemoryschreiben4 = Command_array(6)
      15. Insmemoryschreiben5 = Insmemoryschreiben1 + Insmemoryschreiben2
      16. Insmemoryschreiben6 = Insmemoryschreiben3 + Insmemoryschreiben4
      17. Insmemoryschreiben7 = Insmemoryschreiben5 + Insmemoryschreiben6
      18. Memory = Insmemoryschreiben7
      19. Speicher = Insmemoryschreiben7
      20. Return
      Alles anzeigen
      Nun, ist aber hier das Problem, das beim Aufrufen ebenfals eine lange Stringkette gelesen wird, den ich dann wieder mit SPLIT zerlegen muss um in folgenden reinzuschreiben

      BASCOM-Quellcode

      1. 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 = 2005 , Chip = W5500 , Spi = 1 , Cs = Portb.4
      Gibt es ein besseres Weg in den Memory rein zuschreiben und wieder zu lesen, ohne das man Strings zerlegen muss?

      VG
      Katip
    • Nehm halt die Variablen und dupliziere sie im eram, halt mit eigenem Namen. Gleiche Größe, gleicher Typ. Dann brauchst du nix wandeln und zerlegen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Naja, wenn du jetzt zB. hast
      dim submaske as string*16
      dann legst du halt
      dim submaske_e as eram string*16
      an. Zum Sichern submaske_e=submaske und zum Lesen submaske=submaske_e.
      Was hast du für einen Vorteil, wenn du alles aneinander reihst? Kannst doch genauso einzelne Variablen verwenden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • BASCOM-Quellcode

      1. Dim Setip As Eram String * 16
      2. Dim Setsubmaske As Eram String * 16
      3. Dim Setgateway As Eram String * 16
      4. Dim Setport As Eram String * 5
      5. Dim Setip_r As String * 16
      6. Dim Setsubmaske_r As String * 16
      7. Dim Setgateway_r As String * 16
      8. Dim Setport_r As String * 5
      9. Setnewip:
      10. Setip = Command_array(3)
      11. Setsubmaske = Command_array(4)
      12. Setgateway = Command_array(5)
      13. Setport = Command_array(6)
      14. Print Setip; Setsubmaske ;Setgateway ;Setport
      15. Return
      Alles anzeigen
      wird nicht in den Memory geschrieben
    • Das geht nur über den Umweg die eram-Variable in eine ram-Variable zu kopieren. Mit eram-Variablen kann man auch nicht rechnen.
      Probier mal nach den Speichern ins erram
      setip_r=setip
      print setip_r

      Aus der Hilfe:
      ERAM
      For ERAM variables, it is important to understand that these are not normal variables. ERAM variables serve as a way to simple read and write the EEPROM memory. You can use READEEPROM and WRITEEEPROM for that purpose too.
      To write to an ERAM variable you have to use an SRAM variable as the source : eramVAR= sramVAR
      To read from an ERAM variable you have to use an SRAM variable as the targer : sramVAR=eramVAR
      Both variables need to be of the same data type. So when writing to an ERAM double, the source variable need to be of the double type too.
      ERAM can be assigned with a numeric value too : eramVAR= 123
      You can not use an ERAM variable as you would use a normal variable.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • BASCOM-Quellcode

      1. Setnewip:
      2. Setip_r = Command_array(3)
      3. Setsubmaske_r = Command_array(4)
      4. Setgateway_r = Command_array(5)
      5. Setport_r = Command_array(6)
      6. Setip = Setip_r
      7. Setsubmaske = Setsubmaske_r
      8. Setgateway = Setgateway_r
      9. Setport = Setport_r
      10. Stored = "NewIP|" + Str(deviceadresse)
      11. Result1 = Tcpwritestr(idx , Stored , 255 )
      12. ' Print "Setip = " ; Setip
      13. Return
      Alles anzeigen
      so geht das
      aber print geht nicht :)
    • BASCOM-Quellcode

      1. Dim Setip As Eram String * 16
      2. Dim Setsubmaske As Eram String * 16
      3. Dim Setgateway As Eram String * 16
      4. Dim Setport As Eram String * 5
      5. Dim Setip_r As String * 16
      6. Dim Setsubmaske_r As String * 16
      7. Dim Setgateway_r As String * 16
      8. Dim Setport_r As String * 5
      9. Setip_r = Setip
      10. Setsubmaske_r = Setsubmaske
      11. Setgateway_r = Setgateway
      12. Setport_r = Setport
      13. Config Tcpip = Noint , Mac = Localmac , Ip = Setip_r , Submask = Setsubmaske_r , Gateway = Setgateway_r , Localport = Setport_r , Chip = W5500 , Spi = 1 , Cs = Portb.4
      Alles anzeigen
      Error : 222 Line : 19 Illegal character [expected (, got '' [SETPORT_R]] , in File :

      Was kann das sein?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von katipefendi ()

    • six1 schrieb:

      du und deine Strings
      kann nicht anders 8o


      six1 schrieb:

      Schau dir mal was anderes an: MakeTCP
      habe gesehen das du in der Richtung experte bist.
      Aber verrate mir doch mal bitte, warum die im EEPROM abgelegte Daten wie IP, GATEWAY usw. als NULL zurückgeliefert werden.

      An welcher Stelle mache ich da einen Fehler?

      Was ich vor habe ist, ich sende neue IP, GATEWAY, SUBMASK usw. vom VB:NET zum AVR und soll ins EEPROM geschrieben werden.
      Nachdem Schreiben in das EEPROM wird der AVR Resettet und beim Neustart sollen die ins EEPROM geschriebene Daten für den Config TCP über den SETTCP verwendet werden.

      Hier der code dazu.

      BASCOM-Quellcode

      1. im Setip As Eram Long
      2. Dim Setsubmaske As Eram Long
      3. Dim Setgateway As Eram Long
      4. Dim Setip_r As String * 16
      5. Dim Setsubmaske_r As String * 16
      6. Dim Setgateway_r As String * 16
      7. Setip_r = Maketcp(setip)
      8. Setsubmaske_r = Maketcp(setsubmaske)
      9. Setgateway_r = Maketcp(setgateway)
      10. Settcp 0.8.220.77.05.11 , Setip_r , Setsubmaske_r , Setgateway_r
      11. Config Tcpip = Int0 , Mac = 0.8.220.77.05.11 , Ip = 192.168.178.29 , Submask = 255.255.255.0 , Gateway = 192.168.178.1 , Localport = 2005 , Chip = W5500 , Spi = 1 , Cs = Portb.4
      Alles anzeigen




      An dieser Stelle kommen die Daten vom VB.NET an

      BASCOM-Quellcode

      1. Do
      2. Select Case Data
      3. Case "2"
      4. 'TCP/IP, GateWay, Submaske Einstellungen in den Speicher schreiben
      5. Reset Watchdog
      6. Gosub Setnewip
      7. Case Else
      8. End Select
      9. Loop
      Alles anzeigen

      Und die Routine Setnewip wird getriggert.

      BASCOM-Quellcode

      1. Setnewip:
      2. 'Die Daten erst in eine Variable schreiben
      3. Setip_r = Command_array(3)
      4. Setsubmaske_r = Command_array(4)
      5. Setgateway_r = Command_array(5)
      6. 'Jetzt die Daten vom Variablen in den EEPROM schreiben
      7. Setip = Setip_r
      8. Setsubmaske = Setsubmaske_r
      9. Setgateway = Setgateway_r
      10. Stored = "NewIP|" + Str(deviceadresse)
      11. Result1 = Tcpwritestr(idx , Stored , 255 )
      12. Return
      Alles anzeigen
    • @katipefendiBetrachte die eram-Variablen als reine backup-Variablen. Es geht praktisch nur eine Zuweisung mit '=', natürlich in beiden Richtungen, also lesend und schreibend. Die ganzen Variablen, die du im eram sichern willst, werden in eram-Variablen gleichen Typs gespeichert.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Der Fehler liegt vermutlich darin das du verschiedene Variablen-Typen verwendest

      BASCOM-Quellcode

      1. Dim Setip As Eram Long
      2. Dim Setsubmaske As Eram Long
      3. Dim Setgateway As Eram Long

      Du solltest, wie gestern schon erwähnt, gleiche Typen anlegen. Und du musst auch wie unten zu sehen einen Dummy anlegen der unbenutzt bleibt.

      BASCOM-Quellcode

      1. Dim Dummy As Eram Byte
      2. Dim Setip As Eram String * 16
      3. Dim Setsubmaske As Eram String * 16
      4. Dim Setgateway As Eram String * 16
      5. Dim Setport As Eram String * 5
      6. Dim Setip_r As String * 16
      7. Dim Setsubmaske_r As String * 16
      8. Dim Setgateway_r As String * 16
      9. Dim Setport_r As String * 5
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • HI,

      hier kannste schreiben wie du willst.
      Es liefert immer nur 0

      Ich habe mit LONG und String Variablen versucht.
      irgendwas ist hier faul.

      BASCOM-Quellcode

      1. Dim Setip_e As Eram String * 16
      2. Dim Setsubmaske_e As Eram String * 16
      3. Dim Setgateway_e As Eram String * 16
      4. Dim Setport_e As Eram String * 4
      5. Dim Setip As String * 16
      6. Dim Setsubmaske As String * 16
      7. Dim Setgateway As String * 16
      8. Dim Setport As String * 4
      9. Dim Setip_p As Long
      10. Dim Setsubmaske_p As Long
      11. Dim Setgateway_p As Long
      12. Setip = Setip_e
      13. Setsubmaske = Setsubmaske_e
      14. Setgateway = Setgateway_e
      15. Setport = Setport_e
      16. Print Setip ; Setsubmaske ; Setgateway ; Setport
      17. Setip_p = Maketcp(setip)
      18. Setsubmaske_p = Maketcp(setsubmaske)
      19. Setgateway_p = Maketcp(setgateway)
      20. Print Setip_p ; Setsubmaske_p ; Setgateway_p
      Alles anzeigen
    • so hier mal im Groben aus einem Projekt heraus kopiert...

      BASCOM-Quellcode

      1. Dim Ee_mac(6) As Eram Byte At 0
      2. Dim Ee_ip(4) As Eram Byte At 6
      3. Dim Ee_server_ip(4) As Eram Byte At 10
      4. Dim Ee_mask(4) As Eram Byte At 14
      5. Dim Ee_gateway(4) As Eram Byte At 18
      6. Dim Eth_mac(6) As Byte
      7. Dim Eth_ip(4) As Byte
      8. Dim Eth_server_ip(4) As Byte
      9. Dim Eth_mask(4) As Byte
      10. Dim Eth_gateway(4) As Byte
      11. Dim Ip_ As Long
      12. Dim Server_ip_ As Long
      13. Dim Subnetmask_ As Long
      14. Dim Gateway_ As Long
      15. Const Socket_max = 8
      16. Gosub Set_eth_values
      17. Config Tcpip = Noint , _
      18. Mac = 0.2.3.4.5.6 , _
      19. Ip = Ip_ , _
      20. Submask = Subnetmask_ , _
      21. Gateway = Gateway_ , _
      22. Localport = 50000 , _
      23. Align = 0 , _
      24. Chip = W5200 , _
      25. Spi = 1 , _
      26. Cs = Cs_wiz
      27. Wait 1
      28. Settcp Eth_mac(1).eth_mac(2).eth_mac(3).eth_mac(4).eth_mac(5).eth_mac(6) , _
      29. Ip_ , _
      30. Subnetmask_ , _
      31. Gateway_
      32. ....
      33. Set_eth_values:
      34. Eth_ip(1) = Ee_ip(1) : Eth_ip(2) = Ee_ip(2) : Eth_ip(3) = Ee_ip(3) : Eth_ip(4) = Ee_ip(4)
      35. Eth_server_ip(1) = Ee_server_ip(1) : Eth_server_ip(2) = Ee_server_ip(2) : Eth_server_ip(3) = Ee_server_ip(3) : Eth_server_ip(4) = Ee_server_ip(4)
      36. ' Eth_mask(1) = Ee_mask(1) : Eth_mask(2) = Ee_mask(2) : Eth_mask(3) = Ee_mask(3) : Eth_mask(4) = Ee_mask(4)
      37. Eth_gateway(1) = Ee_gateway(1) : Eth_gateway(2) = Ee_gateway(2) : Eth_gateway(3) = Ee_gateway(3) : Eth_gateway(4) = Ee_gateway(4)
      38. Eth_mac(1) = Ee_mac(1) : Eth_mac(2) = Ee_mac(2) : Eth_mac(3) = Ee_mac(3) : Eth_mac(4) = Ee_mac(4)
      39. Eth_mac(5) = Eth_ip(3)
      40. Eth_mac(6) = Eth_ip(4)
      41. Ip_ = Maketcp(eth_ip(1) , Eth_ip(2) , Eth_ip(3) , Eth_ip(4))
      42. Server_ip_ = Maketcp(eth_server_ip(1) , Eth_server_ip(2) , Eth_server_ip(3) , Eth_server_ip(4))
      43. Subnetmask_ = Maketcp(eth_mask(1) , Eth_mask(2) , Eth_mask(3) , Eth_mask(4) )
      44. Gateway_ = Maketcp(eth_gateway(1) , Eth_gateway(2) , Eth_gateway(3) , Eth_gateway(4) )
      45. Return
      Alles anzeigen
      Code first, think later - Natural programmer :D