【发布时间】: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
selectorblock,它几乎有这个功能?我不太明白为什么将它们声明为零是一个问题...... -
@Wolfie 抱歉,我不解释为什么我不希望出现零。问题是当函数第二次执行时,在读取之前存储在任何变量上的值被零替换。
-
在设置零之前使用
isempty检查? -
我觉得你应该使用enabled subsystems and merge blocks 的工作流,这样你会得到 0 的输出,除非你启用的开关被触发。您正在使用 Simulink,请尝试利用内置块,而不是将逻辑放在功能块中。否则,您不妨使用 MATLAB 脚本。如果这变成一个关于重构模型的问题,那就太宽泛了。
标签: arrays matlab function simulink