VISA Lesen - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA) +---- Thema: VISA Lesen (/Thread-VISA-Lesen--23998) Seiten: 1 2 |
VISA Lesen - Samy1 - 25.04.2013 12:19 Hallo Leute, ich möchte zwei verschiedene 8-bit Werte über VISA von meinem ATMega128 an LabView senden und diese fortlaufend jeweils in zwei Graphen darstellen. Der Mikrocontroller sendet die Werte im folgenden Format: Wert1;Wert2;\n Ich habe das VI "VISA:Seriellen Port Konfigurieren" genutzt um die benötigten Einstellungen vorzunehmen: Ressourcenname: COM1 Datenbits: 8 Baudrate: 115200 Abschlusszeichen: 0xA Stoppbits: 1 Parität: keine Danach habe ich noch das VI "VISA: Puffergröße festlegen" eingefügt und dann folgt die while-schleife in der sich das VI "VISA: Lesen" befindet zum Einlesen des Strings. Diese gebe ich dann auf das VI "Tabellen-String nach Array" um aus dem String die Werte zu erhalten. Das Semikolon dient dabei als Trennzeichen und \n bzw. 0xA als Abschlusszeichen. Insgesamt werden also jeweils 5 Bytes übertragen. Mein Problem ist jetzt dass keine Werte ankommen bzw. das Array immer nur 0 enthält. Ich habe noch keine große Erfahrung mit LabView und weiß nicht ob das alles so richtig ist. Ich habe ein Screenshot gemacht und das VI angehängt. [attachment=44478] RE: VISA Lesen - jg - 25.04.2013 12:28 Schon mal Debugging betrieben? Wie sieht denn der String aus, den du empfängst? Außerdem, wenn der Spaltentrenner ein ";" ist, dann solltest du das auch programmieren: [attachment=44482] Gruß, Jens RE: VISA Lesen - Samy1 - 25.04.2013 13:15 Danke für den Tip! Den String den ich erhalte sieht beispielsweise so aus: -; r; RE: VISA Lesen - jg - 25.04.2013 13:29 (25.04.2013 13:15 )Samy1 schrieb: -; r;Aha, und wie soll jetzt ein Bindestrich und ein "r" in eine Zahl gewandelt werden? Da muss ja ein Array mit nur Nullern rauskommen. Gruß, Jens RE: VISA Lesen - Samy1 - 25.04.2013 13:46 Ja ich dachte das VI "Tabelle-String nach Array" wandelt die Zeichen dann in die Dezimalzahl um die ich gesendet habe. Wie muss ich das denn sonst machen? Bin ich denn überhaupt auf dem richtigen Weg mit meinem Ansatz? RE: VISA Lesen - Lucki - 25.04.2013 14:01 (25.04.2013 13:15 )Samy1 schrieb: Den String den ich erhalte sieht beispielsweise so aus:Wenn der String so aussieht, dann läuft etwas falsch. Denn: Bei Flusssteuerung mit Endezeichen (Hier: \n) müssen die Daten als ASCII-String gesendet werden. Wenn also z.B eine dezimale Zahl "45" (Hex "2D") gesendet werden soll, dann kein Stringzeichen "-" (mit dem ASCII-Wert 45) senden, sondern dezimalen oder Hexadezimalen String "045" bzw. "2D". Wenn man das nicht macht, dann kommen bei den Daten unvermeidbar auch Steuerzeichen vor. Eine Zahl "10" entspräche z.B \n und würde mitten in den Daten als Abschlusszeichen interpretiert. Wenn es sich, wie Du schreibst, um "Dein" AtMega128 handelt, dann wird es ja kein Problem geben, das gesendete Format entprechend zu ändern. Das Format, wie ich es beschrieben habe, ist übrigens quasi die Norm. Ein Ausnahme wird man nur machen, wenn es ein Problem mit der Übertragunsgeschwindigkeit gibt. Denn bei ASCII-Hexformat werden (und das ist der dann ins Gewicht fallende Nachteil) für jedes Zahlenbyte 2 Stringbytes (00..FF) benötigt, bei Dezimalformat sogar drei (000..255). RE: VISA Lesen - Samy1 - 25.04.2013 14:16 Okay danke für die Erklärung, das war mir noch nicht ganz klar!! Allerdings habe ich mit meinem gesendet Format doch die Norm eingehalten oder? Denn ich schicke ja so: void USART_Transmit_2Values(unsigned char data, unsigned char peak) { USART_Transmit(data); //value1 USART_Transmit(0x3B); //0x3B --> Tabulator USART_Transmit(peak); //value2 USART_Transmit(0x3B); //0x3B --> Tabulator USART_Transmit(0xA); //0xA --> Abschlusszeichen } Also: Wert1;Wert2;\n Ach ich muss also die Werte data und peak als hexadezimalen string senden. RE: VISA Lesen - jg - 25.04.2013 14:37 (25.04.2013 14:16 )Samy1 schrieb: Ach ich muss also die Werte data und peak als hexadezimale zahl senden.Ja, das würde helfen. Dann sendest du zwar jeweils 2 Byte anstatt einem, aber so wie du es jetzt machst, können "data" und "peak" ebenfalls den Wert 0x3B oder 0x0A haben. Und dann bricht dein gesamtes Parsing zusammen. Den zweiten "Strichpunkt" kannst du übrigens weglassen, der macht in der Folge in LabVIEW nur wieder Probleme. Parsing in LabVIEW dann so: [attachment=44484] Gruß, Jens RE: VISA Lesen - Samy1 - 25.04.2013 15:05 Zum Testen habe ich jetzt einfach mal folgendes gesendet: void USART_Transmit_2Values(unsigned char data, unsigned char peak) { USART_Transmit(0x1); //value1 USART_Transmit(0x5); USART_Transmit(0x3B); //0x3B --> Tabulator USART_Transmit(0x1); //value2 USART_Transmit(0x6); USART_Transmit(0xA); //0xA --> Abschlusszeichen } Dann bekomme ich aber wieder nur irgendwelche Zeichen und im Array 0 raus. RE: VISA Lesen - GerdW - 25.04.2013 15:38 Hallo Samy, Zitat:USART_Transmit(0x1); //value1Falls du die Zahl "15" übertragen willst, solltest du die ASCII-Werte 0x31 und 0x35 senden. 0x1/0x5 sind nämlich auch Steuerzeichen... Wikipedia hilft dir gern! |