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

Wo ist der Fehler in meinem Proframm

 

Anfäner
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 16.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2012, 15:21     Titel: Wo ist der Fehler in meinem Proframm
  Antworten mit Zitat      
Hallo freunde,

ich habe einen Fehler in meinem Prgoramm aber leider weiss ich es nicht wie ich es verbessern kann bzw. wo überhaupt der Fehler ist. Unten ist mein Code und im Anhang die Fehlermeldung.


Code:
    xoffset=100;
     yoffset=100;
     xsize=300;
     ysize=300;

     % Bildgröße aus der Cam lesen
       memsize = calllib('uEyeCamInterfaceDLL','mGetMemorySize');
 
     % Pixelgröße auslesen
       pixelSize = calllib('uEyeCamInterfaceDLL','mBitsPerPixel');

       sizeCam = 1:memsize;
 
       matlabPointer = libpointer('uint8Ptr', sizeCam);
     
       
% Auslesen des Skalierungswertes
skal_vek_x = get(handles.ergebniss,'String');
mult_vektor_x = num2str(skal_vek_x);


      amp_old = 0;
      phi_old = 0;

      strecke = 0;
      strecke_2 = 0;
      first = 0;  
      h = 1;
     
     
       
     % Abbrechen der Schleife wenn Stop Taste gedrückt wird  
       while (get(handles.stop_beweg,'Enable') == 'on')
tic;
        % Bilddaten der Cam lesen
          calllib('uEyeCamInterfaceDLL','mGetMemory',matlabPointer);

        % --Aufbereitung der Daten --
        % Werte vom Matlabpointer übernehmen
          Image   = matlabPointer.Value;
 
        % Pixelwerte diagonal tauschen, Reihe wird zu Spalte und Spalte zu Reihe
        % 3 Pixel in einer Reihe ergeben 1 Farbpixel (rgb Pixel)
          Image   = reshape(Image,[],ysize)';
        % nach little endian konvertieren, vertauscht lower und higher Byte
          Image   = swapbytes(Image);
        % anzeigen
          axes(handles.Live_Bild);
          imagesc(Image);
          colormap gray;      
          Bild(:,:,1) = Image;
         

%% Verarbeiten des Bildes
%get(hObject,'String') % returns contents of WertVektorY as text
%diocount1 = str2double(get(handles.diocount,'String')) %returns contents of WertVektorY as a double


DiodenProFeld=get(handles.edit_diodecount,'String');  % Lesen der Daten im Dioden Pro Feld
DPF=str2num(DiodenProFeld);

Diodenhohe=get(handles.edit_diodeheight,'String');    % Lesen der Daten im Diodenhöhe Feld
Dh=str2num(Diodenhohe);

Diodenbreite=get(handles.edit_diodeweight,'String');  % Lesen der Daten im Diodenbreite Feld
Db=str2num(Diodenbreite);

Vergleichsvektoren=get(handles.edit_diooffset,'String');    % Lesen der Daten im Vergleichsvektoren Feld
Vw=str2num(Vergleichsvektoren);


roi = get_roi(Bild, DPF, Dh, Db);                     % roi ist eine Internet Funktion für Bildverarbeitung


  % Diodenwerte berechnen
    streifen = getstreifen(roi,Db,1);

  % figure(1), plot(streifen);

  % Amplitude und Phase berechnen
  % [vektors_x, vektors_y, Amplitude(i,: ), Phase] = getvektors (streifen,
  % handles.dioweight, handles.diocount);
    [vektors_x, vektors_y, Amplitude, Phase] = getvektors (streifen, Db, DPF);  
   
   
   
%% Bewegungsermittlung

% Auswahl des Modus
switch (handles.mode)
   
    case 0      % Amplitudenvergleich

        if (first > 0)
   
            % Übergabe der Amplitude, Bildnummer, Vergleichsweite
              [mov_delta, sumdiff] = get_bewegung(Amplitude, handles.diooffset, amp_old);
 
             
             
set(handles.Bewegung_mm,'String',num2str(mov_delta));          % Wert von mov_delta in die Zeile (Bewegung_mm) Einfügen                  
   
erg_skal = get(handles.ergebniss,'String');
skal = num2str(erg_skal);
 
