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

Simulink Function-Block: Fehlermeldung function out

 

Himbeerbonbon123
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2018, 16:29     Titel: Simulink Function-Block: Fehlermeldung function out
  Antworten mit Zitat      
Hallo zusammen,

ich möchte ein Signal, das sprunghaft 3 Werte (y, z oder g) annehmen kann, abgreifen und dabei nur 2 Werte (y und z) für eine bestimmte Zeit halten. Der dritte Wert (g) soll einfach ohne den Zeitverzug durchgegeben werden.

Im angehängten Bild sieht man den Aufbau des Blocks.

Das Signal mit den 3 Werten ist im unten stehenden Code das "enableSignal". Auf dieses wird getriggert und je nach dem welches Signal anliegt, soll es durchgegeben oder für die definierte Zeitdauer (timeWait) gehalten werden.


Leider kommt sobald ich das Simulinkmodell starte, die Fehlermeldung
"Output argument 'out' is not assigned on some execution paths.",
obwohl das "out" durch die If-Abfragen ausreichend definiert sein sollte.
Kann mir jemand helfen? Ich weiß nicht mehr weiter.

Vielen Dank bereits im Voraus! Smile

Code:

function out = fcn(clkTime,enableSignal,timeWait)
%#codegen

z=37;
y=27;
g=32.18;

% Declare persistent variables that
% Startzeit und Triggerstatus sind vorhanden
persistent timeStart;
persistent isTriggered;


% Initialize these variables during the first time step
if isempty(isTriggered)
    isTriggered = 0;
    timeStart = 0;
end


% If enable is positive, save current time and enable "isTriggered"
% wenn das Signal = z ist, soll der Trigger starten.
% Wenn das Signal = y ist, auch.
% Sobald das Triggersiganl aktiv ist, wird eine 1 ausgegeben für die Dauer
% des Triggers


if  (enableSignal == z || enableSignal == y) && (isTriggered == 0)
    if enableSignal == z
        out = z;
       
    elseif enableSignal == y
        out = y;
    end
    timeStart = clkTime;
    isTriggered = 1;
   
   
    % If the wait time passes and the block is currently triggered, disabled output
elseif clkTime - timeStart > timeWait && isTriggered == 1
    % Special condition: If we are still enabled, remain enabled. This
    % logic ensure that we remain enabled rather than turn off and
    % immediatly back on
   
    if enableSignal == z || enableSignal == y
        if enableSignal == z
            out = z;
           
        else
            out = y;
        end
       
    else
        out = g;
    end
   
    isTriggered = 0;
    % If disabled, remain disabled
elseif isTriggered == 0 && enableSignal == g
    out = g;
    % This is the "isTriggered" state
elseif  enableSignal == z || enableSignal == y
    if enableSignal == z
        out = z;
       
    else
        out=y;
    end
 
end  

end
 


FunctionBlock.PNG
 Beschreibung:

Download
 Dateiname:  FunctionBlock.PNG
 Dateigröße:  9.24 KB
 Heruntergeladen:  227 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

schreib mal
Code:

an den Anfang?

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2018, 07:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank schon mal für die Antwort! Ich habe es gerade eben versucht mit deiner Idee, das Programm läuft jetzt immerhin schon mal durch. Allerdings nimmt die Ausgabe jetzt nur zu Beginn einen meiner Werte an (nämlich g=32,irgendwas) und geht im Anschluss durchgehend auf 0.

Hättest du vielleicht noch eine Verbesserungsidee?
Das Bild im Anhang zeigt die Ausgabe.

Vielen Dank!

Liebe Grüße,
Himbeerbonbon123

Ausgabe_FunctionBlock.PNG
 Beschreibung:

Download
 Dateiname:  Ausgabe_FunctionBlock.PNG
 Dateigröße:  37.71 KB
 Heruntergeladen:  229 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn ich mich recht erinnere, gibt es auch bei MATLAB Functions die Möglichkeit zu debuggen. Versuch das doch mal.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2018, 12:54     Titel:
  Antworten mit Zitat      
Hallo Harald,

debuggen kann man, das hast du natürlich richtig in Erinnerung Wink

Mit ein paar weiteren Änderungen läuft das Programm jetzt vollständig durch.
Danke nochmal!

Viele Grüße,
Himbeerbonbon123
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.