我想在simulink中重新排列一个数组。这需要实时完成,因为我将simulink模型加载到D空间。
我的问题是我通过带有终止字符的rs232端口接收数据,但这个字符并不总是在最后。例如,如果我的终止字符是x,我会收到例如[3,4,5,x,1,2]。我希望将其重新排列为[1,2,3,4,5,x]。
有人知道如何在simulink中执行此操作吗?
我尝试使用matlab代码块:
function y = fcn(u)
y = zeros(length(u),1);
help1 = zeros(length(u),1);
help2 = zeros(length(u),1);
sa = 1;
n = length(u);
for i=1:length(u)
if sa == 1;
help2(i) = u(i);
else
help1(i) = u(i);
end
if u(i) == 255
if u(i-1) == 256;
n = i;
sa = 0;
end
end
end
y = [help1(n+1:length(u)); help2(1:n)];
这通常很好用,但是当我尝试构建到我的d空间时,它无法处理术语n+1:length(u)
,因为它不是静态知道的。它也无法解析matlab函数circshift
,所以我不能使用它......
有什么想法吗?
答案 0 :(得分:2)
您应该拆分循环以避免动态索引。例如:
function y = fcn(u)
y = zeros(length(u),1);
n = length(u);
for i=1:length(u)
if u(i) == 255
if u(i-1) == 256;
n = i;
end
end
end
for i=n+1:length(u)
y(i-n) = u(i);
end
for i=1:n
y(length(u)-n+i) = u(i);
end