LabVIEWForum.de - Empfangen von Messwerten µC

LabVIEWForum.de

Normale Version: Empfangen von Messwerten µC
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Community,

Also erstmal danke das es dieses Forum gibt. Ihr gebt unerfahrenen Labview-Nutzern die möglichkeit sich an euch zu wenden und mit eurer Hilfe besser zu werden. Wirklich Respekt dafür.
Jetzt benötige ich auch eure Hilfe.
Ich soll Messwerte einlesen. Diese soll ich dann verarbeiten und eine Aktion auslösen. Genauer gesagt, ich rastere mit Lineartischen eine Probe ab, nehme Messwerte auf und LabView soll sich den besten Wert merken und dann auf die gespeicherte Position zurückfahren. Soweit so gut. Jetzt habe ich ein Dummy der Auswerteelektronik und probiere erstmal nur die Messwerte auszulesen. Die Elektronik ist Marke Eigenbau und mit einem selbstgeschrieben Programm auf einem µC versehen. Ich schaffe es den µC anzusprechen und von diesem Werte zuerhalten (eigentlich eine einfache Aufgabe, daher auch das VI recht einfach). Jetzt hat mir der Programmierer gesagt er hätte eine Testsoftware auf den µC geschrieben die auf einen Befehl mit dem senden von 1001 Floatwert reagiert. Ich sende Hex: 02 01 00 00 00 00 00 00 und kriege Hex: 02 01 00 00 0F A4 + 4004 Byte als0 1001 Floatwert + 2 Byte checksumme zurück. Das Problem ist nun, das es immer eine unterschiedliche Anzahl von Floatwerten sind, obwohl es laut Programmierer immer 1001 sein müssen. Frage ist ob ich einen Fehler mache. Jetzt überlege ich ob ich das Abfragen irgendwo zwischen drin mache, sprich der µC sendet und ich klinke mich irgendwo ein. Obwohl er ja auf ein sende Befehl reagiert. Oder der Programmierer hat was falsch gemacht. Wisst ihr evnetuell voran es liegen könnte? Habe mal ein Bild des VI angehängt, welches ich einmal ausführe.
Hallo JK,

Zitat:Das Problem ist nun, das es immer eine unterschiedliche Anzahl von Floatwerten sind, obwohl es laut Programmierer immer 1001 sein müssen. Frage ist ob ich einen Fehler mache.
Ja, du machst einen Fehler!
Du hast das TermChar aktiviert, welches bei "binärer" Datenübertragung deaktiviert sein muss!
(Tipp: Schau dir mal das letzte empfangene Byte an und vergleiche das mit deinem TermChar. Dann überlege, warum das wohl identisch ist…)

Zitat:Ich sende Hex: 02 01 00 00 00 00 00 00 und kriege Hex: 02 01 00 00 0F A4 + 4004 Byte als0 1001 Floatwert + 2 Byte checksumme zurück.
Algorithmus:
- Anfrage senden
- 6 Byte der Antwort lesen. Davon die letzten 4 Byte in ein I32 umwandeln: so bekommst du die Anzahl der noch zu lesenden Bytes (00000FA4h = 4004d)
- dann die so ermittelte Anzahl Bytes lesen, das ist dann anscheinend die Payload
- dann noch 2 Byte Checksumme lesen und alles prüfen…

Noch weitere Fehler:
Ein Bild statt eines VIs/Snippet hier anzuhängen.
Nicht AutoCleanup zu benutzen.
Die VISA-Referenz nicht korrekt zu verdrahten (zwischen allen VISA-Funktionen).
4200 Bytes lesen zu wollen, obwohl man nur 6+4004+2=4012 Bytes erwartet…
Hallo GerdW,

Vielen Dank für deine Antwort. Der erste Teil hat wirklich super funktioniert. Und die Beschriebenen Fehler habe ich natürlich sofort behoben. Es ist wirklich besser wenn man das von Anfang anumsetzt. Danke für die Hinweise
Auf den zweiten Lösungsteils werde ich mich jetzt mal stoßen.

