LabVIEWForum.de
Messwerte von Mikrocontroller - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Messwerte von Mikrocontroller (/Thread-Messwerte-von-Mikrocontroller)



Messwerte von Mikrocontroller - sunshine1234 - 10.02.2015 13:52

Hallo zusammen,

und zwar bestehe meine Aufgabe die Daten(Temperaturwerte), die ein Mikrocontroller fortlaufend sendet über die Serielle Schnittstelle einzulesen in Lab View einzulesen.
Die Daten kommen wie folgt:

3188 2003 FFFF FFFF FFFE 3142 4004 FFFF FFFF 0DF0 3160 FF05 FFFF FFFF 03B0 2FE0 FE01 FFFF FFFF 0328 3040 F802 FFFF FF13 C231 88E0 03FF FFFF FFFF FA31

5 Kanäle nacheinander
Es werden pro Kanal 10 Bytes verschickt.

Beispiel Kanal 1:
FFFF 03B0 2FE0 FE01 FFFF
Anfangskennung 2 Bytes FFFF
Temperaturwert 03B0
Gerätetemperatur 2FE0
Kanal: FE01(nur hintere Teil wichtig)
Endkennung 2 Bytes FFFF

Das Problem wenn ich das einlesen starte wird nie synchron mit dem Startbyte angefangen wie kann ich dies realisieren?
Hatte schon ausgetestet indem ich eine Abfrage mache und immer abfrage bis die ersten 2 Bytes (FFFF) übereinstimmen nur dann läuft der Speicher voll :-(

Hat jemand eine Idee oder zumindest ein Ansatz?

Vielen Dank im Vorraus.

Freundliche Grüße


RE: Messwerte von Mikrocontroller - GerdW - 10.02.2015 14:52

Hallo sunshine,

Zitat:Das Problem wenn ich das einlesen starte wird nie synchron mit dem Startbyte angefangen wie kann ich dies realisieren?
Gar nicht. Dein PC weiß einfach nicht, wann eine Botschaft deines µC beginnt und endet. Und du fängst halt "irgendwann" mit dem Lesen/Empfangen an, während der Controller schon munter plaudert…

Aber du kannst deine Botschaften in einem String sammeln (per Anhängen aneinander) und jeweils beim "FFFF FFFF" den String auftrennen. Sollte wunderschön funktionieren…

Zitat:FFFF 03B0 2FE0 FE01 FFFF FFFF 0328 3040 F802 FFFF FF13 C231 88E0 03FF FFFF
Nach deiner Beschreibung dürfte es den rot markierten Wert nicht geben…


RE: Messwerte von Mikrocontroller - jg - 10.02.2015 18:29

Das Synchronisierung auf einen "Datenstrom" hatten wir schon, z.B. hier oder hier.

Gruß, Jens


RE: Messwerte von Mikrocontroller - Lucki - 10.02.2015 19:44

Die Start-Endeerkennung ist nicht eindeutig. In diesem String gibt es schon gleich am Anfang drei verschiedene 10-byte-Stringketten, die die Bedingung FFFF am Start und FFFF am Ende erfüllen. Das kann zu Missdeutungen führen.

3188 2003 FFFF FFFF FFFE 3142 4004 FFFF FFFF 0DF0 3160 FF05 FFFF FFFF 03B0 2FE0 FE01 FFFF FFFF 0328 3040 F802 FFFF FF13 C231 88E0 03FF FFFF FFFF FA31

3188 2003 FFFF FFFF FFFE 3142 4004 FFFF FFFF 0DF0 3160 FF05 FFFF FFFF 03B0 2FE0 FE01 FFFF FFFF 0328 3040 F802 FFFF FF13 C231 88E0 03FF FFFF FFFF FA31

3188 2003 FFFF FFFF FFFE 3142 4004 FFFF FFFF 0DF0 3160 FF05 FFFF FFFF 03B0 2FE0 FE01 FFFF FFFF 0328 3040 F802 FFFF FF13 C231 88E0 03FF FFFF FFFF FA31

3188 2003 FFFF FFFF FFFE 3142 4004 FFFF FFFF 0DF0 3160 FF05 FFFF FFFF 03B0 2FE0 FE01 FFFF FFFF 0328 3040 F802 FFFF FF13 C231 88E0 03FF FFFF FFFF FA31

Fazit: Das direkte Senden der Bytes sollte man nur dann vorsehen, wenn es es wirklich auf jede Mikrosekuude Übertragunszeit ankommt. Ist das bei Dir der Fall? Der Nachteil ist nämlich, dass man selbst ein sehr ausgeklügeltes System erfinden muss, um den Anfang eines Datensatzes zweifelsfrei zu erkennen. Das ist hier nicht der Fall, hier waren Amateure am Werk.

Normal is das Senden als direkt lesbarer Ascii-Code, also z.B. Senden der 2-byte Information FFFF als 4 Zeichen "F", gesendete Länge 4 byte, so wie es dasteht. Man hat dann jede Menge ansonsten nicht benutzter Steuerzeichen zur Verfügung und kann z.b über Steuerung mit TermEnd wunderbar die einzelnen Datensätze lesen. Aktiviert hast Du TermEnd ja schon (hier: sinnloserweise).

Nachtrag: Mir sind Zweifel gekommen, wie die Daten wirklich übertragen werden. Werden die 10 Bytes pro Kanal nun wirklich direkt gesendet - dann hätte man als Zeichenkette 10 meist nicht darstellbare ASCII-Zeichen.Oder kommen pro Kanal 20 ASCII-Zeichen an, und zwar genau die Zeichen, wie sie von Dir gepostet wurden? Die Zeichenkette enthält dann im Informationsteil nur die Zeichen 0..9, A..F, evtl. noch Leerzeichen, Komma oder Dezimalpunkt, Tabulator. Zur Synchronisation würde man dann sinnvollerweis andere als die oben aufgelisteten verwenden, also z.B das Zeilenendezeichen.


RE: Messwerte von Mikrocontroller - sunshine1234 - 11.02.2015 17:31

Hallo Zusammen,
habe mir das Problem nun näher angeschaut.

Das Problem mit den Start- und Endbyte´s wurde beseitigt die Synchronisation ist vorhanden.

Habe nun versucht nach der Aufteilungstechnik(Strings schneiden) zu arbeiten und bin dann zu folgendem Ergebnis gekommen.
Wieso kann ich den String einzeln einlesen und nicht über die Serielle Schnittstelle?

Wäre gut wenn jemand drüber schauen könnte glaube nicht das es sauber gemacht wurde vielleicht hat da jemand eine andere Idee welche sauberer programmiert ist.

Viele Grüße und Danke für eure Hilfe

lv11_img


RE: Messwerte von Mikrocontroller - GerdW - 11.02.2015 18:28

Hallo sunshine,

was hast du denn da für eine Tapete produziert?
Und warum passt du nicht auf den Darstellungsmodus deiner Stringkonstanten auf?

Beispiel:
[attachment=52118]
Achte auf die Darstellungsmodi der Stringkonstanten und der Arrayanzeigen im Bild!
Das Beispiel ist strikt nach deinen Angaben programmiert, es fehlt die komplette Fehlerbehandlung!