LabVIEWForum.de - Datenübertraguns- und Auswertungsprobleme via RS232! Bitte um dringende Hilfe!

LabVIEWForum.de

Normale Version: Datenübertraguns- und Auswertungsprobleme via RS232! Bitte um dringende Hilfe!
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo an alle!

Ich hoffe, dass mir jemand weiterhelfen kann - ich bin leider mit meinem Latein am Ende und brauche dringend Hilfe. Ich weiss, die gesamte Beschreibung ist ein wenig länglich nun, aber die notwendigen Details sind meines Erachtens sehr wichtig...

Themenbeschreibung und eingesetzte Werkzeuge:

Ich möchte einen Actel FPGA kommandieren (einfache Binärstrings, wie z.B. "00000000"), bzw. eine Kommunikation mit diesem herstellen.
Die Kommunikation läuft über die sog. "UART-Schnittstelle", basierend auf dem EIA-232 (RS 232) Interface, aber mit differentieller LVDS (EIA-644) Signalisierung.
Hierfür habe ich eine Applikation erstellt (LabVIEW 2009, SP 1, Deutsch) und für die Kommunikation gängige VISA-VIs aus der "Instrumenten-I/O- Funktionspalette" eingesetzt (VISA-Öffnen, seriellen Prot konfigurieren, VISA-Schreiben, VISA-Lesen und VISA-Schliessen).
Der serielle Port wurde mit LabVIEW folgendermaßen konfiguriert:
- Baudrate: 9600
- Datenbits: 8
- Parity: Odd
- Stopbits: 2
- Flusskontrolle: keine
Die UART-Schnittstelle verlangt folgende Konfiguration:
- Datenrate: 115200 bit/s
- Datenbits: 8
- Parity: Odd
- Startbits: 1
- Stopbits: 2
- Hardware Handshake: keinen
Als Verbindungskabel zwischen Rechner (LabVIEW-Software) und FPGA dient ein USB-Adapter (ExSys für RS-422/485). USB-Anschluss wird mit dem Rechner verbunden, das Ende ist ein Com-Stecker, der mit einem weiteren, selbstgebauten Adapter schlussendlich über RJ-45 mit dem FPGA verdunden ist.
Der FPGA selbst wird mit einem Logic-Analyser überprüft.

Problembeschreibung:

Nach erstmaligem Testen werden über die Schnittstelle zwar Daten an den FPGA übertragen, doch mit dem Logic-Analyser kann man erkennen, dass ein beliebiges Bitmuster übertragen wurde, nur nicht das eigentlich gewünschte Kommandowort angekommen ist. So übergebe ich z.B. dem VISA-Write-VI als Datenstring ein Byte ("00000000") und der Logic-Analyser zeigt an, der FPGA würde 9 Byte empfangen, bestehend aus beliebig zusammengestellten Nullen und Einsen.
Wird der FPGA testweise über die Kommandozeile angesprochen, empfängt er das gewünschte Byte, weswegen angenommen wird, das die Problematik seitens von LabVIEW zu suchen ist.

Fragestellung:

Kann mir jemand einen Tipp geben, in welcher Richtung ich nach der Problemlösung suchen muss?
Liegt es an der Konfiguration der seriellen Schnittstelle seitens LabVIEW oder ist es eher die Hardware, die Probleme bereitet?
Ein Kollege meinte, es würde an den Strings liegen, die das VISA-Write-VI überträgt. Ist dies möglich? Mir wäre nicht bekannt, dass man dem Write-VI einen anderen Datentyp als Datenpuffer übergeben kann, oder?
Gibt es neben Logic Analyser noch eine weitere Möglichkeit, die Daten, die TATSÄCHLICH über die serielle Schnittstelle übertragen werden, anzusehen oder zu verfolgen. Ich habe bereits den NI Spy eingesetzt, der bringt mich aber nicht viel weiter...

So, das ist viel Text, aber besser gings leider nicht.
Ich bedanke mich bereits im Voraus für Eure Geduld beim Lesen uns hoffe auf schnelle Antworten!
Danke!!!

Grüße, Lydia
Hallo Lydia,

"Der serielle Port wurde mit LabVIEW folgendermaßen konfiguriert:
- Baudrate: 9600
...
Die UART-Schnittstelle verlangt folgende Konfiguration:
- Datenrate: 115200 bit/s"

???
Schon mal mit der richtigen Baudrate probiert?

"Ein Kollege meinte, es würde an den Strings liegen"
Eigentlich Quatsch. Aber hängt natürlich davon ab, was du so sendest.
Wenn du "0" als String sendest, kommen beim FPGA die Bits 0b00110000 an, da das Zeichen "0" als ASCII-Wert 0x30 gesendet wird...

