-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: rs232 telegramm auswerten mit gepufferten Empfang

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    42
    Beiträge
    379

    rs232 telegramm auswerten mit gepufferten Empfang

    Anzeige

    Guten Morgen,

    ich empfange über UART folgendes Telegramm:
    HEX 0D 0A 4F 4B 0D 0A
    Ascii CR LF OK CR LF

    dies wird auch in den entsprechenden Puffer geschrieben. Nur leider zerbreche ich mir seit geraumer Zeit wie ich das Ende dieser Übertragung erkennen kann. Da ja am Anfang und am Ende der Übertragung ein CR LF steht kann ich über Serial0CharMatch oder Serial0ByteReceived nicht genau darauf filtern. Auch ist der Inhalt der Message immer unterschiedlich lang.
    Wie würdet Ihr daran gehen, um das Ende nach dem (siehe oben) OK zu ermiteln?

    Grüße MAT

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Lass doch das Char-Match auf &H0A prüfen, und schau dir dann an, ob es das erste oder das zweite CR_LF war.
    Alternativ würde ich das Erkennen über den URXC Interrupt selber durchführen. Da bist du flexibler und vermeidest diese verborgene Funktionalität des Char-Matchens.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    42
    Beiträge
    379
    Hallo for_ro,

    ok, in der Char-Match Sub könnte ich natürlich das &H0A prüfen..... warum eigentlich nicht! Werde ich gleich mal testen.
    Noch eins,

    ich sende ein Komando:
    Print #1 , "ATE" (=> darauf antwortet das Modem mit:CR LF OK CR LF) :At_ok = 10
    Call Gsm_ok(at_ok)
    und schicke derzeit die Anzahl der zu empfangenen Zeichen an die Sub:
    Sub Gsm_ok(byval Rxlen As Byte) in der ich überprüfen will, ob das Modem auf den Befehl richtig antwortet.

    Nur wie kann ich nun den zu erwartenden Text (ascii => CR LF OK CR LF) nach At_ok in Bascom schreiben.
    At_ok & rxlen sind als String deklariert.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Mat,
    sorry, aber die Erklärung verstehe ich nicht. Kannst du das vielleicht noch mal anders beschreiben?

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    42
    Beiträge
    379
    Moin for-ro,

    mein Hauptproblem an der Sache ist, wie ich den String im Programm schreiben kann, der in ascii so aussieht: CR LF OK CR LF (CR LF OK CR LF=> diesen sendet mir mein GSM Modem nach erfolgreicher Bearbeitung eines Befehls).
    Ist dies in Bascom so richtig: "{013}{010}Ok{013}{010} "?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von mat-sche Beitrag anzeigen
    Moin for-ro,

    mein Hauptproblem an der Sache ist, wie ich den String im Programm schreiben kann, der in ascii so aussieht: CR LF OK CR LF (CR LF OK CR LF=> diesen sendet mir mein GSM Modem nach erfolgreicher Bearbeitung eines Befehls).
    Ist dies in Bascom so richtig: "{013}{010}Ok{013}{010} "?
    Wenn du das Leerzeichen am Ende noch weglässt ist das eine Möglichkeit, wie du diese Ausgabe in Bascom erreichen kannst.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    42
    Beiträge
    379
    Super, danke!

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Ist dies in Bascom so richtig: "{013}{010}Ok{013}{010} "?
    warum nicht einfach so?
    Print
    Print "OK"

    Gruß, Michael

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    42
    Beiträge
    379
    Hallo Michael,

    ich lese die gesendeten Daten vom Modem über HTerm ein und dort ist zu sehen, dass eben CR LF OK CR LF gesendet wird. Und das "OK" empfange ich doch. Und die Empfangenen Zeichen will ich in einer SUB überprüfen, ob das Modem richtig auf den Befehl antwortet.

    - - - Aktualisiert - - -

    Ich noch einmal

    da es sich ja um ein GSM-Modem handelt, aus dem ich daten auslesen will, kann ich dieses auch anrufen bzw. ne sms schicken.So könnte ich über das Modem Befehle an meine Steuerung senden.

    Ich nutze jetzt zum Einlesen der Modemstrings den Uart-Interrupt und schiebe darüber die Strings in einen Speicher. DA ich ja zu irgend einem Zeitpunkt das Modem anrufen kann, weiss ich noch nicht wie ich in dem Fall ein Klingeln entdecken kann.
    Ich weiß das bei jedem eingehenden String die Interruptroutine angesprungen wird, nur hier habe ich da Problem das ich nicht weiß wenn der String bei einem Klingeln zu ende ist.
    Ich habe mir gedacht einen Timer beim sprung in die Interrupt ISR zu starten und wenn dieser überläuft dann den Uart-Puffer auszulesen...
    Wie würdet Ihr das machen?
    Grüße MAT

    - - - Aktualisiert - - -

    Ich noch einmal

    da es sich ja um ein GSM-Modem handelt, aus dem ich daten auslesen will, kann ich dieses auch anrufen bzw. ne sms schicken.So könnte ich über das Modem Befehle an meine Steuerung senden.

    Ich nutze jetzt zum Einlesen der Modemstrings den Uart-Interrupt und schiebe darüber die Strings in einen Speicher. DA ich ja zu irgend einem Zeitpunkt das Modem anrufen kann, weiss ich noch nicht wie ich in dem Fall ein Klingeln entdecken kann.
    Ich weiß das bei jedem eingehenden String die Interruptroutine angesprungen wird, nur hier habe ich da Problem das ich nicht weiß wenn der String bei einem Klingeln zu ende ist.
    Ich habe mir gedacht einen Timer beim sprung in die Interrupt ISR zu starten und wenn dieser überläuft dann den Uart-Puffer auszulesen...
    Wie würdet Ihr das machen?
    Grüße MAT

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo mat-sche,

    String im Programm schreiben
    davon war ich etwas verwirrt, jetzt habe ich verstanden, daß du eigentlich was _lesen_ willst.

    Wie würdet Ihr das machen?
    im Uart-Interrupt die Zeichen in ein Array einlesen und den Zeiger inkrementieren.
    Bei 0A schauen, wie weit der Zeiger ist, wenn 2, dann Zeiger löschen, wenn 4, dann auch, aber zusätzlich Array sichern und Flag für's Hauptprogramm setzen.

    Gruß, Michael

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Funkwetterstation Telegramm auswerten
    Von paul88 im Forum Sensoren / Sensorik
    Antworten: 16
    Letzter Beitrag: 01.07.2013, 20:40
  2. Problem mit RS232-Empfang
    Von Tido im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 24.10.2011, 22:06
  3. Probleme mit RS232 und dem Empfang
    Von BlaueLed im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 14.01.2010, 20:35
  4. RS232 Telegramm????
    Von kalletronic im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 26.01.2009, 20:38
  5. RS232 Empfang UND Versand auf einem Port?
    Von RHS im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 22.01.2007, 19:02

Berechtigungen

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