bewegung = (mov_delta * erg_skal);
set(handles.Bewegung_end,'String',num2str(bewegung));  
   
   
            % für Plot der Differenzwerte für visuelle Bewertung
              moveperframe = sumdiff;

            if (mov_delta < 0)
                strecke = strecke - abs (mov_delta);
                amp_old = Amplitude;
            elseif (mov_delta == 0)
                strecke = strecke;
                amp_old = amp_old;
            elseif ( mov_delta > 0)
                strecke = strecke + abs (mov_delta);
                amp_old = Amplitude;
            end;

           
           
           
            plot_strecke = strecke;
            plot_strecke2(h) = strecke;

            % axes(handles.Analyse);
            plot(plot_strecke2);

        end
     
 
       
    case 1      % Phasenanalyse
        if (first > 0)
       
            [mov_delta, sumdiff] = get_bewegung_phi(Phase, phi_old);  
 
            sumdiff = sumdiff / 90 * Db;
            phi_old = Phase;
            strecke_2 = strecke_2 + sumdiff;
       
            plot_strecke = strecke_2;
            plot_strecke2(h) = strecke_2;        

            % axes(handles.Analyse);
            plot(plot_strecke2);
           
   

        end
       

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Sonstiges

    if (first == 0)
        amp_old = Amplitude;
        phi_old = Phase;
    end
%     first = 1;
 
%    set(handles.edit_counter, 'string', strecke);  ----------> Ist nicht verfügbar

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Abbrechen der Schleife
    button_state = get(hObject,'Value');
    if button_state == get(hObject,'Max')
       
   % Toggle button is pressed-take approperiate action
        handles.break2 = 0;
    elseif button_state == get(hObject,'Min')
       
   % Toggle button is not pressed-take appropriate action
        handles.break2 = 1;
    end
       
%     if (handles.drive_order == 0)
%         mc_refpoint(handles.hCom);     % notwendige Initialiserung!

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
%% Abrufen der Position
    if (first == 0)

       
    end
    first = 1;


stop = toc;
%dauer = stop - start
   end  
% Update handles structure
  guidata(hObject, handles);
 



beste Grüße
Hasan

Fehler Meldung.png
 Beschreibung:

Download
 Dateiname:  Fehler Meldung.png
 Dateigröße:  51.49 KB
 Heruntergeladen:  534 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

die Fehlermeldung sagt doch ganz klar, wo der Fehler ist:
Zeile 263 deines Codes. Die Library wurde nicht gefunden.

Ist denn sicher gestellt, dass sie zuvor geladen wurde?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfäner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 16.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2012, 03:02     Titel:
  Antworten mit Zitat      
Hi Harald,

ich habe nochmal in meinem Programm nachgeschaut und die Library wird zuvor geladen und ich arbeite schon damit. Deswegen verstehe ich nicht warum der Fehler auftritt.

mfg
Hasan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.11.2012, 10:43     Titel:
  Antworten mit Zitat      
Hallo,

setze doch in der Zeile mal einen Haltepunkt und verwende dann libfunctions oder libfunctionsview, um dir die verfügbaren Funktionen anzusehen.
Teste zudem, ob es hilft, die Library (nochmal) zu laden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.11.2012, 12:55     Titel: Re: Wo ist der Fehler in meinem Proframm
  Antworten mit Zitat      
Hallo,

Es ist wohl das "f". Es muss eigentlich ein "g" sein Smile

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfäner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 16.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 09:31     Titel:
  Antworten mit Zitat      
Hallo,

klappt leider immer noch nicht so ganz, aber versuch mal mein glück weiter
danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2012, 09:37     Titel:
  Antworten mit Zitat      
Hallo,

mit Aussagen wie "klappt leider immer noch nicht so ganz" kann ich leider wenig anfangen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfäner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 16.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 11:48     Titel:
  Antworten mit Zitat      
Hi Harald,

soweit ich es verstanden habe, ladet das Programm die Library von beginn an. Ich arbeite auch schon damit. Also Ich Kalibriere es erfolgreich und die Bewegungsanalyse klappt auch. Sobald ich aber den Stopp Button betätige kommt diese Fehlermeldung.
Ich weiss es nicht ob ich richtig liege, bin mir auch nicht sicher, aber ich vermute das ich beim Drücken der Bewegungsanalyse Button, mein Programm die Library wieder raus schmeist, und deswegen die Fehlermeldung kommt.
Um es bessr zu verstehen habe ich sowohl die Fehlermeldung als auch die Oberfläche hochgeladen.

