LabVIEWForum.de
Serielle Schnittstelle zu langsam - 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: Serielle Schnittstelle zu langsam (/Thread-Serielle-Schnittstelle-zu-langsam)

Seiten: 1 2


Serielle Schnittstelle zu langsam - Gaussometer - 31.05.2013 09:30

Hallo miteinander

Ich habe wahrscheinlich einen überlegungs fehler in der programmierung, weil ich noch nicht oft mit Labview gearbeitet habe.

Ich nutze für die Datenerfassung einen Mikrocontroller der über die serielle Schnittstelle mit meinem Rechner verbunden ist.
Der Mikrocontroller sendet immer ein Highbyte und ein Lowbyte die ich dann in Labview zusammengefasst werden.
Insgesamt sind es 4096 Werte die in ein Array geschrieben werden und dann später in ein Graph gezeichnet werden.

Wenn ich die Baudrate auf 9600 habe funktioniert alles einwandfrei. Allerdings dauert so die Übertragung etwas lange, darum würde ich gerne die Baudrate erhöhen.
Ich habe allerdings das Problem das ich dann nur noch eine bestimmte Menge an Daten bekomme. Gesendet werden aber alle. Das habe ich mit einem Terminal Programm überprüft.

(siehe Bilder mit den unterschiedlichen Baudraten)

Ich habe mir schon einige Beispiele angeschaut aber ich habe leider noch keine Lösung für mein Problem gefunden.
Ich vermute ich brauche den Eigenschaftsknoten mit Bytes at Port. Weil ich das schon in mehreren Beispielen gesehen habe Big Grin.
Aber ich habe die Funktion noch nicht richtig verstanden.

Ich benutze die Studentenversion von Labview V11.0

Was sicherlich auch ziemlich unschönn programmiert ist ist mein "Fehler Timeout ignorierer". Ich wusste nicht genau wie ich auf die Daten warten kann in Labview. Also habe ich einfach den Timeout fehler ignoriert.

Ich bin für jeden Tipp oder Lösungsansatz sehr Dankbar Smile.

MfG Lukas


RE: Serielle Schnitstelle zu langsam - GerdW - 31.05.2013 11:53

Hallo Lukas,

alles, was du mit den 4 Einzelbyte-Abfrage machst, kannst du auch mit einer Abfrage von 4 Byte erledigen:
[attachment=44859]
(Einzelwert-Abfrage ist immer blöd...)

Die Fehlerabfrage geht auch einfacher:
[attachment=44860]

Bitte aufräumen und optimieren!

Noch ein Tipp: Producer-Consumer-Schema hilft bei zeitkritischen Anwendungen ganz gut weiter...

Zitat:Ich vermute ich brauche den Eigenschaftsknoten mit Bytes at Port. Weil ich das schon in mehreren Beispielen gesehen habe :Big Grin:
Dann solltest du auch gelesen haben, dass du den Knoten nicht brauchst...


RE: Serielle Schnitstelle zu langsam - Gaussometer - 31.05.2013 12:54

Sorry da habe ich wohl ausversehen die alte Version von meinem Programm erwischt. Den Befehl mit den T stücken kannte ich noch nicht. So kann ich den Code etwas verkleinern. Der Winkel wird übrigens nicht mehr benötigt.

Die Fehlerabfrage werd ich so übernehmen Danke.

Gibt es eine möglichkeit zu prüfen ob der Buffer leer ist ? Dann könnte ich die While Schleife stoppen falls der Buffer leer ist und ich mindestens 100 Werte gelesen habe UND ein Timeout entsteht.


RE: Serielle Schnitstelle zu langsam - GerdW - 31.05.2013 13:01

Hallo Lukas,

- die Beispiele oben waren Snippets, die hättest du übernehmen können...
- der "Befehl mit dem T" nennt sich Join und ist in der Numerik-Palette versteckt...
- IndexArray kann man aufziehen, dass muss man nicht mehrfach im BD verstreuen...
- ein Blockdiagramm kann man aufräumen, macht immer einen guten Eindruck hier...


RE: Serielle Schnitstelle zu langsam - Gaussometer - 31.05.2013 13:21

Ah Danke für den Tipp mit den Snippets Wink

Ich hoffe jetzt stimmt alles.

Ich habe vorhin den oberen Post von mir nochmals editiert, alls du schon einen neuen geschrieben hast.
Ich stell darum meine Frage nochmals falls du sie überlesen hast.

Gibt es eine Möglichkeit den füllstand des Meldebuffers zu kontrollieren?

Vielen Dank für deine Tipps bis jetzt.


RE: Serielle Schnitstelle zu langsam - GerdW - 31.05.2013 15:37

Hallo Lukas,

wozu willst du den Füllstand des Read-Buffers wissen?
Wenn du ein Timeout bekommst, dann konnten die angeforderten 2 Bytes nicht gelesen werde, weil der Buffer eben keine 2 Bytes enthielt! Also bedeutet TimeOut auch automatisch, dass der Buffer leer ist (im Sinne von "keine 2 Bytes enthalten")!

Tipp:
- Aufräumbutton benutzen!
- Man kann mehrere Cases zusammenfassen, in dem man mehrere Werte in die Case-Auswahl schreibt...
- Rote Punkte heißen "Coercion Dot" und haben eine Bedeutung...


RE: Serielle Schnitstelle zu langsam - Gaussometer - 03.06.2013 08:50

Ja das stimmt. Demfall sieht es so aus als würde der Buffer volllaufen.
Ich habe versucht die Grösse zu erhöhen aber es ändert sich nichts. Liegt es evt. an der Studentenversion von Labview das der Speicher begrenzt ist ? Oder wie lässt sich erklären dass ich bei höheren Baudraten Daten verliere?.

Die roten Punkte wandeln die Grösse des Datentypes um soweit ich weiss. Das könnte man durch einen umwandler vorher verhindern. Ich habe mehrere Cases benutzt.


RE: Serielle Schnitstelle zu langsam - jg - 03.06.2013 09:09

Mit welchen Parametern/Einstellungen konfigurierst du eigentlich die RS-232?
Hast du mglw. den Termination Char noch aktiv, das wäre bei deiner Binär-Übertragung nicht gut.

Gruß, Jens


RE: Serielle Schnitstelle zu langsam - Gaussometer - 03.06.2013 15:41

Termination Char ist Deaktiviert.


RE: Serielle Schnitstelle zu langsam - jg - 03.06.2013 17:17

Sehr gut.
Nächster Verbesserungsvorschlag: Wer zwingt dich eigentlich, immer nur 1 Messwert (soll heißen 2 Bytes) abzuholen?
Lies doch z.B. gleich 200 Bytes auf einmal, das sind 100 Messwerte auf einen Schlag!

Gruß, Jens