LabVIEWForum.de
Mit Matlab über DCOM LabVIEW VI steuern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: ActiveX & .Net (/Forum-ActiveX-Net)
+---- Thema: Mit Matlab über DCOM LabVIEW VI steuern (/Thread-Mit-Matlab-ueber-DCOM-LabVIEW-VI-steuern)

Seiten: 1 2


Mit Matlab über DCOM LabVIEW VI steuern - Nebur - 27.06.2008 15:43

Hoi zamme,

um Abläufe zu automatisieren will ich ein bestehendes LabVIEW VI mit Matlab, von einem anderen Rechner aus, fernzusteuern. Mir schwebt vor eine
ActiveX Verbindung aufzubauen und via DCOM Befehle an LabVEIW zu senden. Soweit ich verstanden habe sollte das kein Problem sein, nur find ich
nirgends eine Anleitung für die Vorgehensweise beim Verbindungsaufbau.

Ich habe eine Beschreibung gefunden, die mir den Weg zu der ProgID beschreibt.

Registry Editor -> HKEY_CLASSES_ROOT -> CW....

Laut Beschreibung sind das die ProgIDs für CWKnob control.

Ich habe das auch schon ausprobiert und bekomme bei einer ProgID Folgende Antwort:

>> LVW = actxserver('CWUIControlsLib.CWSlide.1', '192.168.1.79'Wink

LVW =

COM.cwuicontrolslib.cwslide.1

>> get(LVW)
ActivePointer: [1x38 char]
Caption: [1x38 char]
Font: [1x38 char]
CaptionColor: [1x38 char]
ReadyState: [1x38 char]
Enabled: [1x38 char]
Statistics: [1x38 char]
BackColor: [1x38 char]
ValuePairIndex: [1x38 char]
Value: [1x38 char]
ForeColor: [1x38 char]
ImmediateUpdates: [1x38 char]
ShowFocusMode: [1x38 char]
BackgroundImage: [1x38 char]
Windowless: [1x38 char]
IncDecValue: [1x38 char]
KeyboardMode: [1x38 char]
ValuePairsOnly: [1x38 char]
InteriorColor: [1x38 char]
Axis: [1x38 char]
Pointers: [1x38 char]
CWBindings: [1x38 char]

>> LVW.ActivePointer
??? Invoke Error: Schwerwiegender Fehler

Leider kann ich die Inhalte nicht auslesen und wie finde ich die richtige ProgID zu meine VIs bzw. CWKnobs?
Braucht man für jeden Knopt, schalter usw. eine ProgID?

Die ProgID und den Syntax zum Schreiben und Lesen von Informationen würden mir sehr weiter helfen. Ich benutze LabVEIW 7.1 und Matlab 6.5.

Ich würde mich sehr über Hilfe in Form von einer konkreten Beschreibung oder/und Matlab/VirtualBasic Beispielen freuen.


Mit Matlab über DCOM LabVIEW VI steuern - thomas.sandrisser - 27.06.2008 21:05

Ich glaube nicht, dass du mit den progids arbeiten willst...
wenn du eine verbindung von matlab aus zu einem lv vi oeffnen willst, nimm die einfachste LabVIEW schnittstelle. d.h. oeffne einen channel zu LabVIEW, lad das vi in den memory und setze die controls per set ctl val und lies werte per get ctl val bei simpler angabe des LABELS.

http://sine.ni.com/devzone/cda/epd/p/id/1832

das ist ein beispiel wie du von LabVIEW aus ein VI oeffnest und per activeX fernsteuerst. die elemente musst du lediglich 1:1 auf matlab umsetzen.

anbei ein VBS script, das lediglich zeigen soll wie man es grundsaetzlich angeht...

[code]Option Explicit


Mit Matlab über DCOM LabVIEW VI steuern - rolfk - 30.06.2008 07:45

' schrieb:Hoi zamme,

um Abläufe zu automatisieren will ich ein bestehendes LabVIEW VI mit Matlab, von einem anderen Rechner aus, fernzusteuern. Mir schwebt vor eine
ActiveX Verbindung aufzubauen und via DCOM Befehle an LabVEIW zu senden. Soweit ich verstanden habe sollte das kein Problem sein, nur find ich
nirgends eine Anleitung für die Vorgehensweise beim Verbindungsaufbau.

Ich habe eine Beschreibung gefunden, die mir den Weg zu der ProgID beschreibt.

Registry Editor -> HKEY_CLASSES_ROOT -> CW....

Laut Beschreibung sind das die ProgIDs für CWKnob control.
Freedive hat Dir den Weg schon gewiesen. Nur noch ein Detail. CW Controls sind nicht geeignet um LabVIEW Controls zu steuern. CW kommt von ComponentWorks und das sind ActiveX Controls die Du in eine VB oder VC++ oder ähnliche Applikation einbauen kannst. Sie sehen den LabVIEW Controls ähnlich, haben vergleichbare wenn auch oft etwas eingeschränktere Funktionalität und wurden von NI auf der Basis der LabVIEW Controls entwickelt.

Aber es sind keine LabVIEW Controls!! LabVIEW Controls sind ganz LabVIEW eigene Objekte die auch nur durch LabVIEW angesteuert werden können. Sie sind weder auf Basis von Windows Controls, Windows windows noch irgend eine andere externe Komponente aufgebaut und das ist auch nicht verwunderlich, da sie auch auch in LabVIEW für Linux und Mac OSX laufen müssen.

Rolf Kalbermatter


Mit Matlab über DCOM LabVIEW VI steuern - Nebur - 30.06.2008 12:55

[quote='']Ich glaube nicht, dass du mit den progids arbeiten willst...
wenn du eine verbindung von matlab aus zu einem lv vi oeffnen willst, nimm die einfachste LabVIEW schnittstelle. d.h. oeffne einen channel zu LabVIEW, lad das vi in den memory und setze die controls per set ctl val und lies werte per get ctl val bei simpler angabe des LABELS.

http://sine.ni.com/devzone/cda/epd/p/id/1832

das ist ein beispiel wie du von LabVIEW aus ein VI oeffnest und per activeX fernsteuerst. die elemente musst du lediglich 1:1 auf matlab umsetzen.

anbei ein VBS script, das lediglich zeigen soll wie man es grundsaetzlich angeht...

[code]Option Explicit


Mit Matlab über DCOM LabVIEW VI steuern - Nebur - 30.06.2008 13:38

@Rolf: Deine antwort hab ich glatt übersehen...

Danke für die Erklärung zu CWKnob, das war in der Beschreibung die ich gelesen habe, nicht so genau erklärt.


Mit Matlab über DCOM LabVIEW VI steuern - rolfk - 01.07.2008 10:09

' schrieb:Zuerst schon mal danke für deine Antwort und für das Beispiel,

so habe ich mir das auch vorgestellt aber wenn ich die LabVIEW Application nicht auf dem gleichen Rechner habe kann ich sie nicht mit "LabVIEW.Application" aufrufen sondern brauche eine andere ProgID, da mich Matlab darauf aufmerksam macht, dass er die ProgID nicht falsch ist.

LVW = actxserver('LabVIEW.Application', '192.168.1.79'Wink

??? Error using ==> actxserver
Server creation failed. Invalid ProgID 'LabVIEW.Application'

Bin echt um jede Hilfe dankbar...

Du musst wohl die LabVIEW Typelibrary auf dem Computer installieren. Am einfachsten geht das durch Installation der Runtime.
Zwar könntest Du mit ProgIDs diesen Umstand eventuel umgehen aber danach bekommst Du Probleme wenn Du Properties und Methoden von diesem Server aufrufen willst. Du wirst ja wohl kaum eigene IDispatch Interfaces innerhalb von Matlab generieren wollen um ActiveX aka. DCOM mitzuteilen, wie die Daten über das Netwerk gemarshallt (will sagen verpackt) werden sollen.

Rolf Kalbermatter


Mit Matlab über DCOM LabVIEW VI steuern - Nebur - 01.07.2008 16:33

' schrieb:Du wirst ja wohl kaum eigene IDispatch Interfaces innerhalb von Matlab generieren wollen um ActiveX aka. DCOM mitzuteilen, wie die Daten über das Netwerk gemarshallt (will sagen verpackt) werden sollen.

nein, ich will lediglich einige Schalter und Knöpfe eines Bestehenden VI fernsteuern.

Ich hatte zu Anfang eine Runtime installiert, diese hatte aber nicht die gleiche Versionsnummer wie LabVIEW. Hab jetzt die Runtime mit der gleichen Versionsnummer wie LabVIEW installiert, komme aber auch nicht weiter.

ich vermute einfach, dass ich nicht die richtige ProgID habe, da ich schon mal Funktionen zum fernsteuern einer Application geschrieben habe.
In den Manuals war immer die ProgID "LeCroy.XStreamDSO" angegeben jedoch musste ich schlussentlich "LeCroy.ActiveDSOCtrl.1" benutzen damit es lief. Warum, weiss ich leider selber nicht da die Informationen des Supports von LeCroy recht spärlich waren.

Eine Idee?


Mit Matlab über DCOM LabVIEW VI steuern - rolfk - 01.07.2008 16:39

' schrieb:nein, ich will lediglich einige Schalter und Knöpfe eines Bestehenden VI fernsteuern.

Ich hatte zu Anfang eine Runtime installiert, diese hatte aber nicht die gleiche Versionsnummer wie LabVIEW. Hab jetzt die Runtime mit der gleichen Versionsnummer wie LabVIEW installiert, komme aber auch nicht weiter.

ich vermute einfach, dass ich nicht die richtige ProgID habe, da ich schon mal Funktionen zum fernsteuern einer Application geschrieben habe.
In den Manuals war immer die ProgID "LeCroy.XStreamDSO" angegeben jedoch musste ich schlussentlich "LeCroy.ActiveDSOCtrl.1" benutzen damit es lief. Warum, weiss ich leider selber nicht da die Informationen des Supports von LeCroy recht spärlich waren.

Eine Idee?

Da kann LeCroy nicht so viel dafür. Das ist ein Teil von DCOM/ActiveX und ist auf dem Mist von MS gewachsen. Normalerweise sollte die unversioned ProgID beim registrieren einer ActiveX ProgID automatisch auch generiert werden tut es aber oft nicht.

Such doch mal in der Registry nach "LabVIEW.Application" und dann solltest Du da so einiges finden mit einigen Endungen. Die sollten es dann sein.

Rolf Kalbermatter


Mit Matlab über DCOM LabVIEW VI steuern - Nebur - 03.07.2008 10:29

Ah, danke für die Aufklärung. Ich kann mich leider nur auf die Manuals der Hersteller beziehen...

Ich habe mich auf die Suche nach der richtigen ProgID in Registry gemacht und mit allen in Frage kommenden ProgIDs versucht die Verbindung herzustellen.

Bei 'LVActiveXControl.LabVIEWControl.1' und 'LVActiveXControl.LabVIEWControl' bekomme ich folgende Meldung

>> LV = actxserver('LVActiveXControl.LabVIEWControl.1', '192.168.1.79'Wink
??? Error using ==> actxserver
Cannot find type library. COM object creation failed.


>> LV = actxserver('LVActiveXControl.LabVIEWControl', '192.168.1.79'Wink
??? Error using ==> actxserver
Cannot find type library. COM object creation failed.


Nun frag ich mich ob die type library nicht bei der runtime dabei gewesen ist, oder brauch ich noch eine Software?
Muss ich die Runtime auf beiden Rechnern Instalieren?


Mit Matlab über DCOM LabVIEW VI steuern - rolfk - 04.07.2008 10:07

' schrieb:Ah, danke für die Aufklärung. Ich kann mich leider nur auf die Manuals der Hersteller beziehen...

Ich habe mich auf die Suche nach der richtigen ProgID in Registry gemacht und mit allen in Frage kommenden ProgIDs versucht die Verbindung herzustellen.

Bei 'LVActiveXControl.LabVIEWControl.1' und 'LVActiveXControl.LabVIEWControl' bekomme ich folgende Meldung

>> LV = actxserver('LVActiveXControl.LabVIEWControl.1', '192.168.1.79'Wink
??? Error using ==> actxserver
Cannot find type library. COM object creation failed.


>> LV = actxserver('LVActiveXControl.LabVIEWControl', '192.168.1.79'Wink
??? Error using ==> actxserver
Cannot find type library. COM object creation failed.


Nun frag ich mich ob die type library nicht bei der runtime dabei gewesen ist, oder brauch ich noch eine Software?
Muss ich die Runtime auf beiden Rechnern Instalieren?

Da sollte eher sowas stehen als HKEY_CLASSES_ROOTLabVIEW.Application oder dann mit noch einem Punkt und einer Zahl dahinter.

Ja minimal die LabVIEW Runtime ist schon nötig auf dem Client Rechner von dem Du die Verbinding starten willst. Und auf dem Server wirst Du ja wohl das Entwicklungssystem haben.

Rolf Kalbermatter