我目前正在开发一个在mathworks上实现锂电池模型的模拟器,当从我的GUI运行模拟时,我需要能够更改几个参数。
编译后,原始的params驻留在一个工作区结构中,所以我想这是我需要更改params的地方。
要读取的原始文件如下:
%% Populate Lookup Tables
BatteryParams = struct();
for idx = 1:numCells
%% Lookup Table Breakpoints
BatteryParams(idx).SOC_LUT = [0 0.1 0.25 0.5 0.75 0.9 1]';
BatteryParams(idx).Temperature_LUT = [5 20 40] + 273.15;
%% Em Branch Properties (OCV, Capacity)
% Battery capacity
BatteryParams(idx).Capacity_LUT = [
80.0000 79.5000 79.0000]; %Ampere*hours
现在,我希望能够在模拟过程中更改电池的容量,但我不知道如何做到这一点,因为我仍然是相对较新的simulink。
我认为它应该包含:
command = sprintf('BatteryParams(%d).Qe_init = %f;', idx, value)
evalin('base', command);
但我非常不确定如何实现这一点,另外,我需要能够在GUI中输入例如80Ah,然后将一个数组放入包含{80.5 80 79.5}的结构中。
有人能帮我认识到这一点吗?
发布于 2015-04-22 18:00:16
Simulink实际上并不是为此而设计的,它只在模拟开始时的模型初始化期间检查(基本)工作空间中的值,有关类似的问题,请参阅How to update variable in From workspace block during runtime。
在工作区中更改参数的值后,您可以尝试使用set_param
,如下所示:
set_param(path_to_block,block_parameter_name,BatteryParams)
将path_to_block
替换为有问题的块的正确路径,将block_parameter_name
替换为要为有问题的块更改的正确参数。如果从图形用户界面运行,则可能需要使用eval
或evalin
。
还要注意,这并不适用于所有的块/参数,正如您在前面提到的另一个问题中所看到的那样。
https://stackoverflow.com/questions/29791985
复制相似问题