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

Ansteuerung DIO ME 4670i

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 07.12.2011, 08:50     Titel: Ansteuerung DIO ME 4670i
  Antworten mit Zitat      
Liebe Leute,

ich habe für mein Labor vor Kurzem eine Mess- und Steuerkarte von Meilhaus electronic gekauft, Typ ME4670i (PCIe). Mit dieser möchte ich gern Schrittmotoren einer Traversierung ansteuern ("Sende 1 und 0 in einer Schleife an Pin x!"). Bevor ich die Bestellung auslöste, erkundigte ich mich beim Vertrieb, ob die Karte mit Matlab angesteuert werden kann, was bejaht wurde. Nun habe ich die Karte und bei meinen Matlab-Rückfragen wurde mir mitgeteilt, dass der für die Treiberprogrammierung zuständige Mitarbeiter inzwischen nicht mehr in der Firma ist. Ich wollte die Karte aber in meine vorhandene Matlab-Applikation integrieren. (Eine Rücksendung kommt aus verwaltungstechnischer Sicht nicht in Frage.)

Soweit zum Vorwort. Nun habe ich mich mit der Syntax beschäftigt und es hinbekommen, dass erste Funktionen laufen. Nur die beiden wichtigsten verstehe ich nicht. Unter

[url]
http://www.meilhaus.de/fileadmin/up.....ts/me-ids/ME-iDS_1.4D.pdf
[/url]

