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

Timer von vorne starten, wenn Flag gesetzt wird

 

floetix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2022, 15:41     Titel: Timer von vorne starten, wenn Flag gesetzt wird
  Antworten mit Zitat      
Hallo,
ich habe ein Fahrzyklus über Simulink mit der 1D-lookup table implementiert. Als Eingangswert habe ich die "Clock" also die aktuelle Simulationszeit genommen.

Jetzt möchte ich den Eingang so ändern, dass der Timer bzw. die Clock immer bei Null beginnt, wenn mein Flag = 1 ist. Sobald das Flag = 0 soll der Timer anhalten und auf Null zurück gesetzt werden.

Code:

if flag == 1
     start timer bei Null;

if flag == 0  
     stop timer;
     reset timer;
 


Harald
Forum-Meister

Forum-Meister


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

mir ist nicht bekannt, dass Clock direkt zurückgesetzt werden kann.

Machen flag==0 und flag == 1 nicht im Endeffekt das gleiche?

Ich würde den Timer als Clock - Offset umsetzen, wobei Offset eine auf 0 initialisierte persistent Variable ist. Wenn Timer zurückgesetzt werden soll, aktualisierst du Offset auf die momentane Clock.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
floetix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2022, 17:20     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen Dank für deine Antwort.

Das ist eine gute Idee. Was ist eine persistent Variable?

Wenn ich die Matlab Function in Simulink nutze um die Abfrage als C-Code zu implementieren muss ich die Variable offset und timer initialisieren.
Wie initialisiere ich die Variablen, wenn das fixed-point format verwendet wird?

Wenn ich das wie folgt Initialisiere erhalte ich immer einen Fehlercode
Code:
function time = fcn(Clock, flag)

int timer;
int offset;

if flag == 1
    timer = timer - offset;
else
    timer = 0;
end

offset = Clock;

time = timer;


Viele Grüße,
Louisa
 
Harald
Forum-Meister

Forum-Meister


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

eine persistent - Variable behält von einer zur nächsten Blockausführung ihren Wert. Hier ein Beispiel:
https://www.mathworks.com/help/simu.....persistent-variables.html

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
floetix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2022, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

vielen dank für die Hilfe.
Mein Code sieht aktuell so aus:
Code:
function time = fcn(Clock, rc_active)

persistent offset;

if rc_active == 1
    if isempty(offset)
        offset = Clock;
        time = 0;
        return
    end
    time = Clock - offset;
   
elseif rc_active == 0
    time = 0;
%     clear offset;

else
    time = 0;

end


Allerdings bin ich auf ein weiteres Problem gestoßen:
Aktuell wird immer der erste offset übernommen, der definiert wurde. Der offset soll aber bei jedem erneuten setzen der flag einen neuen Wert zugewiesen bekommen.
Wie lässt sich die persistent variable zurücksetzen?

Über die clear function funktioniert das bei mir nicht.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.457
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.09.2022, 13:23     Titel:
  Antworten mit Zitat      
Hallo,

ich würde Offset auf 0 initialisieren.
Wenn du den Offset aktualisieren willst, dann kannst du das "ganz normal" machen:
Code:
offset = % neuer Wert

Durch die Deklaration als persistent bleibt dieser Wert dann erhalten, wenn der Block das nächste Mal ausgeführt wird.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.