Mein Code bei Betätigen des Stop Buttons:
Code:
if libisloaded('uEyeCamInterfaceDLL')
 handles.iOK = calllib('uEyeCamInterfaceDLL','mCloseCam');
 unloadlibrary  uEyeCamInterfaceDLL;
end


mfg
Hasan

Fehlermeldung.png
 Beschreibung:

Download
 Dateiname:  Fehlermeldung.png
 Dateigröße:  64.05 KB
 Heruntergeladen:  553 mal
Oberfläche.png
 Beschreibung:

Download
 Dateiname:  Oberfläche.png
 Dateigröße:  65.58 KB
 Heruntergeladen:  565 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2012, 12:35     Titel:
  Antworten mit Zitat      
Hallo,

Rückfrage: kommt die Fehlermeldung, wenn du den Stopp Button drückst, oder erst wenn du versuchst, die Kalibrierung danach wieder aufzunehmen?

Und ja, unloadlibrary entfernt die Bibliothek. Wenn du sie danach noch weiter verwenden willst, musst du entweder dafür sorgen, dass der unloadlibrary-Befehl nicht zu dem Zeitpunkt ausgeführt wird oder dass die Library danach wieder neu geladen wird.
Im Zweifelsfall kannst du ja vor calllib-Befehlen auch mit libisloaded überprüfen, ob die Bibliothek geladen ist, und sie ggf. neu laden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfäner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 16.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 17:35     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe es jetzt ausprobiert und einzeln nochmal geschaut wo es funktioniert und wo es nicht Funktioniert. Habe es mit (keine Fehlermeldung) und (Fehlermeldung) vermerkt!

Drücke verbindungs Button und anschließend Stopp Button (KEINE Fehlermeldung), kann dies öfters wiederholen (Verbinde --> Stopp, Verbinde ---> Stopp .... usw).
Fange wieder von anfang an und drücke verbindungs Button, drücke Live Button und anschließend Stopp Button (Fehlermeldung).
Fange wieder von anfang an und drücke verbindungs Button, drücke Live Button, drücke Kalibrierungs Button und anschließend Stopp Button (KEINE Fehlermeldung)
Fange wieder von anfang an und drücke verbindungs Button, drücke Live Button, drücke Kalibrierungs Button, drücke Bewegungsanalyse und anschließend Stopp Button (Fehlermeldung)

Wenn die Bibliothek nicht geladen ist, müsste ich es dann wieder bei den jeweiligen funktionen ganz an dem Anfang schreiben?


beste Grüße
Hasan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Fehlermeldung tritt anscheinend in dem Codeteil für Bewegungsanalyse auf. Das steht für mich im Widerspruch dazu, dass nach deiner Beschreibung die Fehlermeldung dann auftritt, wenn du den Stopp Button drückst.

Zitat:
Wenn die Bibliothek nicht geladen ist, müsste ich es dann wieder bei den jeweiligen funktionen ganz an dem Anfang schreiben?

Ganz an den Anfang ist relativ. Ich würde es so sagen: vor jedem calllib-Befehl sollte sichergestellt sein, dass die Bibliothek geladen ist.

Ich kann nur empfehlen, sich mal von vorne bis hinten die Teile der Dokumentation über das Arbeiten mit Libraries und über das Debugging in MATLAB durchzulesen.

Zudem: der Autor des Programms ist nicht erreichbar? Er müsste das Programm ja schließlich am besten kennen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfäner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 16.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 23:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

bei drücken der Bewegungsanalyse Button bekommen ich keine Fehlermeldung, es kommt nach der drücken des Stopp Buttons.
Leider kann ich die Person nicht mehr fragen weill er nicht mehr da ist und die Dokumentation leider dürftig ausgefallen ist.
Ich wollte mal nachfragen welchen teil ich von unten nehemn muss damit die Library wieder geladen ist? Wenn ich nur die eine Zeile mit loadlibrary nehem funktioniert es nicht.


Code:
addpath(handles.pathnamedll)

 % Unloading the library %
 if libisloaded('uEyeCamInterfaceDLL')
     unloadlibrary  uEyeCamInterfaceDLL;
 end
 
loadlibrary('uEyeCamInterfaceDLL', 'uEyeCamInterface.h');
libfunctions('uEyeCamInterfaceDLL');
 
