|
|
Funktion aus DLL verwenden |
|
Philipp68 |
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 22.01.2020, 14:24
Titel: Funktion aus DLL verwenden
|
|
Hallo zusammen,
die Arbeit mit DLLs und den in darin enthalten Funktionen ist für mich ein komplett neues Thema und ich würde gerne wissen wollen, ob dies mit Matlab möglich ist bzw. diese Funktionen zu verwenden und besonders wie dies funktioniert.
Kurz etwas zum Thema, ich arbeite mit meinem Digital Micromirror Device der Firma Vialux und soll damit zeitlich und räumlich freikonfigurierbare Muster, die an ein Objekt projiziert werden, erstellen.
Bisher habe ich die dll. und h. in Matlab geladen.
Mir wird im Workspace nun ein 27x1 cell mit den enthaltenen Funktionen angezeigt. Und nun weiß ich nicht, wie ich diese verwenden kann.
Ich habe für mehr Infos mal ein PDF angehängt, in dem diese Funktionen beschrieben werden.
Ich bin für jede Hilfe und Tipps dankbar!
Beste Grüße
Beschreibung: |
|
Download |
Dateiname: |
ALP-4.3 API description.pdf |
Dateigröße: |
1.42 MB |
Heruntergeladen: |
2632 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 22.01.2020, 14:38
Titel:
|
|
Hallo,
mit
calllib
.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 22.01.2020, 14:50
Titel:
|
|
Hallo Harald,
genau "calllib" habe ich eben auch gefunden.
Aber wie genau würde es laut Syntax aussehen?
Ein Beispiel, ich habe aus der Info vom Hersteller folgendes:
"long AlpDevAlloc (long DeviceNum, long InitFlag, ALP_ID *DeviceIdPtr)"
Sagen wir, ich möchte erstmal nur "DeviceNum". In der Doku steht dafür als Parameter "ALP_DEFAULT" - the next available system is allocated.
Würde es dann in Matlab aussehen?
In der Zelle steht die Funktion "AlpDevAlloc".
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 22.01.2020, 15:04
Titel:
|
|
Hallo,
wie würdest du die Funktion aus C heraus aufrufen?
Der Aufruf aus MATLAB heraus lässt sich direkt übertragen.
Insbesondere will die Funktion drei Eingabeargumente, und du musst deren Werte angeben.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 22.01.2020, 15:17
Titel:
|
|
Wie ich es in C aufrufen würde weiß nicht, weil ich damit noch nichts geschrieben habe. Aber vllt wäre es nicht schlecht, es sich dort mal anzuschauen.
Ich habe 3 Parameter, also auch 3 Ausgaben.
Für
DeviceNum = ALP_Default
InitFlag = ALP_Default
DeviceIDPetr = "specifies the address of the variable in which to write the ALP device
identifier." ?
Also umgesetzt, dann so:
Oder verstehe ich das falsch?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 22.01.2020, 15:25
Titel:
|
|
Hallo,
ja, aber du musst eben angeben, was dieser DeviceIdPtr sein soll. Vielleicht muss dazu vorher eine andere Funktion aufgerufen werden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 22.01.2020, 15:34
Titel:
|
|
Alles klar, vielen Dank bis hierher!
Alle Funktionen geben einen 4-byte integer value zurück.
Bei DeviceIdPtr (pointer to a writable 4-byte integer)
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 23.01.2020, 17:19
Titel:
|
|
Ich habe mir den letzten Ausdruck nochmal genau angesehen "ALP_ID *DeviceIdPtr".
So ganz blicke ich noch nicht durch, nur das es sich um einen Pointer handelt, also eine Variable die die Speicheradresse als seinen Wert abspeichert. Und in meinem Fall muss das ein 4 byte integer value sein (So steht es in der Doc).
Als Value wird in einem Beispiel eine Matrix, die angegeben ist, verwendet.
Was muss ich nun für Value und ALP_ID machen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 23.01.2020, 17:28
Titel:
|
|
Hallo,
offen gesagt keine Ahnung. Wie gesagt:
Zitat: |
Vielleicht muss dazu vorher eine andere Funktion aufgerufen werden.
|
... die quasi erst mal die Verbindung zum Gerät herstellt und diesen Pointer zurückliefert.
Hast du denn ein komplettes Beispiel in C, wie man diese Bibliothek verwenden soll?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 23.01.2020, 17:42
Titel:
|
|
Leider habe ich kein Beispiel wie man das verwenden soll. Das einzige, was mir als Information vorliegt, ist das im ersten Beitrag beigelegte PDF.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 23.01.2020, 18:08
Titel:
|
|
Hallo,
ich habe mal kurz gegoogelt und das gefunden:
https://de.mathworks.com/matlabcentral/fileexchange/46673-alptool
Falls das den selben Zweck erfüllt, dürfte es in der Anwendung deutlich einfacher sein.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 27.01.2020, 11:30
Titel:
|
|
Hallo Harald,
vielen Dank für deine Mühe, dieses Programm wurde vom Hersteller mitgeschickt. Ich habe auch schon angefangen mir es durchzulesen, um nachzuvollziehen wie es gehen kann. Mein Betreuer möchte nur andere Dinge, die hier nicht umgesetzt werden. Bei Unklarheiten werde ich mich zurückmelden und vllt kannst du oder jemand anderes mir dann weiterhelfen.
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 27.01.2020, 15:49
Titel:
|
|
Ich habe nun folgendes:
Bekomme nun den Fehler "Error using calllib. Parameter must be scalar." Sonst wurde in "calllib" alles angenommen, die Inputs müssen als String stehen. Es hängt wohl nur noch an dem Pointer bzw ALP_ID. Jemand anderes hat mir das hier vorgeschlagen:
Jedoch kam hier "No method with matching signature.".
Als Anhaltspunkt habe ich das im FileExchange m.-File gefunden.
|
|
|
Philipp68 |
Themenstarter
Forum-Century
|
|
Beiträge: 167
|
|
|
|
Anmeldedatum: 21.10.15
|
|
|
|
Wohnort: Mannheim / Ilmenau
|
|
|
|
Version: R2014a, R2017a, R2019b
|
|
|
|
|
|
Verfasst am: 29.01.2020, 17:19
Titel:
|
|
Hallo,
ich melde mich zurück und es scheint nun zu gehen
Will hier nochmal alles zeigen zur Vollständigkeit und falls das nochmal jemand gebrauchen kann. Mir wird bei jeder execution eine neue ALP_ID im Workspace angezeigt, kann sowas Absicht sein bei der Ausführung der DLL Funktion, dass jedes mal eine neue ID generiert wird?
Soll ich bei Fragen von weiteren Funktionen diese hier wieder reinstellen oder besser eine neue Frage stellen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.01.2020, 17:50
Titel:
|
|
Hallo,
Glückwunsch :)
Zitat: |
kann sowas Absicht sein bei der Ausführung der DLL Funktion, dass jedes mal eine neue ID generiert wird? |
Meine Vermutung wäre: Absicht. Ansonsten würde die Library das nicht zurückgeben. Letztlich muss man das aber den Autor der Library fragen. Oder mal spaßeshalber ausprobieren was passiert, wenn man an AlpDevFree die ursprüngliche ID übergibt.
Fragen, die hiermit nicht direkt zu tun haben, bitte in ein neues Thema.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2025
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.
|
|