(27.11.2015 19:36 )GerdW schrieb: [ -> ]- Zu Markos Vorschlag: bitte nicht mit lokalen Variablen arbeiten! (In LabVIEW werden Daten in Drähten und Schieberegistern gespeichert - THINK DATAFLOW!)
[fast off-toppic]
Das sollte man aber nicht so absolut empfehlen , sondern eher gemäß dem Spruch: "Quod liced jovi, non liced bovi" (Was Jupiter - dem Experten - erlaubt ist, ist dem Ochsen - dem Anfänger - nicht erlaubt.) Also im Kontext dieses Threads mag die Warnung durchaus berechtigt sein.
Wie ich festgestellt habe, hat NI selbst in seinen Beispielen keine sonderlichen Berührungsängste vor lokalen Veriablen. Beispiel: Datenpuffer iim XY-Express-VI:
[
attachment=54769]
Bei lokalen Variablen wird zwar eine Datenkopie der Anzeige/des Bedienelementes angelegt. Ein Schiereregister ist aber auch ein Kopie der Daten dieses Elements. Von daher ist ein Schieberegister dann entschieden von Vorteil, wenn ich ansonsten extra zur Datenspeicherung ein Element erstellen müsste, welches ich auf dem FP eigentlich gar nicht brauche. Wenn das Element aber so uns so da sein muss, dann gibt es vom Memoryverbrauch mit Schieberegister keinen Vorteil.
(30.11.2015 14:12 )GerdW schrieb: [ -> ][quote]
Es geht viel einfacher, wenn man mal die ExpressVIs und ihren DDT-Datentyp weglässt und "selbst programmiert": Eine Tabelle ist ein 2D-Array of Strings, die musst du nur in der richtigen Art und Weise zusammenfügen…
Meinst du damit das ich nicht mit dem DAQ-Assistenten arbeiten sollte, sondern mit den einzelnen Teilen also DAQmx-Read DAQms-Write und Task usw. ein VI erstellen sollte ?
mfg
Vladi
Hallo Leute ich bins mal wieder
ich hoffe ihr könnt mir nochmal helfen.
Ich möchte nochmal versuchen zu erklären was mein Ziel ist. Ich habe 24 Sensoren womit ich die Fläche eines Photovoltaikmoduls abfahren will um die Homogenität zu messen. Jeder Sensor hat ein Faktor und ein Offset der zu dem gemessen wert mit einberechnet wird. ( ich habe das im VI beispielhaft an 2 Sensoren gemacht ). Dazu will ich an 12 stellen die Spannung messen. D.h. ich Mache eine Messung verschiebe meine Sensoren und mache die nächste Messung.
In meinem Vi möchte ich das Darstellen. Zum Testen hab ich jetz einfach mit 12 Sensoren und 3 Messungen angefangen ( siehe Anhang).
Meine Frage zum Vi ist jetz. Was passiert mit dem ersten Wert warum wird er falsch dargestellt ? und warum muss ich um die 3 Arrys anzeigen zu können 4 Durchgänge in der For-Schleife einstellen ? Ich komm da grad echt nicht weiter
Ich wäre froh wenn das schon irgendwie funktionieren würde.
Weiterhin würde ich gerne in den Arrays für jeden Wert einen Farblichen Hintergrund Darstellen können. Also für Verschiedene Voltbereiche verschiedene farbliche Hintergründe. Geht das überhaupt ?
Zur Anschaung hab ich nochmal ein Bild hinzugefügt wie ich Werte in Excel ausgewertet habe um eine Idee zu haben wie das Aussehen kann.
mfg
Vladi
Hallo Vladi,
Zitat:Was passiert mit dem ersten Wert warum wird er falsch dargestellt ?
Was ist bei dir der "erste Wert"? Es gibt einen Indicator "Zelle 1" und ein "Array" - was davon wird nicht korrekt angezeigt?
Hast du die Messung/Leitungen/Anschlüsse überprüft?
(Ich habe hier kein DAQmx installiert und kann deshalb nicht nachschauen, wie du den DAQAssi konfiguriert hast.)
Zitat:warum muss ich um die 3 Arrys anzeigen zu können 4 Durchgänge in der For-Schleife einstellen ?
Weil du es so programmiert hast!
Du weißt, wie Schieberegister funktionieren? Du hast die LabVIEW-Grundlagenkurse absolviert?
Zitat:Ich komm da grad echt nicht weiter
Grundlagen-Kurse absolvieren, Beispiel-VIs studieren, einfache VIs programmieren…
Zitat:Zur Anschaung hab ich nochmal ein Bild hinzugefügt wie ich Werte in Excel ausgewertet habe um eine Idee zu haben wie das Aussehen kann.
Für solche Farbdarstellungen kann man den Intensitätsgraph verwenden…
(
Beispiel)
Hallo Gerd,
Zitat:Was ist bei dir der "erste Wert"? Es gibt einen Indicator "Zelle 1" und ein "Array" - was davon wird nicht korrekt angezeigt?
Hast du die Messung/Leitungen/Anschlüsse überprüft?
(Ich habe hier kein DAQmx installiert und kann deshalb nicht nachschauen, wie du den DAQAssi konfiguriert hast.)
In Moment simuliere ich nur ein Signal da ich die Hardware erst in paar Wochen kriege. Der Fehler mit dem ersten Wert hab ich dir mal als Bild im Anhang gepackt.
Du siehst das alle Werte außer der in Zelle 1 korrekt in den Array geschrieben werden.
Zitat:Weil du es so programmiert hast!
Du weißt, wie Schieberegister funktionieren? Du hast die LabVIEW-Grundlagenkurse absolviert?
Ich hab gegedacht das ich Schieberegierster verstanden habe vllt ja doch nicht ^^. Ich Dachte beim ersten Durchgang nimmt er die Werte und schreibt es in den ersten Array und beim zweiten Durchgang in den zweiten Array usw.
Zitat:Grundlagen-Kurse absolvieren, Beispiel-VIs studieren, einfache VIs programmieren…
Ja da bin ich durchgehend dabei die Sachen zu erlernen.
Hallo Vladi,
Zitat:Ich Dachte beim ersten Durchgang nimmt er die Werte und schreibt es in den ersten Array und beim zweiten Durchgang in den zweiten Array usw.
THINK DATAFLOW!
NACH dem 1. Durchgang, NACH dem 2. Durchgang… (NACH statt BEIM)
Allgemeiner Tipp: Wenn man ein VI hat mit mehreren Programmschritten (wie z.B. Datenerfassung, Umrechnung, Schieberegister, Speicherung) und irgendwas funktioniert nicht, dann sollte man sich ein kleines Test-VI erstellen, mit dem man die einzelnen Programmschritte einzeln ausprobiert, bis man sie verstanden hat…
Ok vielen Dank für den Tipp ich nehms mir zu Herzen und versuch das so umzusetzen.
Hat noch jemand eine Idee warum der erste Wert in den Arrays in meinem Bild was ich gepostet habe nicht übereinstimmt ?
mfg
Vladi
Hallo Vladi,
lass dir doch einfach mal anzeigen, was der DAQAssi mit deinem simulierten Gerät für Werte ausgibt. Dann guckst du dir an, was nach dem SplitSignal rauskommt, und dann, was nach deiner Rechnung ankommt. Dann noch einmal kontrollieren, was das JoinSignals generiert.
Zusammenfassung: wenn am Ende deines DATAFLOW der falsche Wert ankommt, musst du weiter "stromaufwärts" schauen, wo der herkommt!
Diesen Vorgang nennt man DEBUGGING, und LabVIEW bietet dafür einige Tools an!
Hallo Gerd, stimmt das hätte ich mir mal angucken können habe den Fehler jetz endeckt. Danke
auf Grund der neuen Erkentnisse habe ich die im Anhang befindliche VI erstellt.
Dazu habe ich mal wieder eine Frage
.
In Moment läuft die VI so das ich steuern kann in welches Array die aktuellen Werte geschrieben werden.
Ich würde es aber gerne so steuern können das wenn z.b. ein Boolean auf True ist er automatisch eine Position weiter geht, sodass ich einfach Nächste Messung klicke und nicht immer von Hand die Position eintragen muss. Und wenn er auf False steht möcht ich das er nicht automatisch weiter geht sondern immer auf der Position bleibt die gerade eingetragen ist.
Ich habe es erstmal so versucht das ich vor meinem Caste Structure für die Positionen noch ein Case structure versucht habe zu bauen das hat aber garnicht geklappt..
Wie könnte ich das realisieren ?
mfg
Vladi
Hallo Vladi,
ich habe dir doch erst letzten gezeigt, wie man durch Nutzung von Arrays seinen Code im BD deutlich vereinfachen kann. Nun bist du wieder mit lauter einzelnen Drähten (inzwischen schon 24 Kanäle!) unterwegs und dein BD wird immer größer. Glaubst du, so sieht professionelle Software aus?
Zitat:Ich würde es aber gerne so steuern können das wenn z.b. ein Boolean auf True ist er automatisch eine Position weiter geht, sodass ich einfach Nächste Messung klicke und nicht immer von Hand die Position eintragen muss. Und wenn er auf False steht möcht ich das er nicht automatisch weiter geht sondern immer auf der Position bleibt die gerade eingetragen ist.
Dann solltest du das auch programmieren…
Programmieren hat auch viel damit zu tun, das man ein Problem analysieren kann, es in Einzelschritte zerlegt, sich einen PAP überlegt und aufmalt(!) - und dann erst programmiert!
Pseudocode:
Code:
counter := 0
FOR i:=0 to #Messungen-1
wait for "Nächste Messung"
IF "Boolean" THEN
counter++
ENDIF
get(messwerte)
values := calc(messwerte)
array[counter]:= values
NEXT
Tipps:
- Momentan hast du eine RaceCondition, da der restliche Code nicht auf deine Event-Struktur wartet.
- Wenn man mehrere (gleich große) 1D-Arrays verwalten will, kann man bequem ein 2D-Array verwenden.
- Ich halte es für hochgradig RubeGoldberg, 24 Einzelwerte auf dem FP zu platzieren statt ein 1D-Array zu verwenden!