Effacer les filtres
Effacer les filtres

Matlab Function Block in Simulink Model_ using persistent variables to hold previous values

3 vues (au cours des 30 derniers jours)
Hi there!
I have this MATLAB Function Block within a Simulink Model: the function takes a voltage measurment from the Simulink model as an input and it outputs the drive signal for a switch.
I would like to be able to fire the switch when some condition is TRUE, and then keep the switch ON until the measured voltage is higher by N voltages than its value when the switch is first fired.
I am using persistent variables to store the voltage measurment (at the moment the switch is fired) and the previous drive signal. I am not sure why my code does not function properly. I would appreciate your suggestions. Thanks
Here the piece of the code inside the MATLAB Function Block:
.
.
.
persistent prev_Volt;
persistent prev_G;
if isempty(prev_G)
prev_G = 0;
end
if isempty(prev_Volt)
prev_Volt = measured_Volt;
end
if (ARM==1)
G = 1; %fire the switch
if prev_G == 0
prev_Volt = measured_Volt; % update prev_volt only when G transitions from 0 to 1
elseif measured_Volt > (prev_Volt + N)
G = 0; prev_Volt = measured_Volt; %Reset the switch when it exceeds N voltage higher than when it was initially fired
end
else
G = 0;
end
% Store the current value of G for the next time step
prev_G = G;
.
.
.

Réponses (1)

madhan ravi
madhan ravi le 2 Déc 2023
change prev_DcBusVolt to pre_Volt
  2 commentaires
HASSAN ABDELGABIR
HASSAN ABDELGABIR le 2 Déc 2023
This was just a typo error! I edited the question
madhan ravi
madhan ravi le 2 Déc 2023
Modifié(e) : madhan ravi le 2 Déc 2023
Puh. You make too many typos (Change GR to G). MATLAB doesn’t care if it’s typo or not. If G is a gate signal, then I would suggest you to have it’s value as Boolean than double.You say when G transition from 0 to 1 but only check if previous G value is equal to 0 and forgot about the current G value.
if (prev_G == 0) && (G == 1) % change your code to this
I don’t have access to Simulink at the moment. But I would simply prefer implementing this logic in Simulink directly.
Note: when comparing for conditions make sure ARM and measured_Volt are (Boolean or int) or float. If it’s float you need to make floating point comparison with tolerances, otherwise the if - condition won’t be executed.

Connectez-vous pour commenter.

Produits


Version

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by