【问题标题】:SIMULINK Holding Previous Value of a SignalSIMULINK 保持信号的先前值
【发布时间】:2013-11-30 10:23:40
【问题描述】:

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

我的伪代码是:

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

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

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

【问题讨论】:

    标签: c configuration state simulink


    【解决方案1】:

    您是否尝试过使用MATLAB Function 块?或者,如果您拥有 Stateflow 许可证,这将非常适合用于状态图。

    编辑

    根据您的伪代码,我希望 MATLAB Function 块中的代码如下所示

    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 Function 块的输出馈送到内存块(具有正确的采样时间),并将内存块的输出馈送到MATLAB Function 模块的op_prev 输入。

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

    【讨论】:

    • 使用 MATLAB FUNCTION 块?我尝试购买从内存块提供输出作为以前的值,但没有用:(
    • 我也不能使用 Stateflow...没有许可证
    • 可怕的是,我的函数看起来和你的一模一样,我使用了一个步长为 0.033 的固定步长离散求解器(无论如何这是我的调度器速率)。但是,我总是看到我的输出为 0 :( 但我会再试一次,让你知道。
    【解决方案2】:

    这对于基本块来说是相当直接的,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2016-04-11
      相关资源
      最近更新 更多