I want this code to run only once. Battery Charge/Discharge
    7 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Alexandre Correia
 el 15 de Abr. de 2019
  
    
    
    
    
    Editada: Khalid Massoud
 el 10 de Nov. de 2022
            Hi guys, newbie here on Simulink, this is my first project.
I'm trying to make a battery charge and discharge simulation, I'm using a project i saw in a youtube amateur tutorial, but the example itself is flawed and I'm trying to do my changes. I have this code here:
What it does is when the SOC is > 80% the system is feeding the Load, when it reaches below 40% it turns of the Load and starts charging the batteries.
function [LoadOn, ChargingOn] = fcn(SOC)
    LoadOn = 1;
    ChargingOn=0;    
    if (SOC>80)
        LoadOn=1;
        ChargingOn=0;
    end
    if (SOC<40)
        LoadOn=0;
        ChargingOn=1;        
    end
The problem that I'm having is that on the iteration that it reaches >40% it correctly changes the variables to Load=0 and Charge=1, but on the next iteration, due to the second and third line of code, it changes back to LoadOn=1 and Charge=0, when I wanted it only to happen at SOC>80%.
And If I remove the 2nd and 3rd line it gives me an error. Basically what I want to do is that the 2nd and 3rd line only run once.
Any suggestions?
0 comentarios
Respuesta aceptada
  Ben Cunningham
    
 el 15 de Abr. de 2019
        
      Editada: Ben Cunningham
    
 el 16 de Abr. de 2019
  
      One way of doing this would be using Persistent variables  - but just as with global variables you will need to be careful - to get back to your starting condition you should use 'clear fcn'.
Additionally the persistent variable should not be the output of the function.
e.g.
function [LoadOn, ChargingOn] = fcn(SOC)
    persistent LoadOnPersistent;
    persistent ChargingOnPersistent;
    if isempty(LoadOnPersistent) % Initial condition
        LoadOnPersistent = 1;
        ChargingOnPersistent = 0;
    end
    if (SOC>80)
        LoadOnPersistent=1;
        ChargingOnPersistent=0;
    end
    if (SOC<40)
        LoadOnPersistent=0;
        ChargingOnPersistent=1;        
    end
    LoadOn = LoadOnPersistent;
    ChargingOn = ChargingOnPersistent;
end
6 comentarios
  SALAH alatai
      
 el 21 de Jul. de 2022
				Can you please share the simulation work for understanding purpose how and where to use this functio?
  Khalid Massoud
 el 10 de Nov. de 2022
				
      Editada: Khalid Massoud
 el 10 de Nov. de 2022
  
			It gives me an error in the line no.10
Más respuestas (0)
Comunidades de usuarios
Más respuestas en Power Electronics Control
Ver también
Categorías
				Más información sobre Energy Storage en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






