INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

2D Linescan mit Piezo-Ansteuerung



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

07.03.2012, 16:55
Beitrag #1

Bennici Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011
2011
EN



2D Linescan mit Piezo-Ansteuerung
Hallo zusammen,

im Rahmen meiner Diplomarbeit habe ich in der letzten Woche ein kleines Programm zur Ansteuerung eine Piezo-Controllers geschrieben, welches folgende Features hat:

- Kommunikation mit dem Piezo-Controller (bei mir PI E-710)
- Manuelles Verfahren in 3 Dimensionen
- Berechnung einer Verbindung zwischen zwei Punkten mit variabler Schrittweite
- Halbautomatisches Anfahren beliebiger Punkte auf dieser Linie

Das Programm ist sicher für die meisten hier keine große Sache, für mich war es das erste Projekt nach dem Einführungskurs, der an meiner Uni angeboten wird.
Gedacht ist es dazu, in einem Spektroskopie-Aufbau einen Nanodraht abzuscannen, daher auch die Angaben in µm. Die Geräte-Ansteuerung lasse ich mal drin, wer das Programm "trocken" testen möchte, muss halt vorher die entsprechenden subVIs rauslöschen (Configuration_setup.vi, MOV.vi, POS?.vi und ONT?.vi).

Das ganze ist eine finite state machine, ich habe versucht, so viel wie möglich zu kommentieren, damit man nicht einen ganzen Tag braucht, um meinen sicherlich nicht immer geradlinigen Code nachzuvollziehen.
Da ich davon ausgehe, dass das Programm (wie jede Software) deutlich länger eingesetzt wird, als sinnvoll wäre (da viele Leute zu faul sind, selber was Neues zu programmieren), habe ich ziemlich viele Deppenbremsen eingebaut, man weiß ja nie, welcher Einzeller mal mit dem VI rumspielt.
Ich habe das Programm an unserem Piezo (PI E-710) getestet unter LV 2011, und für einen anderen Aufbau für LV 8.6 kompatibel abgespeichert. Beide Versionen funktionieren und sind angehängt.

Das Programm ist mit relativ geringem Aufwand erweiterbar, so dass man auch vollautomatisch die Punkte anfahren, ein Spektrum aufnehmen, weiterfahren...kann. Das war für meine Anwendung wegen proprietärer Software (würg) seitens des Spektrometers nicht möglich/nötig. Es sind auch Flächen-Scans denkbar, aber die machen halbautomatisch, wegen der quadratisch wachsenden Zahl an anzufahrenden Punkte, wenig Sinn.
Falls jemand Fragen oder Anregungen hat, würde mich das freuen. Wenn jemand mein bescheidenes Programm benutzen kann und sich damit Arbeit spart, freut ich das noch mehr. Natürlich darf der Code beliebig verändert/verbreitet werden, ich hoffe das ist selbstverständlich.

P.S.: Kann mir jemand verraten, warum die Version lv11_img fast dreimal so groß ist wie die LV8.6? Das kann doch wohl kaum nur an den fancy silver-buttons liegen, oder doch? O.o


Angehängte Datei(en)
8.6 .vi  Linescan_LV86.vi (Größe: 49,51 KB / Downloads: 147)

11.0 .vi  Linescan_LV11.vi (Größe: 130,8 KB / Downloads: 162)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
08.03.2012, 09:26
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.411
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 2D Linescan mit Piezo-Ansteuerung
Hallo Bennici,

Zitat:habe ich ziemlich viele Deppenbremsen eingebaut
Ziemlich starke Worte, wenn das erste, was man vom Blockdiagramm sieht, eine RaceCondition darstellt!

Dein VI ist recht konsequent am LabVIEW-Dataflow vorbei programmiert: RaceConditions sind da leider sehr schnell möglich und oft schwer zu debuggen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2012, 14:27
Beitrag #3

Bennici Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011
2011
EN



RE: 2D Linescan mit Piezo-Ansteuerung
Könntest du das bitte präzisieren? Meinst du das gleichzeitige Ansprechen der LED oder das gleichzeitige Ausführen des Dialogs und der Sequenz?

Ist mir beim Programmieren nicht aufgefallen, danke für den Hinweis.

Inwiefern ist mein VI "am Dataflow vorbei" programmiert? Ich verstehe nicht ganz, was du damit sagen willst.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2012, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2012 16:32 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.411
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 2D Linescan mit Piezo-Ansteuerung
Hallo Bennici,

