Kommunikation zwischen Host & sbRio via Funkverbindung (FTDI)
Verwendete Hardware:
- sbRIO 9642
- APC 220 Radio Data Module
Ich habe folgendes Problem:
Ich möchte vom PC via Funkmodul mit der sbRIO kommunizieren. Die Funkmodule sind auf beiden Seiten via COM-Schnittstelle angeschlossen. Nun möchte ich Steuerbefehle vom PC auf die RIO schicken, und umgekehrt möchte auch von der RIO auf den PC Informationen schicken. Dies funktioniert auch soweit. Allerdings habe ich das Problem, dass der String (den ich ja schicken muss) nicht immer richtig ausgelesen wird. Um das Problem zu veranschaulichen möchte ich Ihnen ein Bsp. geben.
Ich verwende aktuell 4x H-Brücken. Von jeder H-Brücke interessieren mich genau 5 Werte (PWM Wert [0...50µs], Direction, Reset, FF1+FF2 (Fehlerzustände). Die ersten 3 Werte möchte ich vom PC an die RIO senden und FF1,FF2 + 3x Werte von Akkuspg. möchte ich von der RIO auf den PC senden. Hierfür muss ich die Daten vor dem Sendevorgang in einen String umwandeln.
Würde dann zB. so aussehen
PC: 10 TRUE TRUE; 20 FALSE FALSE, 30 TRUE FALSE, 40 FALSE TRUE; ....wäre zB. der konzentrierte String mit den Daten PWM-Wert, Direction, Reset vom PC
RIO: 7,4 FALSE FALSE; 7,6 FALSE FALSE; 8.0 FALSE TRUE; ....wäre zB. der konzentrierte String mit den Akkuspannungen + FF1, FF2 von der RIO
Wenn ich jetzt eine solche Folge über das Funkmodul schicke, dann ist es teilweise so, dass der String nicht richtig gelesen wird, soll heißen, dass die Reihenfolge nicht bestehen bleibt, sondern die Zeichen sich verschieben. Demzufolge kann ich dann den String nicht wieder in die einzelnen Datentypen zerlegen. Genau hier besteht das Problem. Je nachdem wie lange der konzentrierte String wird, kommt es beim Empfangen in der Zeichen-Reihenfolge zu einem durcheinander. Die Abfrage der COM-Schnittstelle des HOST.vi und RIO.vi befinden sich klarerweise in einer While-Schleife. Beide While-Schleifen sind mit einem "LoopTimeVI" versehen mit jeweils 70ms. Wenn ich diese zB. auf 300ms erhöhe, tritt das Problem nicht, was aber auch keine Lösung darstellt.
Meines Erachtens besteht hier ein "Timing"-Problem. Strings mit der Länge von 50-100 Zeichen sollte doch in 70ms problemlos auszulesen sein mit einer Baud von 9600, oder liege ich hier falsch. Zum Schreiben/Lesen der COM-Schnittstellen benutze im wesentlichen dasselbe wie es unter "Find Examples" zu finden ist.
Ich hätte mir gedacht, dass es möglicherweise daran liegt, dass die beiden Whileschleifen nicht zum selben Zeitpunkt starten, also nicht synchronisert sind. Anbei gleich die Frage ob es eine Möglichkeit gibt zu gewährleisten das HOST.vi und RIO.vi zu synchroniseren.
Ich hoffe ich es kann mir jemand weiterhelfen.
Schöne Grüße
|