【问题标题】:Declare array in Simulink在 Simulink 中声明数组
【发布时间】:2018-01-31 15:58:00
【问题描述】:

我在 Simulink 上有一个函数,可以根据数字将一个输入变量复制到一个输出(类似于 DEMUX,但可以选择)

function [device,Var_RX1, Var_RX2, Var_RX3, Var_RX4, Var_RX5, Var_RX6, Var_RX7, Var_RX8, Var_RX9, Var_RX10]  = fcn(device, Var_RX)
Var_RX1 = zeros(50,1,'single');
Var_RX2 = zeros(50,1,'single');
Var_RX3 = zeros(50,1,'single');
Var_RX4 = zeros(50,1,'single');
Var_RX5 = zeros(50,1,'single');
Var_RX6 = zeros(50,1,'single');
Var_RX7 = zeros(50,1,'single');
Var_RX8 = zeros(50,1,'single');
Var_RX9 = zeros(50,1,'single');
Var_RX10 = zeros(50,1,'single');    
    if (device == 1)
        Var_RX1 = Var_RX;
    elseif (device == 2)
        Var_RX2 = Var_RX;
    elseif (device == 3)
        Var_RX3 = Var_RX;
    elseif (device == 4)
        Var_RX4 = Var_RX;
    elseif (device == 5)
        Var_RX5 = Var_RX;
    elseif (device == 6)
        Var_RX6 = Var_RX;
    elseif (device == 7)
        Var_RX7 = Var_RX;
    elseif (device == 8)
        Var_RX8 = Var_RX;
    elseif (device == 9)
        Var_RX9 = Var_RX;
    elseif (device == 10)
        Var_RX10 = Var_RX;
    end
end

问题是在调用函数时我必须将变量(Var_RX)声明为零,否则会出现以下问题:

在某些执行路径上未分配输出参数“Var_RX1”。

有没有办法将这些数组声明为这个函数的输出,并在程序的开头开始值?

编辑: 我不解释为什么我不希望出现零。 问题是当函数第二次执行时,读取之前存储在任何变量上的值被零替换。

【问题讨论】:

  • 请不要将随机语言中的代码 sn-ps 用于 MATLAB 代码。它们不起作用,只会给问题添加很多视觉噪音。
  • 你可以使用in built selector block,它几乎有这个功能?我不太明白为什么将它们声明为零是一个问题......
  • @Wolfie 抱歉,我不解释为什么我不希望出现零。问题是当函数第二次执行时,在读取之前存储在任何变量上的值被零替换。
  • 在设置零之前使用isempty 检查?
  • 我觉得你应该使用enabled subsystems and merge blocks 的工作流,这样你会得到 0 的输出,除非你启用的开关被触发。您正在使用 Simulink,请尝试利用内置块,而不是将逻辑放在功能块中。否则,您不妨使用 MATLAB 脚本。如果这变成一个关于重构模型的问题,那就太宽泛了。

标签: arrays matlab function simulink


【解决方案1】:

我使用 simulink-if 的块解决了我的问题,然后不会在每次读取/写入时都替换该值。

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 2016-12-09
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2015-05-29
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多