verstehe mich nicht falsch: ich finde es sehr gut, dass du dein VI hier zur allgemeinen Benutzung reinstellst.

Aber:
Starke Worte benutzen und dann offensichtliche handwerkliche Fehler begehen ist schon "interessant".
- RaceCondition wird hier erläutert: du greifst parallel auf lokale Variablen zu - mit nicht vorhersehbaren Ergebnissen...
   
Im Bild wird mehrfach parallel schreibend und lesend (!) auf "point #" zugegriffen - und das war der erste Ausschnitt des BD, der sich mir zeigte...

Zitat:Inwiefern ist mein VI "am Dataflow vorbei" programmiert?
Du benutzt (mMn) viel zu viele lokale Variablen. Benutze Drähte stattdessen (aka DATAFLOW)!

- Gruppiere zusammengehörende Parameter in Clustern.
- Benutze typdefinierte Cluster, wenn diese auch in subVIs benutzt werden.
- Wann immer du lokale Variablen benutzt, um Werte zu bearbeiten und wieder in ihrem Indicator zu "speichern": nutze Schieberegister!
- manches ist aufwendig realisiert: boolsche Werte einfach zu einem Array zusammenfassen und dieses dann in eine Zahl umwandeln lassen sind zwei "Primitives" anstatt jeweils einzeln nach 0/1 umwandeln und per Multiplikation und Addition zusammenzufassen (s. Bildausschnitt).

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2012, 16:54
Beitrag #5

Bennici Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011
2011
EN



RE: 2D Linescan mit Piezo-Ansteuerung
Ok, das ist alles berechtigte Kritik. Wie gesagt, ich bin mir bewusst, dass das nicht immer die eleganteste Lösung war, um es schönzureden Wink

Der Ausdruck "Deppenbremsen" bezog sich nur auf das eigentlich unnötige Aktivieren/Deaktivieren von Schaltflächen, die eh nicht abgefragt werden, und da alle Buttons Taster sind, dort auch nichts schief gehen kann. Ich wollte (mehr oder weniger absichtlichen) Benutzerfehlern vorbeugen, und war dort meiner Meinung nach übervorsichtig. Was soll's.

Ein paar kleine technische Fragen zu deinen Vorschlägen:

- Soll ich also deiner Meinung nach alle Indicators außerhalb der while-Schleife legen und aus den jeweiligen cases heraus in ein (für jeden Datentyp eigenes) Schieberegister schreiben?
- Das mit den boole'schen Arrays ist ein sehr guter Vorschlag, vielen Dank, das werde ich gleich einarbeiten. Auf so eine elegante Lösung bin ich einfach selber aufgrund mangelnder Erfahrung nicht gekommen.

Eine kleine Frage am Schluss noch: Stören die vielen lokalen Variablen die Performance? Wenn ja, wie sehr? Beim Testen lief alles rund, deswegen habe ich dort nichts optimiert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2012, 19:54
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.411
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 2D Linescan mit Piezo-Ansteuerung
Hallo Bennici,

Zitat:- Soll ich also deiner Meinung nach alle Indicators außerhalb der while-Schleife legen und aus den jeweiligen cases heraus in ein (für jeden Datentyp eigenes) Schieberegister schreiben?
Die Indicators können schon innerhalb der WhileLoop bleiben. Man kann aber ein SR verwenden, um die jeweiligen Daten für die nächste Iteration bereitzustellen. Dann braucht man nämlich keine (lesenden) lokalen Variablen dafür verwenden und hat den Vorteil, über das SR gleich noch einen Initialwert bereitstellen zu können.

Zitat:Eine kleine Frage am Schluss noch: Stören die vielen lokalen Variablen die Performance? Wenn ja, wie sehr? Beim Testen lief alles rund, deswegen habe ich dort nichts optimiert.

Lokale Variablen legen Datenkopien im Speicher an. Bei rein skalaren Werten wird dies nicht wirklich auffallen. Wenn du aber anfängst, auf größere Arrays per lokaler Variable zuzugreifen, wirst du recht schnell Penalties spüren (Performancebremsen aufgrund Kopiervorgängen, "out of memory"-Hinweise). Und dann bleibt ja immer noch das RaceCondition-Problem...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: