LabVIEWForum.de
VI-Datenbankzugriff - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: VI-Datenbankzugriff (/Thread-VI-Datenbankzugriff)



VI-Datenbankzugriff - d.ali - 15.03.2011 15:51

Guten Tag liebe Forengemeinde,

ich hab da wieder ein Problem.

Ist es möglich, in LabView eine Datenbank anzulegen, in der man auf VIs zugreifen kann? z.B. durch eine Vergleichsanfrage?

Ich schilder euch mal das Problem:

Wir sind Studenten im siebten Semester und haben im Rahmen einer Vorlesung die Aufgabe, einen Industrieroboter von Denso mit Hilfe von LabView so zu steuern, dass er geometrische Formen zeichnen kann. Dies haben haben wir im letzten Semester erfolgreich durchgeführt. In diesem Semester müssen wir darauf aufbauen. Wir haben nun die Aufgabe, eine Worterkennung in unser Programm zu implementieren. Z.B. soll mann in einem Eingabefeld das Wort "Hallo" reinschreiben können. Dieses Wort muss dann der Roboter schreiben können.
Einige Buchstaben haben wir schon, aufgrund der Aufgabe im vorherigen Semester, programmiert. Diese werden vom Roboter auch ordentlich abgefahren.
Unser Gedanke ist nun, dass wir pro Buchstabe genau ein VI programmieren. Dieses VI soll dann in einer Datenbank hinterlegt werden. Bei einer Eingabe in ein Textfeld soll dann jeder einzelne Buchstabe dieses Textfeldes durch eine Vergleichsanfrage in dieser VI-Datenbank abgefragt und gestartet werden.

Ist das so möglich oder sind wir da auf dem Holzweg? Und wenn ja, wie könnten wir das lösen?

Danke schon mal an alle, die mir antworten.

mfg
d.ali


RE: VI-Datenbankzugriff - IchSelbst - 15.03.2011 16:17

(15.03.2011 15:51 )d.ali schrieb:  pro Buchstabe genau ein VI programmieren
... aus welchem Alphabet: Unicode ? ...

Ich würde doch wohl eher meinen: Einen Datensatz bauen, der den Buchstaben in Form einer Vektorlinie enthält. Dieser Datensatz wird dann dem einen einzigen VI übergeben. Wie man dann die Buchstaben-Datensätze (Font !) speichert, ist eine weitere Frage. z.B. Pro Buchstabe ein INI/TXT/ETC-File mit dem Buchstaben im Namen.


RE: VI-Datenbankzugriff - d.ali - 15.03.2011 16:37

(15.03.2011 16:17 )IchSelbst schrieb:  
(15.03.2011 15:51 )d.ali schrieb:  pro Buchstabe genau ein VI programmieren
... aus welchem Alphabet: Unicode ? ...

Ich würde doch wohl eher meinen: Einen Datensatz bauen, der den Buchstaben in Form einer Vektorlinie enthält. Dieser Datensatz wird dann dem einen einzigen VI übergeben. Wie man dann die Buchstaben-Datensätze (Font !) speichert, ist eine weitere Frage. z.B. Pro Buchstabe ein INI/TXT/ETC-File mit dem Buchstaben im Namen.


Erstmal danke für die Antwort...

Das ist mir klar. Genau so haben wir die Buchstaben als VI in LabView implementiert. Pro Buchstabe haben wir ein VI generiert. Jetzt soll aber das VI, dass z.B. für den Buchstaben "H" steht in der Datenbank gefunden und gestartet werden.
Salopp gesagt: Kann ich eine Datenbank aus VIs erstellen auf die dann während eines Programmablaufs zugegriffen werden und gestartet werden kann?

Danke


RE: VI-Datenbankzugriff - IchSelbst - 15.03.2011 16:50

(15.03.2011 16:37 )d.ali schrieb:  Salopp gesagt: Kann ich eine Datenbank aus VIs erstellen auf die dann während eines Programmablaufs zugegriffen werden und gestartet werden kann?
Die "Datenbank" macht LV für dich.

VIs kann man auch per VI-Server (guckst du Hilfe etc.) aktivieren. Einfach eine Referenz auf ein VI erstellen. Die Referenz geht dann an einen VI-Server-Knoten. Die Referenz wird vom Namen des VIs abgeleitet.

Du kannst dir z.B. ein Unterverzeichnis machen, in dem alle Buchstaben-VIs liegen. Beim Referenz erzeugen einfach den Namen des VIs anschließen.

[*nachdenk*]

Was genau meinst du denn mit Datenbank? Willst du in der Datenbank suchen so ala SQL?

Mach dir ein Array of String(NameVonBuchstabenVI). Der eingegebene Buchstabe ist der Index in dieses Array ...


RE: VI-Datenbankzugriff - Kiesch - 17.03.2011 15:04

Worauf IchSelbst vermutlich am Anfang hinauswollte, war, dass es vielleicht sinnvoller wäre ein VI zu haben, dass beliebige Vektorgrafiken (da die Formen relativ einfach sind könnte man dafür einfach sogar ein eigenes Format kreiren) in Steuerbefehle für den Roboter umsetzt. Dann braucht man nur noch die Vektorgrafikbeschreibung mehr oder weniger als Textfile zu hinterlegen. Das sollte eine spätere Erweiterung des Programms wesentlich begünstigen (statt am Code arbeiten zu müssen muss man dann nur noch Vektorgrafiken im entsprechend gewählten Format generieren).

Dummycode Beispiel für den Buchstaben H:

Code:
Line 10 10 10 70
Line 10 40 30 40
Line 30 10 30 70

Dabei dient das Line zur Definition der Form und definiert wie die dahinter folgenden Zahlen zu interpretieren sind (und wie viele das sind [sic!]).

Die Buchstaben sollte man aus einfachen Formen (Ellipsenbogen, Kreisbogen, Linie) zusammenbauen können. In jede Zeile würde man dann einfach die Eckdaten angeben (im Beispiel: H besteht aus einer Linie von Koordinate (10,10) nach (10,70), einer Linie von (10,40) nach (30,40) und einer von (30,10) nach (30,70). Das Vektorprogramm muss dann entsprechend nur Ellipsen(-bögen), Linien und Kreisbögen (achja, das sind ja eh spezielle Ellipsenbögen ^^) zeichnen können. Es würde dann automatisch einfach aus der Beschreibung den Buchstaben zeichnen - was denke ich auch einfacher ist, als wenn man für jeden Buchstaben ein eigenes VI macht (auch weil man schneller einen neuen Buchstaben hinzufügen kann - einfach das entsprechende File erstellen).
Die Verwaltungstechnisch einfachste Möglichkeit wäre noch alle Buchstaben in ein File zusammenzufassen und dieses File am Anfang einfach auslesen zu lassen. Dann braucht man während der weiteren Laufzeit noch nichtmal weitere Lesezugriffe und man spart sich nachzuprüfen ob die Files die man sucht (File Buchstabe A etc. pp.) auch wirklich vorliegen.

Intern bietet sich vermutlich die Speicherung entweder als 2D Array von Strings (1. Zeile / Spalte definiert das Zeichen, die folgenden enthalten die Zeichenkommandos) an oder eine Auftrennung nach nem Array von Clustern bei dem die Zeichen die dargestellt werden sollen als String gespeichert werden und die zugehörigen Befehle in einem Array von Strings (im Cluster wie gesagt).

In beiden Fällen würde man das ganze dann einfach einmal durchlaufen und nachprüfen ob der gesuchte Buchstabe gefunden ist und wenn ja einfach die Steuerungsbefehle an das ZeichenVi weitergeben.


Will man das ganze mit einzelnen VIs / Textfiles machen, würde sich anbieten diese durch das entsprechende Zeichen zu benennen und dann einfach entsprechend aufzurufen. ("A" ruft "A.vi" auf, "d" ruft "d.vi" auf, etc.) - wobei ich mir grade nicht sicher bin ob es reicht Dateinamen durch Groß- und Kleinschreibung zu unterscheiden; zur Not kann man auch auf die dem Zeichen entsprechende Nummer ausweichen (entsprechend der Fortlaufenden Numerierung im verwendeten Code; da hatte Labview soweit ich im Kopf hab auch ne Prozedur für die das ausgibt).

Gruß Kiesch

P.S: Mit ner Datenbankabfrage etc. draufzuhauen ist meiner Meinung nach unnötig, da man die auch mit einfachen Methoden umgehen kann ^^