1

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を解決できないため、使用できません...

何か案は?

4

1 に答える 1

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
于 2013-11-06T14:19:12.623 に答える