LabVIEWForum.de - "Decimal integer String" to "String"

LabVIEWForum.de

Normale Version: "Decimal integer String" to "String"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Zusammen

Ich bin momentan an meiner Abschlussarbeit: Einen Analogwert wird von einem 12Bit ADC eingelesen, und via SPI dem Datenerfassungstool myRIO weitergegeben. Der Wert wird nun im Labview verarbeitet, und dann wieder via SPI über das myRIO auf einem LCD angezeigt. Ich bin nun praktisch am Schluss mit der Realisation. Ich kann die Werte des ADC korrekt via SPI einlesen und im LabVIEW verarbeiten. Ebenso kann ich Zeichen welche ich in einen String schreibe, auf dem LCD ausgeben. Ich habe nun bei dem zusammenfügen dieser zwei Komponenten etwas Mühe: Das SPI-Interface verarbeitet 8Bit - Arrays. Der auszugebende Wert hat jedoch den Datentyp unsigned Word.
Da ich Strings ja in ein 8Bit -Array umwandeln kann, kam mir die Idee, mit der Funktion "Number to Decimal String" einfach ein String zu erzeugen. Dies funktioniert leider nicht, da nicht ein String erzeugt wird, sondern eben ein Dezimalstring.. Weiss jemand wie man einen Dezimalstring in einen "normalen" String umwandlen kann?
Vielen Dank jetzt schon für die Antworten.
Hier mal 2 Möglichkeiten, wie du von einem U16 auf ein Array of U8 kommst
[attachment=49575]
Gruß, Jens
Falls der ADC im bipolaren Modus arbeitet (+ und - Spannungen), dann gibt es gewöhnlich noch ein kleines Problem mit der richtigen Konvertierung negativer Werte. Melde Dich dann nochmal, wenn es Dich betrifft.
Vielen Dank erstmals für die Antworten.
@ Jens: Beide Varianten haben leider nicht so funktioniert wie sie sollten. Ich habe das Gefühl dass ich vermutlich irgendwo einen Denkfehler mache. Meine Überlegung war/ist folgende: Wenn ich Werte über einen String einlese, zu einem Bytearray verarbeite dann funktioniert dies einwandfrei (Ich kann ja auch 99999999 in den String schreiben und ausgeben=> D.h. es werden einfach die einzelnen Zeichen des Strings ausgelesen, nicht der Gesamtwert). (Siehe Bild im Anhang.)
Um nicht alles kompliziert zu machen, dachte ich mir dass ich den bearbeiteten ADC- Wert nun doch einfach in einen String, und dann in ein Bytearray wandeln könnte. Bei DFFF (maskiert FFF) wäre dies zum Beispiel ja den Wert 4095. Wenn ich diesen nun als Sting verarbeiten könnte, müsste dies meiner Meinung nach funktionieren.
Die eben gegebenen Hilfestellungen führen ja eigentlich auch zu demselben Datentypen, aber komischerweise funktioniert dies einfach nicht.
@ Lucky: Ich verwende vergleiche 0V-5V gegen 5V. Den IN- ist auf Masse.

Ah ja die Variable "12 Bit ADC Wert" hat den Datentyp U16
Habe die Lösung gerade gefundenSmile Danke trotzdem für die Hilfe..
Hallo SunShineDay,

kannst du deine Lösung bitte noch etwas genauer erläutern? Ein reines Bild zeigt leider nicht alles…

- Dein "12 bit Wert" ist augenscheinlich ein Array. Was steht genau in diesem Array?
- Du wandelst dieses Array in 4stellige Dezimalstrings um. Führende Nullen sind anscheinend unnötig?
- Du serialisierst das so erhaltenen Array of Strings. Leider hast du die nötigen Einstellungen dafür in Bedienelementen versteckt. Ich vermute "ohne Längenangabe", aber welche Byteorder verwendest du?
- Der so erhaltene String wird dann in ein Bytearray umgewandelt.
Ich vermute, das ganze könnte auch einfacher funktionieren…
Hallo GerdW

