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

Interrupt übergeben zwischen mehreren Apps

 

deadeye5589
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 15.01.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2020, 13:04     Titel: Interrupt übergeben zwischen mehreren Apps
  Antworten mit Zitat      
Hallo Forum,

ich versuche mich momentan zum ersten Mal an Matlab und stehe gehörig auf dem Schlauch. Im Grunde stehe ich vor folgendem Problem:

Eine App die aus mehreren Fenstern besteht. Das erste Fenster stellt Messergebnisse eines externen Testaufbaus dar, welche via COM Port übertragen werden. The Messergebnisse werden vom Testboard automatisch erfasst und immer, wenn ein neuer Wert vorliegt, wird dieser direkt übertragen. Um die Applikation übersichtlich zu halten, soll die Auswahl und die Einstellungen für den COM Port in einem separaten Fenster erfolgen. Nun würde es aus meiner Sicht Sinn machen, die Werte per Interrupt einzulesen. Das müsste aber in der ersten App geschehen, wo der COM Port nicht konfiguriert wird. Bislang funktioniert es, dass ich den COM Port in der zweiten App öffne und in der ersten App diesen gezielt Abfrage. Das wird aber irgendwann asynchron zu der Messdatenerfassung des Testaufbaus.
Das übergeben des COM Ports von der zweiten an die erste App habe ich wie folgt gelöst:


Auswahl App Com Port:
Code:

properties (Access = private)
    CallingApp
end

function startupFcn(app,mainapp)
    app.CallingApp = mainapp;
    freeports = serialportlist("available");
    app.SelectCOMPortDropDown.Items = freeports;
end

function OKButtonPushed(app, event)
    port = getappdata(app.SelectedCOMPortDropDownLabels,'comport');
    s = serial(port,'BaudRate',9600);
    s.BytesAvailableFcnCount = 4;
    s.BytesAvailableFcnMode = 'byte';
    s.BytesAvailableFcn = {@app.Serial_int_Fcn};
    fopen(s);
        if(strcmpi(s.Status,'Open'))
            setcomport(app.Callingapp,s);
        end
    app.delete;
end


Hautpfenster:
Code:

methods(Access=public)
    function setcomport(app,port)
        app.comport = port;
        app.comopend = 1;
    end
end

methods (Access = private)
   function Serial_int_Fcn(app, src, event)
       lastresult = fread(app.s,4)
       switch lastresult(2)
           case 0
               app.ResultLamp.Color = [0, 1, 0];
           case 1
               app.ResultLamp.Color = [1, 0, 0];
           case 2
              app.ResultLamp.Color = [1, 1, 0];
           otherwise    
              app.ResultLamp.Color = [0, 0, 0];
       end
   end
end
 


Was in einer einzelnen App klappt, geht über mehrerer leider nicht so einfach. Wahrscheinlich weil ich den Handle auf die Interrupt Routine nicht richtig zurück gebe. Nur wie macht man das ?

Gruß und Danke,
Chris
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 - 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.