if libisloaded('uEyeCamInterfaceDLL')
 
%Cam laden
    if calllib('uEyeCamInterfaceDLL','mLoadCam')
     xoffset=100;
     yoffset=100;
     xsize=300;
     ysize=300;
        calllib('uEyeCamInterfaceDLL','mSetOffset',xoffset,yoffset);
        calllib('uEyeCamInterfaceDLL','mSetSize',xsize,ysize);
       
        % Belichtungszeit setzen in 10 ms bei Blende 2 und Neonlicht G115
          calllib('uEyeCamInterfaceDLL','mSetExposureTime',25.0);

        % Bildgröße aus der Cam lesen
          memsize = calllib('uEyeCamInterfaceDLL','mGetMemorySize');
 
        % Pixelgröße auslesen
          pixelSize = calllib('uEyeCamInterfaceDLL','mBitsPerPixel');
 
          sizeCam = 1:memsize;
 
          matlabPointer = libpointer('uint8Ptr', sizeCam);
          disp('KameraChipgröße abgefragt');
          pause(0.2)  

        % Bilddaten der Cam lesen
          calllib('uEyeCamInterfaceDLL','mGetMemory',matlabPointer);

        % --Aufbereitung der Daten --
        % Werte vom Matlabpointer übernehmen
          Image   = matlabPointer.Value;
 
        % Pixelwerte diagonal tauschen, Reihe wird zu Spalte und Spalte zu Reihe
        % 3 Pixel in einer Reihe ergeben 1 Farbpixel (rgb Pixel)
          Image   = reshape(Image,[],ysize)';
 
        % nach little endian konvertieren
          Image   = swapbytes(Image);
        % anzeigen
          axes(handles.Live_Bild);
          imagesc(Image);


        colormap gray;      
    else
        disp('ERROR --> Kamera nicht initialisiert!');
    end
else
     disp('ERROR --> DLL nicht geladen!');
end
     
      % Update handles structure
guidata(hObject, handles);



schöne abend wünsche ich
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2012, 08:42     Titel:
  Antworten mit Zitat      
Hallo,

ja, nur die eine Zeile. Wie gesagt: lies dir bitte die Dokumentation zum Arbeiten mit Libraries durch!
Was heißt "es funktioniert nicht"? Bekommst du nach wie vor die selbe Fehlermeldung, oder eine andere?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfäner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 16.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2012, 20:48     Titel:
  Antworten mit Zitat      
Hi,

ich habe diese Librarie in die Funktion an den Anfang hinzugefügt:
Code:
loadlibrary('uEyeCamInterfaceDLL', 'uEyeCamInterface.h');
  libfunctions('uEyeCamInterfaceDLL');


aber es gibt mir den gleichen Fehler wieder aus und bemengelt diese Zeile:
Code:
calllib('uEyeCamInterfaceDLL','mGetMemory',matlabPointer);


nicht zu vergessen, diese Fehlermeldung kommt erst beim drücken des Stopp Buttons, kann der Fehler vieleicht dort liegen?


beste Grüße
Hasan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 17:23     Titel:
  Antworten mit Zitat      
Hallo,

zum Fehler kommt es vrs. weil deine while-Schleife nach Drücken des Stop-Buttons nicht abgebrochen wird.
Somit wird in der nachfolgenden Zeile weiterhin versucht die calllib-Funktion aufzurufen.

Liegt wohl an der Abfrage der "Enable"-Eigenschaft des Pushbuttons.
Aus den obigen Code-Auszügen ist nicht ersichtlich wie diese vrs. innerhalb der Stop-Button Callback geändert wird.

Diese Probleme liegen meist daran dass die geänderten GUI-Daten noch nicht gespeichert wurden.
Zu beachten ist dass, du durch Drücken des Stop-Buttons die Bewegungs-Callback unterbrichst
und diese anschließend an der Stelle an der sie unterbrochen wurde fortgesetzt wird.
Erst danach werden graphische Darstellungen etc. aktualisiert. Soll heißen deine
Pushbutton-Eigenschaft "Enable" wird vrs. nicht angepasst. (evtl. im Debug-Modus testen) !?

Evtl. mal drawnow-Befehl (aktualisiert GUI) nach der Änderung innerhalb der Stop-Button Callback einfügen oder while-Schleifen-Abfrage ändern...

Gruß und viel Glück
 
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.