WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

ActiveX COM-Objekt in Simulink einbinden

 

Kenne
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.07.08
Wohnort: ---
Version: R2006b
     Beitrag Verfasst am: 04.07.2008, 14:57     Titel: ActiveX COM-Objekt in Simulink einbinden
  Antworten mit Zitat      
Hallo,

hab mal wieder ein kleines Problemchen in Simulink
Ich will über ein ActiveX Objekt eine Kamera einstellen (Belichtungszeit, Abtastrate) und danach Bilder einlesen. Einen Active X Treiber vom Hersteller der Kamera ist vorhanden und tut auch in MatLab. der Haken ist nur, dass die Funktion zum Bilder Auslesen nue einen Zeiger auf die Bilddatenzurückgibt und MatLab damit nicht wirklich was anfangen kann.

Ich habe nun vor eine s-Function in C zu schreiben, da C keine Probleme mit Zeigern hat und ich so diese Funktion nutzen kann. Nur brauche ich dazu Zugriff auf das ActiveX COM-Objekt der Kamera. Bisher habe ich noch kein Erfolg gehabt, das COM-Objekt aus MatLab heraus anzusprechen.

Ich habe mir auch schon das "Gauges Blockset" angeschaut. Ich selber habe dieses leider nicht zur Verfügung. Soweit ich informiert bin, kann ich damit aber keine Einstellparameter an die Kamera übertragen.

Ich hoffe, dass mir da jemand weiterhelfen kann!
Ich selber bleibe natürlich auch dran und poste eventuelle Ergbnisse hier.

Kenne
Private Nachricht senden Benutzer-Profile anzeigen


Martin Ndong
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 03.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2008, 13:30     Titel:
  Antworten mit Zitat      
Hallo Kenne,

ich habe noch keine große Erfahrung mit ActiveX COM-Objekten. Aber ich bin der Meinung, daß du dein Problemchen (voraussgesetzt ich habe es verstanden) etwas anders lösen kann. MatLab kann tatsächlich Zeigern auslesen. Wenn du einen Treiber vom Hersteller geliefert bekommen hast, dann gehe ich davon aus, daß du dem entsprechend über eine API zugreifen kannst. Sollte dies der Fall sein, kannst du über einen LoadLibrary-Befehl deine API in MATLAB laden und falls Pointers zu lesen sind, brauchst du diese nur über einen libpointer-Befehl zu lesen (Initialisierung nicht vergessen). Einzelheiten kann ich leider an dieser Stelle nicht betrachten, weil die Details zu deinem Anliegen mir nicht bekannt sind. Ich hoffe aber, daß ich dir einigermaßen inspiriert habe. Solltest du aber nicht weiterkommen, melde dich einfach. Meine Wenigkeit könnte schauen, wie wir da weiterkommen könnten.

Viele nette Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Kenne
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.07.08
Wohnort: ---
Version: R2006b
     Beitrag Verfasst am: 07.07.2008, 16:34     Titel: RE: ActiveX COM-Objekt in Simulink einbinden
  Antworten mit Zitat      
Hallo Martin,

vielen Dank schon mal für die Anregung.

Ich habe in dieser Richtung schon Versuche gemacht. Bis jetzt hat das aber nicht so ganz geklappt.

Ich verwende das "ActiveX Software Interface" der angeschlossenen Kamera. Die Kamera ist von IDS und heißt UI-1226LE-M.

Hier die Befehle:

*****************
% create new figure and open first camera found on system
h_fig = figure; %create new figure
IDS_cam = actxcontrol('UEYECAM.uEyeCamCtrl.1', [1 1 500 400], h_fig); %get activeX control handle of camera
IDS_cam.InitCamera(0); %initialisize first camera;

*****************

IDS_cam ist hier dann das sog. "Handle" mit dem über das erstellte COM-Objekt auf die Kamera zugegeriffen werden kann. Dies funktioniert soweit auch.

Mit dem Befehl "IDS_cam.GetImageMem" bekomme ich dann einen Pointer auf die Speicherstelle des Kamerabildes.
So sieht das dann in MatLab aus:

***********
>> IDS_pointer = IDS_cam.GetImageMem

IDS_pointer =

331095424

>> whos IDS_pointer
Name Size Bytes Class Attributes

IDS_pointer 1x1 4 uint32
***********


Wie man hier sieht, ist der Rückgabewert ein uint32 und somit für MatLab kein Pointer.
Danach habe ich folgendes mit dem "libpointer" ausprobiert:

***********
p_IDS_cam = libpointer('uint8Ptr',IDS_cam.GetImageMem);
>> whos p_IDS_cam
Name Size Bytes Class Attributes

p_IDS_cam 1x1 lib.pointer

>> get(p_IDS_cam,'Value')

ans =

72

>> get(p_IDS_cam +1 ,'Value')
??? Can not offset a pointer to be greater then the size of the data pointed to.

***********


Damit habe ich jetzt das erste Element auslesen können. Sobald ich aber den Zeiger erhöhen will um weitere Pixelwerte zu lesen bekomme ich eine Fehlermeldung.
Für mich heißt das, dass ich weiterschauen muss, wie ich den Offset für den Pointer verändern kann. Das Bild hat in meinem Fall nämlich 480x752 Bildpunkte, dei ich auslesen muss.

Meiner Lösung bin ich aber schon näher gekommen und ich werde dran bleiben.
Sobald ich das Bild direkt als Matrix auslesen kann soll die Funktion in eine sog. "s_Function" in Simulink eingebettet werden, damit ich das Bild dort direkt weiterverarbeiten kann.

Gruß
Kenne
Private Nachricht senden Benutzer-Profile anzeigen
 
Tomster
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 26.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2009, 13:55     Titel: Gibts schon Lösungen?
  Antworten mit Zitat      
Hallo!

Ich habe genau das selbe Problem - gibt es denn schon eine Lösung dazu?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Tomster
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 26.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2009, 16:01     Titel:
  Antworten mit Zitat      
Lösung: Image Acquisition Toolbox!

Pointer-Daten auslesen geht nur über eine C-Schnittstelle...

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.