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

Fehler "mex at 207" beim erstellen eines mex-files

 

Billi
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2012, 14:40     Titel: Fehler "mex at 207" beim erstellen eines mex-files
  Antworten mit Zitat      
Hallo hallo,

ich versuche gerade verzweifelt ein mex-file zu erstellen und es will einfach nicht gelingen. Mein eigentliches Ziel ist es aus der NI-Messkarte USB-6009 Werte in MatLab einzulesen.



- Als erstes wähle ich einen Compiler aus mit mex-setup. ich habe den MatLab internen LCC wählen müssen da meine Version 2008a den von Visual Studio 2010 gar nicht erkennt.

- Dann gehe ich auf File -> New ->M-File und gebe mein C-Code ein

Code:

#include "mex.h"
10 #include "NIDAQmx.h"
11
12 void mexFunction( int nlhs, mxArray *plhs[],
14 Elektronik–Praktikum Physik
13 int nrhs, const mxArray *prhs[] )
14 {
15 TaskHandle taskHandle = 0;
16
17 char source[] = "OnboardClock";
18 uInt32 channel = 0;
19 if (nrhs>0)
20 channel = mxGetScalar(prhs[0]);
21 if (channel>7)
22 channel = 0;
23 uInt32 samplesPerChan = 500;
24 if (nrhs>1)
25 samplesPerChan = mxGetScalar(prhs[1]);
26 uInt32 bufferSize = samplesPerChan;
27 uInt32 pointsToRead = samplesPerChan;
28 float64 sampleRate = 5000.0;
29
30 char chan[20];
31 sprintf(chan,"Dev1/ai%1d", channel);
32 float64 min = -10;
33 float64 max = 10;
34
35 plhs[0] = mxCreateDoubleMatrix(samplesPerChan,1, mxREAL);
36 double * data = mxGetPr(plhs[0]);
37
38 int32 pointsRead;
39 float64 timeout = 10.0;
40
41 DAQmxCreateTask("",&taskHandle);
42 DAQmxCreateAIVoltageChan (taskHandle, chan, "", DAQmx_Val_Cfg_Default,
min, max, DAQmx_Val_Volts, NULL);
43 DAQmxCfgSampClkTiming (taskHandle, source, sampleRate, DAQmx_Val_Rising,
DAQmx_Val_FiniteSamps, samplesPerChan);
44 DAQmxStartTask(taskHandle);
45
46 DAQmxReadAnalogF64 (taskHandle, pointsToRead, timeout, 0, data, bufferSize,
&pointsRead, NULL);
47
48 if( taskHandle!=0 ) {
49 DAQmxStopTask(taskHandle);
50 DAQmxClearTask(taskHandle);
51 }
52 }
 


im Command Window

>> mex analog_input.c

C:\PROGRA~1\MATLAB\R2008A\BIN\MEX.PL: Error: 'analog_input.c' not found.

??? Error using ==> mex at 207
Unable to complete successfully.

>> analog_input
??? Error: File: analog_input.m Line: 1 Column: 1
The input character is not valid in MATLAB statements or expressions.

oder noch viel einfacher

Code:

#include "mex.h"
void mexFunction( int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
{
    printf("hello, world \n");
    }
 


- Dann im Command Window

>> mex hello.c


??? Error using ==> mex at 207
Unable to complete successfully.


Weiß jemand wo mein Fehler liegt ? Ich wäre über etwas Hilfe sehr dankbar.

Mit freundlichen Grüßen

Billi
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.07.2012, 16:00     Titel:
  Antworten mit Zitat      
Hallo,

erste Anhaltspunkte:

Zitat:
C:\PROGRA~1\MATLAB\R2008A\BIN\MEX.PL: Error: 'analog_input.c' not found.

Die Datei wurde nicht gefunden. Stelle sicher, dass sie so heißt und im momentanen Verzeichnis / auf dem Suchpfad liegt.

Zitat:
>> analog_input
??? Error: File: analog_input.m Line: 1 Column: 1

Hast du deine Datei evtl. als analog_input.m statt analog_input.c gespeichert? MATLAB versucht nämlich hier gerade, ein .m-File auszuführen.
Zitat:

>> mex hello.c

??? Error using ==> mex at 207
Unable to complete successfully.

Ich kann mir nicht vorstellen, dass da dazwischen keine weiteren Meldungen kommen. Dann wäre es in der Tat schwierig.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Billi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2012, 16:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ich danke Dir für deine schnelle Antwort. Es kommt tatsächlich nur diese Fehlermeldung. Allerdings hast Du recht das es als m-File abgespeichert wird.
Allerdings passiert das automatisch und ich finde keine Möglichkeit es als .c zu speichern. Muss ich den Code doch woanders erstellen? New -> M-File sagt ja eigentlich schon das MatLab ein m-File erstellen möchte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.07.2012, 16:29     Titel:
  Antworten mit Zitat      
Hallo,

wenn du speicherst, kannst du unten als Dateityp m-files oder all files auswählen. Du musst eben all files auswählen. Alternativ kannst du die Datei nachträglich umbenennen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Billi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2012, 16:41     Titel:
  Antworten mit Zitat      
Ich danke Dir recht herzlich. Da verbringt man Stunden und liest Unmengen von Internet- und Buch-Seiten und dann ist die Lösung das Umbenennen von .m in .c und schon funktioniert alles. Es ist doch manchmal zum verzweifeln. Gut das man dabei immer noch vieles andere lernt und auf solche Prima Foren
mit hilfsbereiten Teilnehmern trifft wie hier grade geschehen.

Ich bin voll Happy. Danke Dir.

Mit freundlichen Grüßen
Billi
Private Nachricht senden Benutzer-Profile anzeigen
 
Billi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2012, 07:55     Titel:
  Antworten mit Zitat      
Hi Jan,

Wenn ich unter File -> New -> M-File mein Code im Editor eingebe dann speichert MatLab bei mir die ganze Sache als .m im Current Directory wo ich einen Ordner für meine selbst gebastelten Funktionen habe.

Allerdings speichert MatLab es als M-File da es nicht von alleine merkt das ich in C programmiert habe. Die mex-Funktion sucht allerdings nach einer .c Datei und kann sie somit nicht finden. Wie Harald es beschrieben hat gibt es im Editor eine Möglichkeit es gleich als .c Datei abzuspeichern aber aus lauter Euphorie habe ich das noch gar nicht gefunden. Ich habe einfach im Current Directory meine Funktion umbenannt von ____ .m in ___ .c und fertig. Nun findet mex-___.c auch sofort meinen c-Code und verarbeitet die ganze Sache.

Ich hoffe ich habe nicht so viele falsche Dinge geschrieben. Ich glaube mex ist eine Funktion die eine Schnittstelle bietet zwischen MatLab und anderen Programmiersprachen. Es wird tatsächlich der c-code ausgeführt was manchmal auch gut für die Optimierung der Rechengeschwindigkeit ist. C ist in einigen Dingen schneller als MatLab.

Falls ich Blödsinn schreibe freue ich mich über Berichtigungen.

Mit freundlichen Grüßen
Billi
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.