String von serieller Schnittstelle aufzuteilen

Antworten
sebikr
Beiträge: 8
Registriert: Mittwoch 22. April 2009, 10:37

String von serieller Schnittstelle aufzuteilen

Beitrag von sebikr » Samstag 23. Februar 2013, 23:12

Hallo liebe Leute. Ich habe ein Problem und komme nicht weiter. Ich sehe die Lösung nicht und brauche bitte Eure Hilfe!?

Ich empfange einen String in ACSII von einem Messgerät über das COM-Byte-Modul. Das kann ich mir auch über das ASCII-Display anzeigen lassen.
Der String sieht wie folgt aus: v = xxx m/s<CR><LF>m = xx g<CR><LF>E = xx J<CR><LF>

Jetzt ist ja meist auch <CR> und <LF> das Trennzeichen im COM-Modul um den Empfang zu beenden.
Hab ich dann überhaupt den ganzen String oder nur bis zum ersten <CR> udn <LF>?
Ohne Trennzeichen funktioniert das COM-Modul gar nicht.

Ich würde jetzt gerne aber v, m und E in einzelne Displays aufteilen. Irgendwie muss das mit dem $Part gehen. Aber wie?
Mir fällt keine Lösung zur Auftrennung des Strings ein.

Hätte ich ein ";" zwischen den Werten, wäre das wohl alles einfacher. Ich kann nur leider den String nicht ändern.

Kann mir da bitte jemand von Euch Profis helfen?
Ich glaub nicht das ich nen Hexenwerk machen will, ich krieg die Kurve nur nicht... :-(

sebikr
Beiträge: 8
Registriert: Mittwoch 22. April 2009, 10:37

Re: Problem: String von serieller Schnittstelle aufzuteilen

Beitrag von sebikr » Sonntag 24. Februar 2013, 09:31

Wow, das ging ja schnell. Vielen lieben Dank

Habe das Projekt gerade mal ausprobiert.
Das ist schon mal nen riesiger Schritt. Auf die Idee BSY mit CLK zu verbinden bin ich noch nicht gekommen.
Alle anderern Kaskadierungen hab ich glaub ich schon versucht ;-)

Nur ein Problem:
Ich seh jetzt zwar alle Werte einzeln in Displays, welches Display welchen Wert anzeigt varriert allerdings.
Es sieht so aus als springt der String bei jedem Senden Werteweise von Display zu Display. Kann ich jedem Display nur einen bestimmten Wert fest zuweisen?

Danke nochmall für die superschnelle erste Hilfe

KAKTUS
Beiträge: 645
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Problem: String von serieller Schnittstelle aufzuteilen

Beitrag von KAKTUS » Sonntag 24. Februar 2013, 11:24

Hallo sebikr,

ich könnte dir jetzt was fertiges anbieten, aber dabei lernst du nichts.

Deine Strings schauen also so aus:
v = xxx m/s<CR><LF>
m = xx g<CR><LF>
E = xx J<CR><LF>

Jeder String fängt also mit einem anderen Zeichen an, das ist schon mal super.

Was zu tun wäre:
-Alles mit nur einem COM Baustein empfangen
-Das Erste Zeichen mit den String Befehlen herausfiltern (v,m,E)
-Für jeden String einen Vergleicher (also drei Vergleicher) bauen der auf das erste Zeichen prüft z.B. mit $COMPARE
-Mit $HOLD nur dann den String durchlassen wenn $COMPARE sagt "IST GLEICH"
-Nach $HOLD dein Display anschliesen, und es wir dann immer nur die Strings von z.B. "v = xxx..." anzeigen

Viel Erfolg
PS. Bei Fragen immer Beispiel mit posten
stachlige Grüße, Kaktus

sebikr
Beiträge: 8
Registriert: Mittwoch 22. April 2009, 10:37

Re: Problem: String von serieller Schnittstelle aufzuteilen

Beitrag von sebikr » Sonntag 24. Februar 2013, 16:46

Hi Danke für die Tipps, aber ich raff es nicht.

Versuche gerade den Tipp von Kaktus.
Benutze jetzt ein COM-Modul, Trennzeichen auf 13 10 eigestellt.
Danach kommt gleich der $Compare, dieser hat ein $Const am Eingang B. A liegt auf dem Ausgang des Com-Moduls.
Jetzt klappt nichts was ich in $Const eintrage.
Ich kann doch gar nicht vergleichen da ich doch immer andere Messwerte habe? Das "x" in meinen Daten war ja nur ein Beispiel für eine Zahl. Ich bekomme nie einen Wert der A=B ist. Oder gibt es da Platzhalter?

Wenn ich manuell mit zwei $Eingabefelder und dem $Compare spiele, klappt das, an A das e und an B das e, hab ich am Ausgang auch das e. Das bleibt auch.

(Den POR hab ich im Einschaltmoment um das Display zu löschen)
Dateianhänge
rs232_string_2.prj
(2.39 KiB) 302-mal heruntergeladen

KAKTUS
Beiträge: 645
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Problem: String von serieller Schnittstelle aufzuteilen

Beitrag von KAKTUS » Sonntag 24. Februar 2013, 20:09

Benutze jetzt ein COM-Modul, Trennzeichen auf 13 10 eigestellt.
Danach kommt gleich der $Compare, dieser hat ein $Const am Eingang B. A liegt auf dem Ausgang des Com-Moduls.
Da fehlt eindeutig noch : -Das Erste Zeichen mit den String Befehlen herausfiltern (v,m,E)

Du kannst nicht $CONST = m mit deinem eingehenden String vergleichen, du must erst aus dem eingehenden String wie auch WoB schon schrieb, das ERSTE Zeichen ausfiltern, und dann kannst du mit $COMPARE vergleichen.

Aber das wird schon. Wenn du das Prinzip einmal verstanden hast, kannst du es immer wieder anwenden.
stachlige Grüße, Kaktus

Antworten

Zurück zu „Thema RS232“