- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Long in Bytes zerlegen - RS232 - und wieder zusammenbauen ??

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161

    Long in Bytes zerlegen - RS232 - und wieder zusammenbauen ??

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,


    ich komme hier nicht weiter.

    Ich habe zwei Mega8 die ständig mit einander über RS232 kommunizieren.

    Ich habe nun Long-Variablen die ich in Bytes zerlegen, über RS232 senden und auf der Gegenseite wieder zusammenbauen möcht.

    Also die Kommunikation über RS232 mit Startbyte, Array und Checksum funktioniert alles einwandfrei.

    Momentan gehe ich bei der Zerlegung der Variablen "mathematisch" vor. Das ist glaub ich weder effektiv noch elegant und ein Resoursenfresser.

    Ich habe es bisher so beim Sender:

    Code:
    ....
    
    Dim Eu as Long
    Dim Eur1 as Long
    Dim Eur2 as Long
    Dim Eur3 as Long
    
    Dim Eu1 as Byte
    Dim Eu2 as Byte
    
    'als Beispiel nur eine der insgesamt 7 Variablen des Arrays
    
    Eu= 89800          'Beispielwert
    
    Eur1 = Eu / 255
    Eur3 = Eur1 * 255
    Eur2 = Eu - Eur3
    
    Eu1 = Eur1
    Eu2 = Eur2
    
    'geht das da oben nicht einfacher??????????
    
    
    C = 0
    D = 0
    
    Stb = 233
    
    B(1) = VariableX
    B(2) = VariableA1
    B(3) = VariableA2 
    B(4) = T1 
    B(5) = T2
    B(6) = Eu1
    B(7) = Eu2
    
    
    For D = 1 To 7
     C = C Xor B(d)
    Next
    Printbin Stb ; B(1) ; C
    
    Senden und Empfangen ist kein Problem!
    Mir ist wichtig das ich die Bytes der "aufgeteilten" Variablen ganz klar unterseiden kann. Also am liebsten so.

    B(6) = Teil eins der Variablen EU
    B(7) = Teil zwei der Variaben EU

    Hier der Empfänger:

    Code:
    ......
    Dim Eu As Long
    Dim Euneu3 As Long
    Dim Euneu2 As Byte
    Dim Euneu1 As Byte
    
    ' hier werden die Daten empfangen----
    
    Euneu3 = Euneu1 * 255
    Euneu = Euneu3 + Euneu2
    Ich hab irgendwie was von SHIFT usw. gelesen. Aber irgendwie peil ich das gar nicht.

    Wie geht das denn einfacher, ohne viele Variablen zu "verbraten" und mir den Controller zukleistere?

    Gruß
    Markus

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Guck mal da, so könnte das gehen
    https://www.roboternetz.de/wissen/in..._Input#OVERLAY
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    Hallo PicNic,

    ...hmm klappt nicht so richtig.

    Ich habe nun:
    Code:
    Dim D as Byte
    Dim C as Byte
    
    Dim Stb2 As Byte
    Dim Tvb1 As Word
    Dim Schwelle1 As Word
    Dim Dfmvolumen1 As Long
    Dim S2(8) As Byte At Tvb1 Overlay
    
    .......
    
    Readeeprom Tv , 1
    Readeeprom Schwelle , 10
    Readeeprom Dfmvolumen , 300
    
    cls
    Locate 1,1
    Lcd tv
    Locate 1,10
    Lcd schwelle
    Locate 2,1
    Lcd Dfmvolumen
    
    Tvb1 = Tv
    Schwelle1 = Schwelle
    Dfmvolumen1 = Dfmvolumen
    
    D=0
    C=0
    Stb2 = 233 
    
    For D = 1 To 8
    C = C Xor S2(8)
    Next
    
    Printbin Stb2 ; S2(8) ; C
    Im Terminalprogramm steht aber nur "233 0 0"
    also ist S2( leer obwohl die daten da sind und auf den LCD angezeigt werden.

    Gruß
    Markus

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    S2 (8) ist das höchst-signifikante byte vom dfvolumen1.
    Wenn du in dfvolumen1 = 300 reinschreibst,
    ist S2(5) = 0x2c
    ist S2(6) = 0x01
    ist S2(7) = 0x00
    ist S2(8) = 0x00
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Hm, hatten wir nicht erst ein ähnliches Thema?

    https://www.roboternetz.de/phpBB2/ze...141&highlight=

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    @rage_empire

    sorry hab ich ganz vergessen.

    Zitat Zitat von rage_empire
    Zerleg doch dein Long in Bytes. Das kannst du ganz einfach mit "DIM.....at...overlay" Dann schickst du die Bytes rüber und dein Empfänger baut diese dann wieder zu Long.
    Das hab ich mir echt zig mal angeschaut. Beim Sender funktioniert das schon.

    Nur wie mache ich das nun genau beim Empfänger? Siehe unten

    @PickNic

    ah ja richtig ich habe ja nur S2(8) im Print drin. Logisch kann net gehen.

    Also müsste es dann richtig lauten:

    Printbin S2(1) , 8 richtig?

    Nur wie fasse ich die 8 Bytes dann am Empfänger wieder zusammen.

    Reicht das wenn ich beim Empfänger schreibe:

    Dim Tvb1 as Word
    Dim Schwelle1 as Word
    Dim Dfmvolumen1 as Long
    Dim S2(8) as Byte at Tvb1 Overlay

    Inbputbin S2(1) , 8

    Wie weise ich dann den Variablen beim Empfänger dann wieder die richtigen Bytes zu??

    Sorry aber ich check des echt noch nicht ganz.

    Gruß
    Markus

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    wenn du sendest
    printbin s2(1), 8
    mußt du auch empfangen
    inputpin s2(1), 8
    mehr isses eigentlich nicht
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    .... auf die Gefahr hin das ich nerve....

    also das Senden funzt. Auf dem Terminalprogramm sehe ich es wunderbar. 8 Datenbytes gehen raus

    Aber das Empfangen nicht.

    Beim Empfänger hab ich:

    Dim A As Word
    Dim B As Word
    Dim C As Long
    Dim S2(8) As Byte At A Overlay

    inputbin S2(1) , 8

    Warum sind dann die Variablen alle mit "0" wenn ich mir es anzeigen lasse?

    Beim Sender ist alles identisch halt nur mit printbin S2(1) , 8

    Sorry aber ich raff dat net warum das nicht geht.


    Mein Empfänger hat nix in den Variablen.

    Gruß
    Markus

Berechtigungen

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

Solar Speicher und Akkus Tests