我正在尝试在SIMULINK中实现一个需要知道前两个输入值的脉冲发生器,即我需要知道输入信号的前两个状态值。另外,我需要知道以前的输出值。
我的伪代码是:
IF !input AND input_prevValue AND !input_prevValue2
output = !output_pv
ELSE
output = output_pv;
我知道我可以使用遗留功能导入器并使用C代码在SIMULINK中完成此任务。但是,将配置引用集应用于模型时会出现问题。关键问题是灵活性。当您在其他地方使用此模型时(比如与同事或任何人共享),除非您使用了配置参考集,否则您可以重建代码(即从S-Function Block)并运行您的模型。但是,如果应用了配置引用集,则无法重建代码。
我的解决方案是以不使用C函数的方式实现逻辑。我试图在SIMULINK中使用内存块,但显然它没有这样做。有没有人知道如何在SIMULINK中保存输入和输出的先前值(只要模型打开)?
答案 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
其中ip
,ip_prev
,ip_prev2
和op_prev
被定义为布尔输入,op
被定义为布尔输出。如果使用固定步长离散求解器,则存储器块应该工作,以便例如将MATLAB功能块的输出馈送到存储器块(具有正确的采样时间),并将存储器块的输出提供给MATLAB功能块的op_prev
输入。
您可以(并且应该)首先在MATLAB中测试您的函数(和/或测试Simulink模型)以确保它的工作原理并产生您对给定输入所期望的输出。
答案 1 :(得分:1)
这与基本块相当直接,
请注意,对于Switch块,“传递第一个输入的条件:”已更改为“u2~ = 0”。