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

Matlab Fehler im Programm

 

Jigs
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 11.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2010, 11:27     Titel: Matlab Fehler im Programm
  Antworten mit Zitat      
Hallo,

ich muss in Matlab eine tdms einlesen. Die kommt von dem Programm Diadem.
Der Hersteller hat folgenden Code +Dateien zur Verfügung gestellt, der zum Einlesen der Datei benötigt wird:

Code:
clc;
%Check if the paths to 'nilibddc.dll' and 'nilibddc_m.h' have been
%selected.  If not, prompt the user to browse to each of the files.
if exist('NI_TDM_DLL_Path','var')==0
    [dllfile,dllfolder]=uigetfile('*dll','Select nilibddc.dll');
    NI_TDM_DLL_Path=fullfile(dllfolder,dllfile);
end
if exist('NI_TDM_H_Path','var')==0
    [hfile,hfolder]=uigetfile('*h','Select nilibddc_m.h');
    NI_TDM_H_Path=fullfile(hfolder,hfile);
end

%Prompt the user to browse to the path of the TDM or TDMS file to read.
[filepath,filefolder]=uigetfile({'*.tdm';'*.tdms'},'Select TDM or TDMS File');
Data_Path=fullfile(filefolder,filepath);
[pathstr, name, ext, versn] = fileparts(Data_Path);

%Apply the appropriate file type to 'ftype', depending on whether a TDM or
%TDMS file was selected.  Here, 'ftype' is used in the 'DDC_OpenFileEx' function.
if strcmp(ext,'.tdms')
    ftype='TDMS';
else
    ftype='TDM';
end

%Load nilibddc.dll (Always call 'unloadlibrary('nilibddc')' after finished using
%the library.)
loadlibrary(NI_TDM_DLL_Path,NI_TDM_H_Path);

%Open the TDM or TDMS file (Read Only) (Always call 'DDC_CloseFile' after finished creating or
%reading a file.)
pfile = libpointer('int32Ptr', 0);
calllib('nilibddc','DDC_OpenFileEx',Data_Path,ftype,1,pfile);

%Read and Display File Name
DDC_FILE_NAME=libpointer('stringPtr','name');
pfilenamelen=libpointer('uint32Ptr',0);
%Get the length of the 'DDC_FILE_NAME' string property
err=calllib('nilibddc','DDC_GetFileStringPropertyLength',pfile.Value,DDC_FILE_NAME,pfilenamelen);
if err==0 %Only proceed if File Name is found
    %Initialize a string of the length of the file name
    pfilename=libpointer('stringPtr',blanks(pfilenamelen.Value));
    calllib('nilibddc','DDC_GetFileProperty',pfile.Value,DDC_FILE_NAME,pfilename,pfilenamelen.Value+1);
    disp(['File Name: ' pfilename.Value]);
end

%Read and Display File Description
DDC_FILE_DESCRIPTION=libpointer('stringPtr','description');
pfiledesclen=libpointer('uint32Ptr',0);
%Get the length of the 'DDC_FILE_DESCRIPTION' string property
err=calllib('nilibddc','DDC_GetFileStringPropertyLength',pfile.Value,DDC_FILE_DESCRIPTION,pfiledesclen);
if err==0 %Only proceed if File Description is found
    %Initialize a string of the length of the file description
    pfiledesc=libpointer('stringPtr',blanks(pfiledesclen.Value));
    calllib('nilibddc','DDC_GetFileProperty',pfile.Value,DDC_FILE_DESCRIPTION,pfiledesc,pfiledesclen.Value+1);
    disp(['File Description: ' pfiledesc.Value]);
end