könnt ihr das Handbuch zur Programmierung einsehen (in C#). Dort auf Seite 104 - 114 werden die beiden Funktionen (meIOSingleConfig und meIOSingle)) beschrieben, die ich für das DIO benötige. Leider verstehe ich nicht ganz, wie diese zu bestücken sind.

Meine bisheriges Testscript sieht so aus:

Code:

%% ACHTUNG! ZUR KORREKTEN AUSFÜHRUNG DARF DAS POWER LAB3 NICHT GESTARTET
%% SEIN!    

clc;
meIDS.meOpen(meIDS.ME_OPEN_NO_FLAGS);

% Anzahl der vom Treibersystem erkannten Geräte (hier: 1 )
[err, NoDev] = meIDS.meQueryNumberDevices();
if NoDev == 0
    return;
end

% Funktion ermittelt den Index des ersten verfügbaren Subdevices, das dem
% gesuchten Typ entspricht (hier: DIO, also Subdevice 2). Die Suche beginnt stets bei dem Subdevice mit dem Index <iStartSubdevice>
iDev = NoDev-1;
[err, iSubDev] = meIDS.meQuerySubdeviceByType(iDev, 0, meIDS.ME_TYPE_DIO, meIDS.ME_SUBTYPE_SINGLE);
if err ~= 0
    return;
end

% Funktion ermittelt die Anzahl der Kanäle eines Subdevice (hier: 8 )
[err, Anzahl_Kanaele_Subdevice] = meIDS.meQueryNumberChannels(iDev,iSubDev);

% Subdevice wird rückgesetzt (setzt DIO auf "Eingang")
err = meIDS.meIOResetSubdevice(iDev, iSubDev, meIDS.ME_IO_RESET_DEVICE_NO_FLAGS);
if err ~= 0
    return;
end

% PIN zur Taktgebung des Schrittmotors M1 auf Kanal 7
Channel_Takt_M1 = 7;

% Konfigurieren des DIO Subdevices
meIDS.meIOSingleConfig(iDev, iSubDev, Channel_Takt_M1, meIDS.ME_SINGLE_CONFIG_DIO_OUTPUT, meIDS.ME_REF_NONE, meIDS.ME_TRIG_CHAN_DEFAULT, meIDS.ME_TRIG_TYPE_SW, meIDS.ME_VALUE_NOT_USED, meIDS.ME_IO_SINGLE_CONFIG_NO_FLAGS)

%%Bis hierhin funktioniert es, aber ab hier weiß ich nicht weiter

% Erstellung eines structs mit zwei Zeilen, welche 1 und 0 enthalten
meIOSingle_t = {iDev, iSubDev, Channel_Takt_M1, meIDS.ME_DIR_OUTPUT, 1, meIDS.ME_VALUE_NOT_USED, meIDS.ME_IO_SINGLE_TYPE_NO_FLAGS, 0; iDev, iSubDev, Channel_Takt_M1, meIDS.ME_DIR_OUTPUT, 0, meIDS.ME_VALUE_NOT_USED, meIDS.ME_IO_SINGLE_TYPE_NO_FLAGS, 0}

for n = 1:100
    [err] = meIDS.meIOSingle(meIOSingle_t, {1 0}, 2, meIDS.ME_IO_SINGLE_NO_FLAGS);
end

meIDS.meClose(meIDS.ME_CLOSE_NO_FLAGS);
 


Derzeit meldet er mir "too many input arguments in meIDS.meIOSingle()"

Meine wichtigste Frage:

Was ist in der Anleitung gemeint mit "Zeiger auf eine Liste vom Typ meIOSingle_t"? Habe ich das überhaupt richtig mit dem struct gemacht?

Für eure Hilfe bin ich sehr dankbar, auch wenn ich verstehe, dass das Problem sehr speziell ist.

Beste Grüße

Felix
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 07.12.2011, 10:04     Titel:
  Antworten mit Zitat      
Die Frage "Kann man diese Karte mit MATLAB benutzen" ist ebenso kritsch wie die entsprechenden Antworten.

Es gibt verschiedene Produkte von MathWorks, die mit Hardware arbeiten, z.B. die Data Acquisition Toolbox. Zu diesen den anderen Produkten gibt es jeweils einen WebLink zu unterstützter Hardware:

http://www.mathworks.com/products/daq/supportedio.html

Es ist also jetzt die Frage welches Produkte hier eingesetzt wird. Selber so was zu schreiben kann SEHR aufwändig sein. Da würde ich eher in Erwägung ziehen die Hardware zurückzugeben.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 07.12.2011, 13:34     Titel:
  Antworten mit Zitat      
Hallo Andreas,

vielen Dank für deine Antwort. Es gibt ja einen Treiber für Matlab und ich habe ja den Großteil der Funktionen bereits zum Laufen bekommen (z. B. meIDS.meQueryNumberChannels() oder meQuerySubdeviceByType() ). Nur ist mir unklar, was es mit dem ersten Parameter der Funktions-Deklaration:

Zitat:

int meIOSingle(meIOSingle_t *pSingleList, int iCount, int iFlags)


auf sich hat.

Wie setze ich das in Matlab um?

Die Firma schrieb mir hierzu:

Zitat:

In Zeile 35 Ihres Scripts initialisieren Sie eine Liste (ein Array meIOSingle_t) mit 2 Elementen.
Jetzt müssen Sie der Funktion meIOSingle dieses Array übergeben. Das wird mit einem Zeiger erledigt. Das heißt, die Funktion meIOSingle im ME-iDS bekommt die Adresse auf das Array übergeben. In der Datei meIDS.m wird die Ermittlung der Adresse auf das Array mit der Matlab-Funktion libpointer erledigt (ab Zeile 481 bis 499).


Leider verstehe ich das mit den Zeigern nicht. Kann mir diesbezüglich jemand helfen? Ich scheine kurz vor dem Abschluss zu stehen.

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 11.01.2012, 09:53     Titel:
  Antworten mit Zitat      
Hallo Leute,

ich habe eine Lösung gefunden und werde sie in Kürze hochladen. Danke für eure Mühen.

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
ruby

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2012, 16:10     Titel: hilfe
  Antworten mit Zitat      
ich habe das gleiche Problem wie du und ich will noch dein lösung wissen , wenn du dich dran erinnern kann
lg Ruby
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 13.06.2012, 14:47     Titel:
  Antworten mit Zitat      
hallo,

sorry, ich war jetzt schon lange nicht mehr hier. ich poste mal folgenden code, mit dem es damals m. e. funktionierte, habe aber gerade nicht die möglichkeit, es zu testen:

Code:

%% ACHTUNG! ZUR KORREKTEN AUSFÜHRUNG DARF DAS POWER LAB3 NICHT GESTARTET
%% SEIN!    
format long
clc;
meIDS.meOpen(meIDS.ME_OPEN_NO_FLAGS);

% Anzahl der vom Treibersystem erkannten Geräte (hier: 1)
[err, NoDev] = meIDS.meQueryNumberDevices();
if NoDev == 0
    return;
end


% Funktion ermittelt den Index des ersten verfügbaren Subdevices, das dem
% gesuchten Typ entspricht (hier: DIO, also Subdevice 2). Die Suche beginnt stets bei dem Subdevice mit dem Index <iStartSubdevice>
iDev = NoDev-1;
[err, iSubDev] = meIDS.meQuerySubdeviceByType(iDev, 0, meIDS.ME_TYPE_DIO, meIDS.ME_SUBTYPE_SINGLE);
if err ~= 0
    return;
end

% Funktion ermittelt die Anzahl der Kanäle eines Subdevice (hier: Cool
[err, Anzahl_Kanaele_Subdevice] = meIDS.meQueryNumberChannels(iDev,iSubDev);

% Subdevice wird rückgesetzt (setzt DIO auf "Eingang")
err = meIDS.meIOResetSubdevice(iDev, iSubDev, meIDS.ME_IO_RESET_DEVICE_NO_FLAGS);
if err ~= 0
    return;
end

% Funktion ermittelt die besonderen Eigenschaften eines Subdevices, welche
% im Parameter <piCaps> der Funktion meQuerySubdeviceCaps() zurückgegeben werden.
%piCaps = 2 (eigentlich hexadezimal 0x00000002 bedeutet: Richtung je Byte (8bit Block) konfigurierbar
[err, piCaps] = meIDS.meQuerySubdeviceCaps(iDev, iSubDev)



% PIN zur Taktgebung des Schrittmotors M1 auf Kanal 7
Channel_Takt_M1 = 7;

% Konfigurieren des IOSingle
[err] = meIDS.meIOSingleConfig(iDev, iSubDev, 0, meIDS.ME_SINGLE_CONFIG_DIO_OUTPUT, meIDS.ME_VALUE_NOT_USED, meIDS.ME_VALUE_NOT_USED, meIDS.ME_VALUE_NOT_USED, meIDS.ME_VALUE_NOT_USED, meIDS.ME_IO_SINGLE_CONFIG_DIO_BYTE)

[err, piCaps] = meIDS.meQuerySubdeviceCaps(iDev, iSubDev);

% Vorbereiten
meIOSingle_t = {iDev, iSubDev, Channel_Takt_M1, meIDS.ME_DIR_OUTPUT, 1, meIDS.ME_VALUE_NOT_USED, meIDS.ME_IO_SINGLE_TYPE_DIO_BIT; iDev, iSubDev, Channel_Takt_M1, meIDS.ME_DIR_OUTPUT, 0, meIDS.ME_VALUE_NOT_USED, meIDS.ME_IO_SINGLE_TYPE_DIO_BIT}

% Schleife mit Schreibbefehl von 1 und 0 im Wechsel
for n = 1:20
    [err, pSingleList] = meIDS.meIOSingle(meIOSingle_t, 1, meIDS.ME_IO_SINGLE_NO_FLAGS)
    wait(0.001)
    [err, pSingleList] = meIDS.meIOSingle(meIOSingle_t, 2, meIDS.ME_IO_SINGLE_NO_FLAGS)
    wait(0.001)
end

meIDS.meClose(meIDS.ME_CLOSE_NO_FLAGS);
 


bitte melde dich, ob es bei dir gefunzt hat. wenn nicht, muss ich im labor nochmal nachprüfen.

beste grüße

pfeili
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 - 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.