- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 8 von 8

Thema: RS232 Telegramm????

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283

    RS232 Telegramm????

    Anzeige

    Praxistest und DIY Projekte
    Hi Leute,

    hab mal wieder was zusammengeschustert und wollte euch mal fragen ob man das so gut gehn lassen kann oder ob ich da was verbessern kann.
    Es soll so eine Art Telegramm für die RS232 werden, ich möchte es dazu verwenden, um Daten von meinem Rechner zum Bot zuschicken und umgekehrt. ich hoffe ich habs gut genug beschrieben
    Hier mal der Code

    Code:
    '
    'Befehle über RS232 / RS485
    'Erstellt 10.04.2008 By Kalle
    '
    'Befehlszusammensetzung:
    '  se06255xxx
    '  ^ ^ ^  ^
    '  | | |  |
    '  | | |  Checksumme
    '  | | Aktion z.B bei Servos Position (hier 255)
    '  | Bei mehreren Geräten gleichen Typs z.B se06... für Servo 6
    '  Belehlstyp z.B. se für Servo
    
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    
    Declare Sub Notaus()
    
    Enable Interrupts
    
    
    
    '*** Variablendeklaration ***
    Dim Befehl As String * 10
    Dim Befehllaenge As Byte
    Dim Typ As String * 2
    Dim Nummer As String * 2
    Dim Aktion As String * 3
    Dim Fehler As String * 10
    Dim Checksumme As String * 3
    
    
    Dim Nummerbyte As Byte
    Dim Kanal(16) As Byte
    Dim Aktionbyte(4) As Byte
    
    Dim Fehlerlaenge As Byte
    Dim Adrbyte As Byte
    Dim Varcrc As Byte
    Dim Checkbyte As Byte
    
    '*** Hauptprogramm ***
    
    Do
    
       Input Befehl
    
       Varcrc = Crc8(befehl , 7)                                'Checksumme berechnen
       Checksumme = Right(befehl , 3)                           'Checksumme aus Zeichenkette auslesen
       Checkbyte = Val(checksumme)
       If Varcrc = Checkbyte Then                               'Wenn Checksummen gleich ...
          Befehllaenge = Len(befehl)
          If Befehllaenge > 0 Then
             Gosub Befehlserkennung                             '... Zeichenkette auswerten
          End If
       Else
          Fehler = "ERRChec"
          Call Notaus()
       End If
    
       Fehlerlaenge = Len(fehler)
       If Fehlerlaenge > 0 Then
          Print Fehler
          Fehler = ""
       End If
    Loop
    
    
    
    
    '*** Unterprogramme ***
    
    Sub Notaus()
    'Befehle für NotAus hier einfügen
    End Sub
    
    
    '*** Zeichenkette asuwerten ***
    
    Befehlserkennung:
    
       Typ = Left(befehl , 2)                                   'sucht 1. und 2. Zeichen von links (Typ)
       Nummer = Mid(befehl , 3 , 2)                             'sucht 3. und 4. Zeichen von links (Nummer)
       Aktion = Mid(befehl , 5 , 3)                             'sucht 5., 6. und 7. Zeichen Zeichen (Aktion)
       If Befehllaenge <> 10 Then Fehler = "ERRLang"
    
    Return
    
    '*** Aktion Ausführen ***
    
    Ausfuehrung:
    
    Return

    Freue mich schon auf Kritik

    Gruß Kalle

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    75
    Beiträge
    703
    wenn es ein Telegramm sein soll wird es eine Adresse brauchen und eventuell einen Absender. Also das, was Du jetzt im Beispiel als Servo bezeichnest und als Untergruppe die 06
    kann auch sein, dass du eine Bestätigung brauchst ob es angekommen ist.
    Es gibt für diese Strecke Mikro – PC über RS232 ein Telegramvorschlag der etwas aufwendiger ist, aber sicher als Anregung dienlich sein kann.
    Hier der Link:
    http://www.marvins-lab.roboterbastler.de/index.html
    Dort gibt es auch Links in die Wiki, in der das auch noch mal ausführlich beschrieben wird.

    Netter Gruß
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, danke für die Antwort, ich werds mir mal ansehn

    Gruß Kalle

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi Leute,

    ich hatte grad ne neue Idee für ein "Telegramm", es sollte so aussehn:

    Adresse!Aktion!Typ!Eigenschaft!Wert!eventuell Checksumme$
    für Adresse: Main(PC) mc1(Controller)...
    für Aktion: Get oder Set
    für Typ: Mot(Motor), Ser(Servo)...
    für Eigenschsft: Speed, Position,...
    für Wert: den Wert

    meine Frage nun, wie kann ich herausfinden wann die einzelnen Parameter beginnen bzw aufhören? Als Trennzeichen hab ich das ! und als Endzeichen das $.

    Das Grundprogramm für den empfang wollte ich so realisieren:
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    
    Config Serialin = Buffered , Size = 30
    
    
    
    
    
    Dim Telegramm As String * 30
    
    Enable Interrupts
    Print "Start"
    Do
       'get a char from the UART
       If Ischarwaiting() = 1 Then                              'was there a char?
          Input Telegramm
          Print Telegramm                                       'print it
       End If
                                                          'wait 1 second
    
    Loop

    Danke im Voraus für eure Hilfe

    Gruß Kalle

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Habs grad selbst herausgefunden, trotzdem danke !
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    
    Config Serialin = Buffered , Size = 30
    
    
    Dim Ar(6) As String * 7
    Dim Bcount As Byte
    Dim Telegramm As String * 30
    Dim E_adr As String * 7
    Dim E_aktion As String * 7
    Dim E_typ As String * 7
    Dim E_property As String * 7
    Dim E_wert As String * 7
    Dim E_check As String * 7
    Dim I_wert As Integer
    Dim B_wert As Byte
    Dim I As Byte
    
    Enable Interrupts
    Print "Start"
    Do
       'get a char from the UART
       If Ischarwaiting() = 1 Then                              'was there a char?
          Input Telegramm
          Print Telegramm                                       'print it
    
          Bcount = Split(telegramm , Ar(1) , "!")               'Aufteilen des Telegramms auf Arryes
    
          E_adr = Ar(1)
          E_aktion = Ar(2)
          E_typ = Ar(3)
          E_property = Ar(4)
          E_wert = Ar(5)
          E_check = Ar(6)
    
    
       End If
    Loop

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi Leute

    kann mir mal jemand sagen warum das so nich funktioniert?
    Wenn ich das ganze mit dem Terminal Emulator von Bascom teste geht es zwar, aber die Variable Ar(5) bleibt leer, bzw verschiebt sich nach Ar(6)
    Versuch ichs mit dem VB-Programm geht es beim 1. mal nach dem Reset und beim 2. mal wird das halbe Telegramm "verschluckt".
    ich hock jetzt schon fast 2 Tage dran und bin jetzt voll am verzweifeln.
    Hier mal das bascom-Programm und das VB-Programm als rar-Archiev:

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    Config Pinc.7 = Output
    Config Serialin = Buffered , Size = 30
    
    Const My_adr = "mc1"
    
    Dim Ar(6) As String * 5
    Dim Bcount As Byte
    Dim Telegramm As String * 30
    Dim E_adr As String * 5
    Dim E_aktion As String * 5
    Dim E_typ As String * 5
    Dim E_property As String * 5
    Dim E_wert As String * 5
    Dim E_check As String * 5
    Dim I_wert As Integer
    Dim B_wert As Byte
    Dim I As Byte
    
    Enable Interrupts
    Print "Start"
    
    Portc.7 = 1
    Sound Portd.7 , 400 , 450
    Do
    
       'get a char from the UART
       If Ischarwaiting() = 1 Then                              'was there a char?
          Sound Portd.7 , 400 , 450
          Input Telegramm
          Print "angekommen"                                    'nur zu testzwecken
          'Portc.7 = 1
          'Waitms 200
          'Portc.7 = 0                                           'print it
    
          Bcount = Split(telegramm , Ar(1) , "!")               'Aufteilen des Telegramms auf Arryes
    
          'Print Ar(1)
          If Ar(1) = My_adr Then
             E_adr = Ar(1)
             E_aktion = Ar(2)
             E_typ = Ar(3)
             E_property = Ar(4)
             E_wert = Ar(5)
             E_check = Ar(6)
          Else
             E_adr = ""
             E_aktion = ""
             E_typ = ""
             E_property = ""
             E_wert = ""
             E_check = ""
          End If
    
       End If
    
       If Len(ar(1)) > 0 Then
          For I = 1 To Bcount                                   'Telegramm und Arreys löschen
             Print Ar(i) ; I
             Ar(i) = ""
          Next
       End If
       Telegramm = ""
    Loop
    [/code]
    Angehängte Dateien Angehängte Dateien

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.02.2007
    Ort
    BA-Wü
    Alter
    32
    Beiträge
    165
    Ich glaub, ich hab was gefunden, was dir vielleicht hilft:
    Aus der Bascom Hilfe
    It is also important to know that the individual elements of the array need to be big enough to store the string part.

    For example when the array has 5 elements and each element may be 10 characters long, a string that is 11 bytes long will not fit. Another element will be used in that case to store the additional info.
    Viele Grüße,
    Michael

    Sn60Pb40 Rulez
    www.silvestercountdown.de.vu- Dein Countdown bis Neujahr!

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi

    @Pyro-Mike das kanns eigendlich nich sein, da mein längster string max 5 zeichen enthält...

Berechtigungen

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

Solar Speicher und Akkus Tests