Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
19.07.2009, 14:56 (Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2009 15:04 von FrankH.)
Hallo liebes Forum,
ich habe ein kleines Programm mit LabVIEW 6.1 geschrieben.
Ziel ist es, Daten zu berechnen und diese dann mittel RS232 an einem Mikrocontroller zu senden.
Bei den Daten handelt es sich um 16Bit unsigned Integer Werte, die ich in einem Array gesammelt habe.
Wenn ich ein Character sende, also "a" o. "b" usw. dann funktioniert das gut und der µC verarbeitet es wunderbar.
Als nächstes habe ich also versucht die Array-Werte in einen String zu wandeln, irgendwo habe ich in "Beispiele" von LabVIEW ein TypeCast (Typenwandlung) gefunden, funktioniert aber nicht wirklich. Verstanden habe ich das auch noch nicht richtig...
Meine Frage:
Was sollte ich als nächstes machen um die 16Bit Ganzzahlen aus meinem Array über die serielle Schnittstelle versenden zu können?
Ich stehe gerade ziemlich auf dem Schlauch.
MfG
Frank
19.07.2009, 22:43 (Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2009 22:48 von schrotti.)
Ein Character hat 8 Bit. Damit du also 16 Bit senden kannst, musst du zuerst die 16 Bit Zahl in zwei 8 Bit Zahlen zerlegen. Erst danach kannst du das Array als String interpretieren. Anbei zwei Möglichkeiten.
Edit: Funktioniert auch mit dem Typecast alleine. Wenn man aber nur kurz darüber nachdenkt, wie Typecast arbeitet, wird einem auch sofort klar, dass dem dem Typecast gar nichts anderes übrig bleibt
So wie Schrotti es gezeigt hat. Das Zahlenarray wird direkt in eine Folge von Bytes konvertiert.
Vorteil: Die Anzahl der Bytes, die gesendet werden, ist minimal.
Nachteil: Es läßt sich nicht zwischen Daten und Steuerzeichen (Bytes 0..31) unterscheiden. Das macht die Datensteuerung über RS232 schwierig.<>
Übertragung der Bytes im ASCII-Format (Hex).
Vorteil: Es kann zwischen Steuerzeichen und Daten unterschieden werden
Nachteil: Pro Datenbyte werden zwei Zeichen gesendet. Also z.B für 255 = 0xFF wird der zweistellige String "FF" gesendet.<>
Spezielle Protokolle, mit denen versucht wird, die Vorteile von 1. und 2. zu kombinieren und die Nachteile zu vermeiden. Darauf soll hier aber nicht näher eingegangen werden.
Die "normale" Methode der Datenübertragung über die serielle Schnittstelle ist am ehesten die Methode 2. Wenn Du daran interessiert bist, dann melde Dich noch mal.
Hallo Schrotti,
danke für deine Erklärung. Ich weiß nicht ob es an meiner LV Version liegt (6.1), jedoch kann ich die Elemente in deiner FOR-Schleife nicht finden.
Ich muss schon in dem Beispiele-Ordner nach dem TypeCast (Typenwandlung) suchen, weil der in meiner Funtkionspalette nicht vorhanden ist. Dein Beispiel habe ich mit dem Typenwandlungselement versucht nachzustellen.... siehe das Ergebnis ;-(
Lucki,
ich würde gerne mehr dazu erfahren.
Gruss
Frank
Gur, dann nehme ich mal einfach die Zahlen von Schrotti:
Die Funktion "Zahl nach Hexadezimal" steht glaube ich in dieser Eleganz in LV6 noch nicht zur Verfügung, aber es gibt etwas Entsprechendes.
Das Steuerzeichen 0xA (n) habe ich angefügt, damit Dein µC das Ende der Zeichenkette erkennt. Es kann auch ein anderes Steuerzeichen sein.
' schrieb:Ich weiß nicht ob es an meiner LV Version liegt (6.1), jedoch kann ich die Elemente in deiner FOR-Schleife nicht finden.
Ich muss schon in dem Beispiele-Ordner nach dem TypeCast (Typenwandlung) suchen, weil der in meiner Funtkionspalette nicht vorhanden ist.
Als Ergänzung:
Die Funktionen gibt es schon in LV 6.1, aber ev. nur in den Prof. Version. Anbei ein Bild von meinem 6.1, auch die Funktion von Lucki gibt es bereits.
.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Super,
habe alles hinbekommen und die Elemente konnte ich Dank RoLe auch finden.
Mein Hauptfehler lag im µC-Programm. Ich habe dort das High- u. Lowbyte vertauscht
und konnte deswegen nie den Wert richtig abfragen.
Also Danke nochmals an alle für ihre Hilfen
Frank