"Mir wäre nicht bekannt, dass man dem Write-VI einen anderen Datentyp als Datenpuffer übergeben kann, oder?"
Du kannst alles versenden, musst es vorher nur in einen String umwandeln...Smile
Hallo GerdW,

erst einmal Danke für die schnelle Antwort...

Ich versuche auch gerade meinen Kollegen davon zu überzeugen, dass Datenrate und Baudrate nicht das gleiche ist... aber er meint, das wäre es nicht.

Zu der anderen Sache: Ich möchte einfach nur einen Datensatz - wie auch immer - in Form eines Bitmusters über die serielle Schnittstelle senden -> im Endeffekt möchte ich im LabVIEW in eine Konstante "00000000" eingeben und an das Write-VI übergeben. Der Logic Analyser sollte dann einfach nur diesen Datensatz anzeigen. Ich steh total auf dem Schlauch: Wie kann ich das machen? Könntest Du mir bitte mit einem Blockschaltbild weiterhelfen??

Tausend Dank!!
Hallo Lydia,

bei einer seriellen Verbindung müssen sich beide Partner mit der gleichen Geschwindigkeit unterhalten...

Willst du sowas machen:
[attachment=27796] ?

Beachte bitte den Datentyp und die Formatierung der Werte.
(Ich nehme mal an, du willst 8 FALSE-Bits übertragen und nicht etwa 8mal das Zeichen "0"? Den Unterschied hatte ich oben ja schon angesprochen, du bist aber nicht weiter druaf eingegangen...)

"Ich versuche auch gerade meinen Kollegen davon zu überzeugen, dass Datenrate und Baudrate nicht das gleiche ist... aber er meint, das wäre es nicht."
Baud = bit/s (landläufiger Konsens), siehe auch hier...
ich versuch das grad malSmile...

ja, ich will acht false werte übertragen... in dem fall müsste dein vorschlag ja passen ....
Hallo Lydia,

die Bilder sind Snippets, die man direkt in ein Blockdiagramm "reinziehen" kann!
Ne, also, Dein Vorschalg hat leider auch nicht funktioniert.... es sollen einfach nur acht false Werte übertragen werden... so hatte ich es zumindest verstanden... ansonsten müsste ich ja acht mal das Zeichen 0 in Form von ^@ übertragen ...
Hallo Lydia,

"so hatte ich es zumindest verstanden"
Hmm, wie wurde es denn gesagt bzw. aufgeschrieben?

Musst du folgendes übertragen:
- 8 FALSE-Bits - dann reicht ein U8-Wert aus
- 8 Werte, die jeweils ein FALSE repräsentieren - dann halt 8mal ein U8 wie oben
- 8 mal das Zeichen "0" - dann gleich einen String mit "00000000" nehmen

Üblicherweise gibt es ein Handbuch oder ein feststehendes Protokoll, in dem die Kommunikations-Modalitäten beschrieben sind...

"das Zeichen 0 in Form von ^@"
???
Weiß nicht, was du da meinst...
Ich habe beispielsweise ein Kommando, dass den FPGA initialisiert: das ist ein einfaches Byte, bestehend aus 8 FALSE-Bits. Dieses Byte soll an den FPGA übertragen werden und als solches so ausgewertet werden. Ich habe aus Verzweiflung all Deine Vorschläge umgesetzt... beim FPGA kommt jedoch jedes mal etwas anderes heraus. Wenn ich z.B. mit einer String-Konstante "00000000" sende, dann kommt bei jedem einzelnen Sendeversuch ein anderes Muster beim FPGA heraus. Es entspricht jedoch auch nie dem Wert 0x30...

Gibt es noch andere Einstellungen, die ich beachten müsste? Das Write-VI kann ich in dem Fall nicht anfassen. Es steht jedoch auf der Eigenschaft "synchron" ...

Ach, vergiss übrigens das "^@" ... das war 'ne reine Verzweiflungstat...
So - ich bin gerade eben zu einem Ergebnis gekommen. Mein Kollege, der eher die Hardware macht und dementsprechend auch den Logic Analyser viel besser interpretieren kann als ich, ist nur leider in einer Besprechung. Falls mein Ergebnis richtig war, melde ich mich, dann muss sich keiner mehr Gedanken machen! Dann beschreibe ich auch meine Lösung!

Falls nicht, werde ich mich nochmals melden - ich hoffe jedoch, dass es nciht notwendig ist.... Confused

An dieser Stelle nochmals vielen, vielen Dank!!!
Seiten: 1 2 3
Referenz-URLs