Grüße

Jens
Hallo Community,

ich hab gerade noch ein kleines Problem. Inzwischen habe ich es geschafft den Hex-String in 4 Byte große Teile zu zerlegen und die ersten 6-Bytes "abzuschneiden". Nun ist es so, das die 4-Byte Großen Teile Floating Point Zahl entsprechen. An der Umwandlung von 4-Byte Hex-String zu Floating Point scheitere ich gerade. Ich hab mal das VI und einen Screenshot angehängt. Ran gegangen bin ich mit der Typecast Funktion, aber es kommen zum Beispiel negative Werte vor, was laut Programmierer nicht der Fall sein darf. Auch sollen alle Werte zwischen 50 und 100 Liegen. Auch das ist bei mir nicht der Fall. Habt ihr eventuell eine Lösung parat?

Viele Grüße

Jens
Hallo Jens,

einfach Strings deserialisieren:
[attachment=60417]
Bei Bedarf die Bytereihenfolge über die Konstante anpassen…
Hallo,

das hat wikrlich super geklappt. Jetzt habe ich bloß das Problem das ich immer bloß den letzten Wert aus der FOr-Schleife angezeigt kriege. Siehe Bild und VI. Hättet ihr dafür auch eine Lösung? Nur wenn ich den Tunnelmodus auf "Letzten Wert" stelle kriege eine Verbindung zur Deserialisierung hin.

Vielen Dank im Vorraus.

Grüße

Jens
Hallo Jens,

Zitat:Jetzt habe ich bloß das Problem das ich immer bloß den letzten Wert aus der FOr-Schleife angezeigt kriege. Siehe Bild und VI. Hättet ihr dafür auch eine Lösung? Nur wenn ich den Tunnelmodus auf "Letzten Wert" stelle kriege eine Verbindung zur Deserialisierung hin.
LabVIEW-Basics:
Wenn du ein Array mit Elementen abarbeiten willst, dann solltest du eine autoindizierende Schleife verwenden! (Es sei denn, die Funktion ist polymorph.)

Eigentlich weißt du doch, wie das funktioniert: mit dem TypeCast machst du doch genau das gleiche!?

Nachdem die LabVIEW-Basics geklärt sind: warum packst du das StringDeserialisieren nicht gleich in die FOR-Loop mit hinein, in der die Strings gesplittet werden? Hmm
Hallo Community,

das klappt wirklich super. Vielen Dank Gerd. natürlich wieder ein typischer Anfängerfehler. Jetzt klappt alles super und ich wollte die Anzahl der Bytes und die Anzahl der Schleifendurchläufe auf den später verwendeten Wert erhöhen. Also Bytes zum Teilen 4012 und 1001 Schleifendurchlauf um alle Werte zu erhalten. Klappt auch, bis auf die Einschränkung das der 200te Werte immer die Skala sprengt, also irgendwas über 2000 (kann auch sein das es vom Programmierer so vorgesehen ist) und das es Probleme in der Deserialisierung gibt. Beim Ausführen kommt immer die Meldung "Speicher- oder Datenstruktur fehlerhaft" drückt man mehrmals auf weiter geht es irgendwann. Kennt ihr den Fehler? Weil einfach ein paar mal quittieren und es geht. Denke das der Speicher voll ist oder so.

Vielen Dank und Viele Grüße

Jens
Hallo Jens,

kannst du dein VI bitte für LV2017 anhängen?
(Und bitte an die als default hinterlegten typischen Daten im "Antwort µC"-String denken!)
Hallo Gerd,

Hab es mal als 2017 gespeichert und auch so noch einiges geändert. Irgendwie taucht das Problem jetzt auch total willkürlich während des messens auf.
Was meinst du mit den default Daten aus dem String µC?

Viele Grüße

Jens
Seiten: 1 2
Referenz-URLs