22.04.2010, 08:26
(Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2010 08:26 von RabenFlug.)
|
|
|
22.04.2010, 08:54
|
IchSelbst
LVF-Guru
Beiträge: 3.695
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
' schrieb:ich hatte schon öfters Probleme damit daß der Rechner die zyklisch ankommenden Daten nicht schnell genug verarbeiten konnte,
Die Lösung ist eigentlich ganz einfach: ein Zwischenpuffer verwenden.
Es gibt einen "Treiber", der die Daten so schnell empfängt, wie sie vom Endgerät geliefert werden können. Diese Daten werden in eine Queue geschrieben. Diese Queue dient somit als Zwischenspeicher und "Buffer-Vergrößerung". Da dieser Treiber nichts weiter macht als Daten zu puffern, ist der garantiert schnell genug.
Ein anderer Programmteil liest dann die Queue aus und verarbeitet die Daten weiter. Dieses Weiterverarbeiten ist nun von dem Datensampling entkoppelt, sodass das Weiterverarbeiten eigentlich langsam sein dürfte.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
09.06.2010, 23:19
(Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2010 23:21 von RabenFlug.)
|
RabenFlug
LVF-Gelegenheitsschreiber
Beiträge: 59
Registriert seit: Apr 2010
2016
2009
DE
22307
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
Hallo Leute,
jetzt wird's ernst:)Der Auftrag ist eingegangen und die Hardware "klebt" bereits am Prüfstand. Mittels HyperTerm lassen sich mittlerweile Analoge Sollwerte für einen Frequenzumrichter so wie Digitale I/O Werte senden, bzw. abfragen. So weit so gut. Nun habe ich auch angefangen mich intensiver mit LabVIEW zu beschäftigen. Im Moment kommt mir alles wie eine sehr aufwendige und unübersichtliche Version der "normalen" Programmierung vor;)Vielleicht kommt ja noch Licht ins Dunkel der gefühlten 1.000.000 VI's ?!
Ich habe mich inzwischen dazu entschlossen die Serielle I/O Box mit der LabVIEW kommunizieren soll nicht zyklisch Messdaten senden zu lassen sondern diese Daten in einer zeitgesteuerten Schleife von LV aus auzufragen. Dann bestimmt LV das Timing. Eine Echtzeituhr befindet sich sowieso in der Hardware, die Messdaten kommen also immer schön mit "echtem" Zeitstempel.
Nun hätte ich mal eine ganz allgemeine (Verständnis-) Frage. Wenn ich bisher (z.B. mit Delphi) GUIs programmier habe war meistens ein gewisser Teil der Arbeitsfläche mit Bedienelementen immer da, andere Teile der Oberfläche habe ich meist auf Panels gruppiert und diese dann "dynamisch" ein- bzw. aus geblendet, je nach dem welche Bedienelemente gerade benötigt wurden.
Wie lässt sich eine ähnliche "Gruppierung von Controls" realisieren die bei Bedarf angezeigt, bzw. ausgeblendet wird und noch viel wichtiger, ist das bei NI Programmen eine gute Vorgehensweise oder ehr exotisch? Ich möchte ungerne immer das ganze Fenster wechseln.
Habe bis jetzt SubPanel ausprobiert, das funktioniert auch ganz gut um unterschiedliche VI's im Fensterchen eine Haupt-VI's anzuzeigen. Trotzdem erschien mir das irgend wie etwas exotisch (und die Scrollbars ließen sich nicht entfernen).
Schöne Grüsse
RabenFlug
|
|
|
10.06.2010, 06:47
(Dieser Beitrag wurde zuletzt bearbeitet: 10.06.2010 06:48 von Y-P.)
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
Entweder machst Du ein "Tab Control". Da kannst Du die Controls auf unterschiedlichen Seiten zusammenfassen und darstellen, wobei immer nur die Controls der "aktiven" Seite angezeigt werden.
Oder Du packst Deine Controls in einen Cluster und blendest ihn mit der Property "Visible" (davor Property Node erstellen) ein und aus.
EDIT: Hab' Dir noch schnell ein Bsp. dazu gemacht:
Gruppierung.vi (Größe: 10,56 KB / Downloads: 206)
Gruß Markus
' schrieb:Wie lässt sich eine ähnliche "Gruppierung von Controls" realisieren die bei Bedarf angezeigt, bzw. ausgeblendet wird und noch viel wichtiger, ist das bei NI Programmen eine gute Vorgehensweise oder ehr exotisch? Ich möchte ungerne immer das ganze Fenster wechseln.
Habe bis jetzt SubPanel ausprobiert, das funktioniert auch ganz gut um unterschiedliche VI's im Fensterchen eine Haupt-VI's anzuzeigen. Trotzdem erschien mir das irgend wie etwas exotisch (und die Scrollbars ließen sich nicht entfernen).
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
10.06.2010, 09:22
(Dieser Beitrag wurde zuletzt bearbeitet: 17.07.2010 10:02 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
' schrieb:Die Lösung ist eigentlich ganz einfach: ein Zwischenpuffer verwenden.
Das hatte ich in einem Programm auch mal so gemacht - bis ich dann gemerkt habe, daß es überflüssig ist. Für den Empfang hat gibt es bereits einen COM-eigenen Empfangspuffer, der ohne jeder Konfigurierung schon mal 1 kByte (oder so) groß ist. Weiß jetzt nicht, ob der dieser Puffer eine Errungenschaft von Windows oder von LabVIEW ist - auf jeden Fall läßt er sich mit LabVIEW konfigurieren.
Wenn also die Daten mal nicht sofort abgeholt werden, dann sind sie bereits in diesem Puffer gut aufgehoben.
Zur Frage: Was leistet eine COM-Schnittstelle unter LabVIEW? Genau das, was sie unter Windows auch leistet. Also im Windows-Gerätemanager mal nachschauen, welche Baudraten sich dort einstellen lasssen - dasselbe sollte dann auch mit LabVIEW möglich sein. Bei USB-Adaptern kann es sogar sein, daß deutlich höhere Baudraten als üblich möglich sind, z.B hier mit einem FTDI-Chip:
|
|
|
10.06.2010, 09:41
(Dieser Beitrag wurde zuletzt bearbeitet: 10.06.2010 09:43 von IchSelbst.)
|
IchSelbst
LVF-Guru
Beiträge: 3.695
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
' schrieb:Habe bis jetzt SubPanel ausprobiert, das funktioniert auch ganz gut um unterschiedliche VI's im Fensterchen eine Haupt-VI's anzuzeigen. Trotzdem erschien mir das irgend wie etwas exotisch (und die Scrollbars ließen sich nicht entfernen).
SubPanels haben den Vorteil, dass das MainVI klein bleibt - weil ja eben diverse BD-Teile (Software) in SubVIs ausgelagert sind. Ein TabControl ist zwar vom Handling einfacher - dafür wird halt das BD (theoretisch) größer und unübersichtlicher.
Die Scrollbalken kann man ausschalten. Guckst du entsprechenden Methodenknoten (VI-Referenz).
@Lucki: Der Puffer ist eine Errungenschaft von Windows, liegt also auf Betriebssystemebene.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
11.06.2010, 09:09
|
|
|
11.06.2010, 09:16
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
Hallo RabenFlug,
"da ich kein VI gefunden habe"
Das gesuchte nennt sich SpreadsheetStringToArray...
|
|
|
11.06.2010, 09:35
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
' schrieb:Jetzt soll das VI so erweitert werde daß Werte an die Hardware geschickt werden und während dessen das Abfragen von Messwerten unterbrochen wird.
Rein von der Schnittstelle betrachtet wäre die Unterbrechnung aber nicht erforderlich. Sie ist voll bidirektional, man kann empfangen und gleichzeitig etwas anderes senden.
"Da ich kein VI gefunden habe" (zum Zweiten)
Deine Anmerkung "...mehr all 1000 Worte" gilt auch für Dich selbst. Es gibt kaum kein anders Thema, bei dem sich die hier versammelten Experten mehr um schnelle Antworten bemühen als bei String-Conversion. Also poste Deinen String und Du bist geholfen.
|
|
|
14.06.2010, 15:29
(Dieser Beitrag wurde zuletzt bearbeitet: 14.06.2010 15:55 von RabenFlug.)
|
RabenFlug
LVF-Gelegenheitsschreiber
Beiträge: 59
Registriert seit: Apr 2010
2016
2009
DE
22307
Deutschland
|
Umstieg auf, bzw. Neueinstieg in LabVIEW, ein paar Fragen
Moin zusammen,
hier mal mein erstes "Program" - Seriell Daten empfangen und aufteilen und Befehle zur Hardware schicken. Die Box verwendet folgenden Syntax:
Datensatz anfordern: nr
(liefert einen String <value0>(tab 09)<value1>(tab 09)<value2>(tab 09)<value3>(tab 09)<value4>(tab 09)<value5>(tab 09)<value6>(tab 09)<value7> )
Ausgang setzen: set <channel 0..7> <value 0..4096>r
(Die Box antowortet mit * für Okay und # für fail)
Solange keine Befehle (set) an die Box geschickt werden und sie Bedingung "Messen" auf "True" steht werden zyklisch Daten angefragt. Der Intervall kann eingestellt werden. Sobald ein Befehl geschickt wird wird das Anfragen von Messdaten ausgesetzt und der Befehl wird gesendet.
Kommt in einem Ergebnis String ein * oder # vor wird der String nicht wie messdaten verarbeitet, ansonsten wird er aufgedröselt und an jedem Tab (09) getrennt.
Das Ganze ist sicher noch nicht optimal und erst recht nicht effizient programmiert, mir geht es im Moment darum in die Programmiersprache zu finden, die "Vereinfachungen" kommen später. Da ich den letzten Messwert im Ergebnisfeld stehen lassen möchte wenn statt Messdaten ein * oder # ankommt habe ich die Hauptbedingung mit einem Schieberegister versehen um den "letzten" Wert zu übernehmen. Das war eine ganz schöne Verdrahterei, gibt es eventuell eine Möglichkeit mehrere Leitungen zu einer Art "Bus" zusammenzufassen wie in der Layoutsoftware "Eagle" ?
Diesen ganzen "Block" möchte ich als Nächstes in ein Sub-VI packen das dann nur noch 8 (integer) Eingänge, 8 Ausgänge, 1 Boolschen "Messen" Eingang, so wie einen Error-Ausgang und einen Eingang zum senden spezifischer Strings hat.
Die Eingänge/Ausgänge hier sind nat. nur Dummies zum testen
Nun dürft ihr mich in der Luft zerreißen
|
|
|
| |