SIMULINK保留信号的先前值

时间:2013-11-29 14:01:51

标签: c configuration state simulink

我正在尝试在SIMULINK中实现一个需要知道前两个输入值的脉冲发生器,即我需要知道输入信号的前两个状态值。另外,我需要知道以前的输出值。

我的伪代码是:

IF !input AND  input_prevValue AND !input_prevValue2
    output = !output_pv
ELSE
    output = output_pv;

我知道我可以使用遗留功能导入器并使用C代码在SIMULINK中完成此任务。但是,将配置引用集应用于模型时会出现问题。关键问题是灵活性。当您在其他地方使用此模型时(比如与同事或任何人共享),除非您使用了配置参考集,否则您可以重建代码(即从S-Function Block)并运行您的模型。但是,如果应用了配置引用集,则无法重建代码。

我的解决方案是以不使用C函数的方式实现逻辑。我试图在SIMULINK中使用内存块,但显然它没有这样做。有没有人知道如何在SIMULINK中保存输入和输出的先前值(只要模型打开)?

2 个答案:

答案 0 :(得分:1)

你试过MATLAB Function块了吗?或者,如果您拥有Stateflow许可证,这将非常适合状态图表。

修改

根据您的伪代码,我希望MATLAB功能块中的代码看起来像这样

function op = logic_fcn(ip,ip_prev,ip_prev2,op_prev)
% #codegen

if ~ip && ip_prev && ~ip_prev2
   op = ~op_prev;
else
   op = op_prev;
end

其中ipip_previp_prev2op_prev被定义为布尔输入,op被定义为布尔输出。如果使用固定步长离散求解器,则存储器块应该工作,以便例如将MATLAB功能块的输出馈送到存储器块(具有正确的采样时间),并将存储器块的输出提供给MATLAB功能块的op_prev输入。

您可以(并且应该)首先在MATLAB中测试您的函数(和/或测试Simulink模型)以确保它的工作原理并产生您对给定输入所期望的输出。

答案 1 :(得分:1)

这与基本块相当直接,

enter image description here

请注意,对于Switch块,“传递第一个输入的条件:”已更改为“u2~ = 0”。