在Simulink中重新排列数组

坦率

我想在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,所以我不能使用它...

有任何想法吗?

纳万

您应该拆分循环以避免动态索引。例如:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章