Arrays simulink中的阵列重排

Arrays simulink中的阵列重排,arrays,simulink,Arrays,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(l

我想在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

你总是知道如何重新安排它吗?然后,您可以使用jsut
demux
将数组和
mux
按正确的顺序执行。如果没有,那么你就可以编写一个用户定义的函数,分析你的数组并重新排序。你有没有尝试过使用MATLAB函数块来重新排列?我已经尝试过了,但当我尝试建立模型时,它会抱怨一些静态未知的东西或者无法消除MATLAB函数(如circshift).对该功能块的外观有何建议?