%Read and Display File Title
DDC_FILE_TITLE=libpointer('stringPtr','title');
pfiletitlelen=libpointer('uint32Ptr',0);
%Get the length of the 'DDC_FILE_TITLE' string property
err=calllib('nilibddc','DDC_GetFileStringPropertyLength',pfile.Value,DDC_FILE_TITLE',pfiletitlelen);
if err==0 %Only proceed if File Title is found
    %Initialize a string of the length of the file title
    pfiletitle=libpointer('stringPtr',blanks(pfiletitlelen.Value));
    calllib('nilibddc','DDC_GetFileProperty',pfile.Value,DDC_FILE_TITLE,pfiletitle,pfiletitlelen.Value+1);
    disp(['File Title: ' pfiletitle.Value]);
end

%Read and Display File Author
DDC_FILE_AUTHOR=libpointer('stringPtr','author');
pfileauthlen=libpointer('uint32Ptr',0);
%Get the length of the 'DDC_FILE_AUTHOR' string property
err=calllib('nilibddc','DDC_GetFileStringPropertyLength',pfile.Value,DDC_FILE_AUTHOR,pfileauthlen);
if err==0 %Only proceed if File Author is found
    %Initialize a string of the length of the file author
    pfileauth=libpointer('stringPtr',blanks(pfileauthlen.Value));
    calllib('nilibddc','DDC_GetFileProperty',pfile.Value,DDC_FILE_AUTHOR,pfileauth,pfileauthlen.Value+1);
    disp(['File Author: ' pfileauth.Value]);
end

%Read and Display File Timestamp
DDC_FILE_DATETIME=libpointer('stringPtr','datetime');
pyear=libpointer('uint32Ptr',0);
pmonth=libpointer('uint32Ptr',0);
pday=libpointer('uint32Ptr',0);
phour=libpointer('uint32Ptr',0);
pminute=libpointer('uint32Ptr',0);
psecond=libpointer('uint32Ptr',0);
pmsecond=libpointer('doublePtr',0);
pwkday=libpointer('uint32Ptr',0);
err=calllib('nilibddc','DDC_GetFilePropertyTimestampComponents',pfile.Value,DDC_FILE_DATETIME,pyear,pmonth,pday,phour,pminute,psecond,pmsecond,pwkday);
if err==0 %Only proceed if File Timestamp is found
    disp(['File Timestamp: ' num2str(pmonth.Value) '/' num2str(pday.Value) '/' num2str(pyear.Value) ', ' num2str(phour.Value) ':' num2str(pminute.Value) ':' num2str(psecond.Value) ':' num2str(pmsecond.Value)]);
end


%Get Channel Groups
DDC_CHANNELGROUP_NAME=libpointer('stringPtr','name');
DDC_CHANNELGROUP_DESCRIPTION=libpointer('stringPtr','description');
DDC_CHANNEL_NAME=libpointer('stringPtr','name');
%Get the number of Channel Groups
pnumgrps=libpointer('uint32Ptr',0);
calllib('nilibddc','DDC_GetNumChannelGroups',pfile.Value,pnumgrps);
%Get Channel Groups only if the number of Channel Groups is greater than
%zero
if pnumgrps.Value>0
    pgrps=libpointer('int32Ptr',zeros(1,pnumgrps.Value));
    calllib('nilibddc','DDC_GetChannelGroups',pfile.Value,pgrps,pnumgrps.Value);
end    
for i=1:pnumgrps.Value %For each Channel Group
    %Get Channel Group Name
    pgrpnamelen=libpointer('uint32Ptr',0);
    err=calllib('nilibddc','DDC_GetChannelGroupStringPropertyLength',pgrps.Value(i),DDC_CHANNELGROUP_NAME,pgrpnamelen);
    if err==0 %Only proceed if Channel Group Name is found
        pgrpname=libpointer('stringPtr',blanks(pgrpnamelen.Value));
        calllib('nilibddc','DDC_GetChannelGroupProperty',pgrps.Value(i),DDC_CHANNELGROUP_NAME,pgrpname,pgrpnamelen.Value+1);
    else
        pgrpname=libpointer('stringPtr','');
    end
       
    %Get Channel Group Description
    pgrpdesclen=libpointer('uint32Ptr',0);
    err=calllib('nilibddc','DDC_GetChannelGroupStringPropertyLength',pgrps.Value(i),DDC_CHANNELGROUP_DESCRIPTION,pgrpdesclen);
    if err==0 %Only proceed if Channel Group Description is found
        pgrpdesc=libpointer('stringPtr',blanks(pgrpdesclen.Value));
        calllib('nilibddc','DDC_GetChannelGroupProperty',pgrps.Value(i),DDC_CHANNELGROUP_DESCRIPTION,pgrpdesc,pgrpdesclen.Value+1);
    end
       
    figure('Name',pgrpname.Value);
    hold on;
   
    %Get Channels
    pnumchans=libpointer('uint32Ptr',0);
    %Get the number of Channels in this Channel Group
    calllib('nilibddc','DDC_GetNumChannels',pgrps.Value(i),pnumchans);
    %Get Channels only if the number of Channels is greater than zero
    if pnumchans.Value>0
        pchans=libpointer('int32Ptr',zeros(1,pnumchans.Value));
        calllib('nilibddc','DDC_GetChannels',pgrps.Value(i),pchans,pnumchans.Value);
    end
   
    channames=cell(1,pnumchans.Value);
   
    for j=1:pnumchans.Value %For each Channel in group
        %Get Channel Name
        pchannamelen=libpointer('uint32Ptr',0);
        err=calllib('nilibddc','DDC_GetChannelStringPropertyLength',pchans.Value(j),DDC_CHANNEL_NAME,pchannamelen);
        if err==0 %Only proceed if Channel Name is found
            pchanname=libpointer('stringPtr',blanks(pchannamelen.Value));
            calllib('nilibddc','DDC_GetChannelProperty',pchans.Value(j),DDC_CHANNEL_NAME,pchanname,pchannamelen.Value+1);
            channames{j}=pchanname.Value;
        else
            channames{j}='';
        end
       
        %Get Channel Data Type
        ptype=libpointer('voidPtr',uint8(0));
        calllib('nilibddc','DDC_GetDataType',pchans.Value(j),ptype);
       
        %Get Channel Value if Data Type is 'Double'(10)
        if ptype.Value==10
            pnumvals=libpointer('uint64Ptr',0);
            calllib('nilibddc','DDC_GetNumDataValues',pchans.Value(j),pnumvals);
            pvals=libpointer('doublePtr',zeros(1,pnumvals.Value));
            calllib('nilibddc','DDC_GetDataValues',pchans.Value(j),0,pnumvals.Value,pvals);
            chanvals(:,j)=(pvals.Value)'; %#ok<AGROW>
        end
           
    end
   
    %Plot Data from channels in this group
    plot(chanvals);clear chanvals;
    legend(channames);
end

%Close TDM or TDMS file
calllib('nilibddc','DDC_CloseFile',pfile.Value);

%Unload nilibddc.dll
unloadlibrary('nilibddc');


Die nilibddc.dll und nilibddc_m.h Datei habe ich einmalig angegeben und wenn ich mit F10 Debuge werden die Pfade einwandfrei wieder gegeben unf funktioniert alles prima:

Erst ab der Zeile:
Code:
%Load nilibddc.dll (Always call 'unloadlibrary('nilibddc')' after finished using
%the library.)
loadlibrary(NI_TDM_DLL_Path,NI_TDM_H_Path)

beendet er einfach das Skript.

Was läuft denn da falsch? Liegt es an den DLL's?

Hier der LINK: http://zone.ni.com/devzone/cda/tut/p/id/7447
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: 11.06.2010, 12:00     Titel:
  Antworten mit Zitat      
Hallo Jigs,

ich bin sehr an diesem Thema interessiert. Es steht, dass dieser Beitrag 2008 eingestellt wurde. Es wundert mich aber, weil ich mich an mehrere Kunden erinnere die bei MathWorks den Verbesserungsvorschlag zum Einlesen von TDM Files gestellt haben.

Zitat:

Dieses Beispiel wurde mit den MATLAB-Versionen R2007a, R2007b und R2008a getestet.


Was ist hier das verwendete Release?

Ich probiere das Ganze gerne aus, habe aber selber keine TDM Datei zur Verfügung. Kann ich eine per Email bekommen?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 11.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2010, 12:39     Titel:
  Antworten mit Zitat      
R2009a....
meinst du daran liegt es? kann ich mir kaum vorstellen
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: 11.06.2010, 14:18     Titel:
  Antworten mit Zitat      
Rein statistisch haben 30% - 50% aller Probleme mit MATLAB-Drittanbieterprodukten etwas mit Releasekompatibilität zu tun.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 11.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2010, 15:38     Titel:
  Antworten mit Zitat      
das ist doof!

hast du andere tips?

EDIT1:
so eben nochmal ausprobiert mit R2007b --> er bricht auch ab!

vielleicht liegt es auch an win764 bit - kann ich mir aber nicht vorstellen!

bin über jede Hilfe dankbar!


EDIT2:
unter XP 32bit mit r2007b läufts
echt ärgerlich jetzt muss ich ständig meine virtuelle maschien laufen lassen.... Sad
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: 14.06.2010, 08:27     Titel:
  Antworten mit Zitat      
OK, das ist zumindest eine wertvolle Information für andere Nutzer. Wie gesagt, wenn ich ein TDM File hätte würde ich gerne einen Test durchführen und auch dafür sorgen, dass eine 64 Bit-fähige Version zur Verfügung gestellt wird.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 11.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2010, 15:02     Titel:
  Antworten mit Zitat      
finde das selbstverständlich, da ich in anderen Foren helfend unterwegs bin ärgert mich das immer, wenn jemand eine "Lösung" gefunden hat, aber es nicht sagt. Smile


Ich schicke dir gleich eine E-Mail mit den notwendigen Daten!


Vielen Dank schonmal für deine Bemühungen.


Christian


EDIT: Deine angegebene E-Mail Adresse stimmt nicht mehr? Meine Mail an dich ist eben zurückgekommen
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: 24.06.2010, 10:22     Titel:
  Antworten mit Zitat      
jigs und ich hatten offline Kontakt. Der aktuelle Stand ist, dass bei mir alles sowohl auf 32 als auch 64 Bit funktioniert.

Mein Laptop: R2009b, 32 Bit, deutsches WinXP
Testrechner in USA über Remote Desktop: R2009a, 64 Bit, Win7 Professional.


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 11.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 10:43     Titel:
  Antworten mit Zitat      
ok vielen dank für den Test, dann weiß ich wenigstens, dass das Programm funktioniert. (habe auch win7 prof 64bit)
Du hast auch das Programm aus meinem Link genommen für das Einlesen der Daten?

Bin etwas ratlos, da er an der besagten Stelle einfach das Prgramm beendet vermute ich mal es könnte an lese/schreibrechten liegen?! weil im debugging-modus ist der pfad korrekt hinterlegt.

ich habe mich mal als admin angemeldet und hätte ja eigentlich alle Rechte, aber auch da bricht er an der Stelle ab.

Sehr merkwürdig.
Trotzdem vielen Dank für den Test!
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: 24.06.2010, 12:06     Titel:
  Antworten mit Zitat      
Ich habe alle Details auch noch per Email beschrieben. Einzige Idee die ich momentan habe ist der Virenscanner.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 11.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 12:26     Titel:
  Antworten mit Zitat      
mails, hatte ich noch nicht geprüft, sry.
die beschriebene Prozedur wie in der Mail habe ich auch durchgeführt.

Virenscanner hatte ich auch mal ausgemacht, aber vielleicht hat er trotzdem geblockt.
Ich werde den mal heute Abend deinstallieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jigs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 11.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2010, 14:29     Titel:
  Antworten mit Zitat      
Also auch ohne Firewall funktionierts nicht.

Ich habe jetzt mal R2009b angefordert und installiert und jetzt erhalte ich folgende Fehlermeldung (hätte ich doch bei r2009a auch erhalten müssen?! vielleicht übersehen -sry)

??? Error using ==> loadlibrary at 281
Microsoft Visual C++ 2005 or 2008 is required to use this feature.

Error in ==> ReadFile at 30
loadlibrary(NI_TDM_DLL_Path,NI_TDM_H_Path);

Das Problem:
Microsoft Visual C++ 2005 und 2008 ist bei mir installiert.
Vielleicht kennst du den Grund?

Private Nachricht senden Benutzer-Profile anzeigen
 
Freak

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2011, 12:48     Titel:
  Antworten mit Zitat      
Hallo habe genau das Problem. Hat jemand eine Lösung?
Wäre sehr dankbar dafür.
 
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.