Name | Last modified | Size | Description | ||
---|---|---|---|---|---|
roundToSignificantDigits.vi | 2016-11-18 13:06 | 13K | |||
path.zip | 2016-11-18 13:10 | 86K | Einsicht | ||
lb32.zip | 2022-03-09 11:54 | 70K | clz bzw. ld (heute lb) aus Uint32 für FPGA ohne Takt und in nur 2 Logikstufen in Disjunktiver Normalform, für Konvertierung Int32⇒Float32 erforderlich. | Einsicht | |
ewa.zip | 2016-11-17 17:07 | 43K | Dateiauswahldialog für Pfadauswahl-Element programmatisch generieren | Einsicht | |
atropos.zip | 2015-04-20 10:08 | 624K | Einsicht | ||
WagoTalk.zip | 2012-08-13 11:50 | 32K | Modbus-TCP-Beispiel für WAGO-750-341 (Feldbuskoppler), hier: 16 digitale Ausgänge setzen+rücklesen, 8 digitale Eingänge erfassen, ohne NI-ModBus-Bibliothek (dadurch übersichtlicher) | Einsicht | |
ToUnicode.vi | 2011-02-10 12:14 | 14K | MBCS (bspw. ANSI- oder UTF-8-String) in Unicode-String umwandeln (sinnvoll für Eingabefelder wenn UseUnicode=true in der LabVIEW.ini steht) Converts Unicode (UTF-16) string to MBCS (default: UTF-8) string | ||
SuperMessung.zip | 2015-04-16 17:41 | 584K | Mehrere Datenquellen unter einem Hut: Plugin-basiertes erweiterbares Messsystem, für Hauptanwendung Live-Visualisierung und Datenlogger | Einsicht | |
Spindel.zip | 2012-07-10 14:22 | 4.6M | (Ehemaliger) Versuchsstand Motorspindel = 2 Motoren mit Zahnriemen und Schaltschrank, 6 kapazitive Sensoren rund um die Werkzeugspindel messen Fluchtabweichung, Bonbon: 3D-Darstellung der Verkippungen | Einsicht | |
Signal-Array anhängen.vi | 2010-03-25 13:31 | 32K | Dieses VI sollte man nur für kleine Datenmengen benutzen, da wenig performant. Bei großen Datenmengen eine (evtl. limitierte) Queue oder ein zweidimensionales Array benutzen, so wie es der Signal-Graph mit History-Daten tut. | ||
Modalanalyse.zip | 2012-06-20 15:03 | 232K | Modalanalyse per Soundkarte, mittels Impulshammer und Messsonde. War mal als Scherz zur Doktorverteidigung gedacht, ist aber tatsächlich produktiv einsetzbar. | Einsicht | |
Metrom.zip | 2012-02-29 16:43 | 714K | Für die Untersuchung der dynamischen Genauigkeit einer (ehemaligen) parallelkinematischen Fräsmaschine mit Langspindeln | Einsicht | |
Leistungsberechnung.zip | 2012-07-23 20:03 | 948K | Netzanalyse an Gleich-, Wechsel- und Drehstrom, vielkanalig, via Measurement&Automation Explorer | Einsicht | |
IWP.zip | 2014-01-31 16:40 | 1.6M | LLB-Sammlung für Men-At-Work:
Hier als Beispiel die häufig benötigte Funktion AlmostEqual (Beinahe-Gleich), hier mit Platzhalter ($1) für Einheiten: | Einsicht | |
GraphEditByMouse.zip | 2020-02-12 13:51 | 1.2M | XY-Graph als CSV-Daten (mit wenigen Datenpunkten für eine Heizungssteuerung) mit der Maus editieren. | Einsicht | |
FromUnicode.vi | 2011-02-10 12:12 | 14K | Unicode-String in MBCS (bspw. ANSI- oder UTF-8-String) umwandeln (sinnvoll für Eingabefelder wenn UseUnicode=true in der LabVIEW.ini steht) Converts MBCS (default: UTF-8) string to Unicode (UTF-16) string | ||
FluxControl.llb | 2016-09-26 18:17 | 17K | Runden von zwei Zahlenwerten als Endwerte einer Skale: Auf angebbare Genauigkeit (auch gebrochen), der obere Wert auf-, den unteren Wert abrundend. Die Nachkommastellen als Ergebnis dienen der Formatierung der Zahlen. | ||
AutoDiagramm.vi | 2016-11-17 11:09 | 60K | Teil von SuperMessung: Automatische Zuordnung von Signalen zu Achsen anhand von (gleichen) Einheiten, Achsenbeschriftung farbig passend zur Plotfarbe (hier: LabVIEW 2010): Testprogramm, Screenshot | ||
ArrayProgress.zip | 2020-03-05 10:39 | 34K | Prozess-Steuerung: Zeitverlaufs-Array (etwa wie CSV-Daten) bei Abarbeitung mit Fortschrittsbalken hinterlegen — Video (animiertes GIF bei heller Windows7-Kontrastdarstellung) | Einsicht |
So hübsch LabVIEW auch aussehen mag, früher oder später stößt man auf unlösbare Probleme:
Vergleichbar mit Skriptsprachen haftet so auch LabVIEW das Manko der schwierigen Skalierbarkeit für größer werdende Vorhaben an. Abgesehen davon, dass man sich mit Gedeih und Verderb an die Politik von National Instruments klammert und mit den undokumentierten VI-Dateien niemals echten Quelltext vor sich hat.
Ein häufiges praktisches Problem ist eine Datenerfassung, die nicht aussetzen darf. Hingegen sind Verzögerungen in der Weiterverarbeitung kein Problem. Die Abtastrate oder Kanalzuordnung sollte zur Laufzeit änderbar sein, und die Datenerfassung bei wackeliger Schnittstelle selbst „recovern“. (Dann und nur dann sind Löcher unvermeidbar und zulässig.)
Grundsäzlich sind Messdaten in Stücke von 100 ms Länge zu packen, um den besten Kompromiss von Rechenlast und Antwortverhalten zu erreichen. Der Datentyp „Signal“ (Waveform) ist stets zu bevorzugen.
Lösung:
Wichtig ist, dass:
Immer wieder stört es mich, nicht sinnvoll dynamische Einheiten verwenden zu können, etwa eine Einheit aus einem Double-Eimgabefeld herauszuholen. Die Antwort ist simpel: Es geht nicht! Die Einheitenzuordnung ist statisch (wie oben bereits bemerkt).
Nun, über ein Variant geht es doch! Den Variant kann man mittels Variant to Flattened String in einen String (enthält den Wert) und ein mysteriöses Int16-Array aufteilen. Dieses Int16-Array enthält:
Die Liste der Basiseinheiten ist wie folgt aufgebaut:
Für den Basiseinheit-Enum habe ich folgende Zuordnungen gefunden:
Wichtig: Einheitenvorsätze werden nicht weitergegeben! Man weiß also nicht, ob ein Wert in °C oder K angegeben wurde, es wird stets in K umgerechnet.
Eine Ähnlichkeit zur Einheitenkodierung im USB-HID-Deskriptor drängt sich auf; dort passt sie nibbleweise komplett in ein DWORD. Raumwinkel und Stoffmenge hat man da allerdings „vergessen“.
Auf die schlaue Idee, aus dem LabVIEW-Programm eine .EXE zu machen um diese auf einem anderen PC laufen zu lassen kam wohl schon fast jeder. Aber Pustekuchen, die Echse benötigt eine NI-Laufzeitumgebung!
Ist diese endlich installiert, stellt man schließlich fest, dass „Gerätetreiber“ zum Zugriff auf die Hardware fehlen. Das betrifft zumeist eine serielle Schnittstelle sowie NI-Hardware, oftmals ein NI USB-6008.
Dazu muss dann noch einmal Software heruntergeladen werden:
Dann sollte die Echse auf dem Zielrechner endlich funktionieren.
Will man, dass die Software „probeweise“ auf einem Zweitrechner nur zur Datenauswertung ohne Treiber läuft, muss man die Hardware zugreifenden VIs dynamisch laden. I.a. zu viel Aufwand!
Dann kann man sich an das Deinstallieren nicht benötigter Softwareteile machen. Unbedingt drauf bleiben muss das was in der Grafik rot markiert ist.
Man muss tatsächlich sowohl das im Bild zu sehende .NET-Geraffel als auch das LabWindows/CVI-Geraffel drauf lassen! TDM Excel, VIPM und Netzwerkbrowser kann IMHO weg. I/O Trace vermutlich auch. Das PXI-Zeug muss anscheinend drauf bleiben, auch wenn man kein PXI (= externes PCI oder PCIexpress, dass ist die ganz teure NI-Hardware) hat.
Das benutzerdefinierte Laden eines VIs nach Namen ist aus der .EXE-Datei heraus nicht möglich; EXE-Dateien sind keine LLB-Dateien.
Beim Compilieren gibt es keine entsprechende Fehlermeldung oder Warnung. Nur statische VI-Referenzen dürften funktionieren. Vielleicht.
In einem Fall wollte ich LabVIEW-Datengenerator-Threads (die Daten von A/D-Wandlern aufnehmen) sowie Linearisierungs-VIs (die diese Daten umrechnen) vom Anwender auswählbar gestalten. Schön modular also. In eine .EXE compiliert funktioniert nichts mehr davon.
Da NI-Hardware immer über den Measurement & Automation Explorer (MAX) läuft, sollte diese nicht eingesetzt werden. Nein, niemals! Der Ärger hört nicht auf. Wirklich nicht!
Alternativen sind, je nach erforderlicher Rechenleistung:
Zusätzlich muss man geeignete A/D-Wandler, D/A-Wandler und Relaiskarten finden oder basteln. Machen die Chinesen auch so.
Aber nichts anderes! Insbesondere kein VisualBasic. Sonst kommt der Ärger wieder, und man schießt sich schon wieder ins Knie.
Seit 2019 gibt es WebUSB für Google Chrome, und mittlerweile (2022) für alle gängigen Browser außer Firefox. Insbesondere funktioniert es mit Smartphones; für diese wird ein geeignetes USB-Kabel benötigt. Der Einsatz von WebUSB erfordert, dass die Interaktion mit dem Untersuchungsobjekt ausschließlich über einen selbst zu programmierenden USB-Mikrocontroller läuft. Als Ausgangspunkt dafür eignet sich Arduino Leonardo mit ATmega32U4 (nicht Arduino Uno, Arduino Mega), Arduino Due, STM32F1xx „Blue Pill“ sowie jeder Mikrocontroller mit USB-Device-Interface, wie PIC16F1459. (Software-Pingpong-USB wie OBDevs V-USB geht auch ist aber weitestgehend obsolet weil low-performant.) Ein Raspberry ist nicht das richtige, hierfür gibt es vergleichbare Lösungen via Ethernet, Stichwort WebSocket.
WebUSB erspart es, für USB-Geräte ein Bedienfeld erstellen zu müssen, häufig Siebensegmentanzeigen und Tasten. Dies übernimmt eine mit Javascript gepickte Webseite, deren Adresse das Gerät dem Host beim Anstecken mitteilt. Zudem kann der Host (auch das Smartphone) das USB-Gerät mit Strom versorgen, und man muss sich nicht mit der Stromversorgung herumärgern.
(Eigenversorgte) WebUSB-Geräte können autonom arbeiten und sind nicht von den Launen des Host-PCs (Abstürze, Updates) abhängig. Das ist vor allem für langwierige Prozesse sowie sicherheitsrelevante Aufgaben erforderlich.
Die Anwendung wird in Javascript erstellt. Von Nutzen ist es, vorgefertigte Komponenten für die Grafdarstellung in einem canvas einzusetzen, aber letztlich kein Muss.