Im Anhang habe ich das grobe Blockdiagramm der Schaltung angehängt (Als ADC wird der MCP3201 verwendet).
1. Der ADC:
hat eine Auflösung von 12 Bit. Das Signal wird als SPI - Protokoll ausgegeben. Gemäss Datenblatt brauch der MCP3201 die ersten zwei Clocks (somit auch Bits) für die Sampletime. In einem weiteren wird das 0Bit übertragen. Das heisst, ich muss den Wert erst mal maskieren, um an die "brauchbaren" Daten heranzukommen. Dies geschieht mit einer AND-Verknüpfung. (Z.B. in C: Port1 &= 0xF0; // Unteres Nibble wird gelöscht.)

2. Das LCD:
ist von Assembly Electronics (EA DOGM081). Auch dieses besitzt ein SPI-Interface welches ich für die Ansteuerung benutze. Ist die Hardware erst einmal am NI myRIO angeschlossen, kann das LCD einfach über das SPI VI im LabVIEW angesprochen werden. Im Anhang das Struktogramm. Der grosse Vorteil gegenüber einem Mikrocontroller ist, dass die Daten nur in das SPI-VI geschrieben werden müssen. (Konfiguration des SPI gemäss Datenblatt. ==> 8Bit per Frame). Als Testprogram habe ich einen String angehängt, und konnte jegliche Daten schön ausgeben.

3.
Meine Überlegung nun: Ich muss nun nur noch den Input des SPI durch den ADC- Wert ersetzen. Folglich sollte ich dann das gewünschte Resultat bekommen.
Um mir die meiner Meinung nach mühsamen Umrechnungen usw. zu umgehen, wandle ich den auszugebenden ADC- Wert einfach in einen String um.==> Bei Strings werden die einzelnen Zeichen ja offensichtlich richtig Übertragen. (So kann ich meiner Meinung nach die Umformung von den 12Bit Daten (gespeichert in einem U16 Array)zu den jeweils zu sendenden 8Bit per Frame gemütlich umgehenSmile)
Der erste Versuch schlug fehl, da ich an der Umwandlung von einem "Decimal integer String" to "String" scheiterte. Deshalb habe ich diesen Thread eröffnet. Mit der Funktion Flatten to String habe ich nun eine Lösung hinbekommen.
Vieleicht gäbe es auch eine schnellere / bessere Lösung. Da ich etwas Zeitdruck habe, ist vorerst einmal einfach wichtig, dass die Schaltung gemäss Aufgabenstellung "Einen Analogen Wert via SPI (unter Zuhilfenahme des Datenerfassungstools myRIO von NI) auf einem LCD darzustellen".
Hallo SunShineDay,

meine Kritik im vorigen Beitrag bezog sich darauf, dass du hier nur Bilder von VIs anhängst, deren Einstellungen leider nicht angegeben werden. Sowas dann als Lösung zu markieren ist schon ziemlich grenzwertig…

Wie deine Schaltung aufgebaut ist, interessierte mich weniger. Eher die Art und Weise der Typumwandlungen…

Dass dein LCD-Panel keine Probleme mit der Anzeige von SPACEs hat, ist nun aber klar geworden. Warum sendest du aber die zusätzlichen 4 Byte ans LCD, die bei deiner Art der Typumwandlung entstehen:
[attachment=49589]
Wenn du die Strings einfach verknüpfen würdest, bekämest du das gleiche Ergebnis - ohne vorangestellte LabVIEW-interne Typmerkmale…
Hallo GerdW

Vielen Dank für diese hilfreiche Antwort. Hab die direkte Verknüpfung der Strings gleich mal mit Erfolg ausprobiert. Ist wirklich eine Vereinfachung des Problems. Ich habe diese Funktion irgendwie übersehen.
Im Anhang die konkrete Umsetzung. Ich musste noch die Wortlänge bei der Funktion Number To Decimal String auf den Wert -4 ändern. (Um den Startpunkt bei 0 zu setzen).
Hallo SunShineDay,

Zitat:Ich musste noch die Wortlänge bei der Funktion Number To Decimal String auf den Wert -4 ändern. (Um den Startpunkt bei 0 zu setzen).
Was für ein "Startpunkt"? Hmm
Eine "Wortlänge" (in der Kontexthilfe heißt der Anschluß "Breite") von -4 bewirkt genau das gleiche wie ein Wert von 0 - oder wenn du dort gar nichts anschließt: die Zahlen werden einfach (ohne führende SPACEs) nach String konvertiert…

P.S.: Die Nutzung des AutoCleanup-Tools würde hier auch nicht schaden! Big Grin
Seiten: 1 2
Referenz-URLs