可变大小(运行时)输入Simulink Matlab

可变大小(运行时)输入Simulink Matlab,matlab,size,simulink,Matlab,Size,Simulink,simulink中的可变大小信号有很大问题。 我有一个matlab函数块,其中有一个函数应该接受一个可变大小的运行时数组,它需要评估输出。特别是,输入数组是一个带有整数的1xn数组,每个整数表示轨迹的一部分,例如:直线、直线、圆、半圆、直线的序列可由数组表示[1 2 3 1]。 这个阵列,所以轨迹,可以在机器人的模拟路径规划中改变,但是我得到了大量的错误。 我已在数据/端口中为输入(无大小)和输出(大小表示上限)设置了可变大小。如果我在输入中放入uppe边界,simulink希望输入正好具有该维

simulink中的可变大小信号有很大问题。 我有一个matlab函数块,其中有一个函数应该接受一个可变大小的运行时数组,它需要评估输出。特别是,输入数组是一个带有整数的1xn数组,每个整数表示轨迹的一部分,例如:直线、直线、圆、半圆、直线的序列可由数组表示[1 2 3 1]。 这个阵列,所以轨迹,可以在机器人的模拟路径规划中改变,但是我得到了大量的错误。 我已在数据/端口中为输入(无大小)和输出(大小表示上限)设置了可变大小。如果我在输入中放入uppe边界,simulink希望输入正好具有该维度,即使我放入可变大小

function [x, y, vx, vy, ax, ay, tf] = trajectoryPlanUniform(prim, discr, xdiscr, 

ydiscr, xi, yi, vmax, amax)

len = size(prim, 2);

tf = zeros(1, len+1); tf(1, 1) = 0;
x = zeros(6, len); y = zeros(6, len); 
vx = zeros(6, len); vy = zeros(6, len); 
ax = zeros(6, len); ay = zeros(6, len);

xitemp = xdiscr; yitemp = ydiscr;
vxitemp = 0; vyitemp = 0; vftemp = vmax;
axitemp = 0; ayitemp = 0; aftemp = amax;

xytot = zeros(2,len+1);
xytot(1,1) = xi; xytot(2,1) = yi;

for i = 1:len
    [x(:,i), y(:,i), vx(:,i), vy(:,i), ax(:,i), ay(:,i), tf(i+1)] = trajectoryCallUniform(prim(i), discr, xitemp, yitemp, vxitemp, vyitemp, vftemp, axitemp, ayitemp, aftemp, tf(i), vmax, amax);

    [xitemp, yitemp, vxitemp, vyitemp, axitemp, ayitemp] = calculateTrajectoryUniform(prim(i), x(:,i), y(:,i), vx(:,i), vy(:,i), ax(:,i), ay(:,i), tf(i+1));

    xytot(1,i+1) = xitemp;
    xytot(2,i+1) = yitemp;

    if i == (len - 1)
        vftemp = 0;
        aftemp = 0;
    end
end

end
我认为Simulink会产生错误,因为不知道输入大小,它无法分配内存。 要帮忙吗

多谢各位

一小部分代码…prim是可变大小的输入,而所有的输出都是可变大小的

function [x, y, vx, vy, ax, ay, tf] = trajectoryPlanUniform(prim, discr, xdiscr, 

ydiscr, xi, yi, vmax, amax)

len = size(prim, 2);

tf = zeros(1, len+1); tf(1, 1) = 0;
x = zeros(6, len); y = zeros(6, len); 
vx = zeros(6, len); vy = zeros(6, len); 
ax = zeros(6, len); ay = zeros(6, len);

xitemp = xdiscr; yitemp = ydiscr;
vxitemp = 0; vyitemp = 0; vftemp = vmax;
axitemp = 0; ayitemp = 0; aftemp = amax;

xytot = zeros(2,len+1);
xytot(1,1) = xi; xytot(2,1) = yi;

for i = 1:len
    [x(:,i), y(:,i), vx(:,i), vy(:,i), ax(:,i), ay(:,i), tf(i+1)] = trajectoryCallUniform(prim(i), discr, xitemp, yitemp, vxitemp, vyitemp, vftemp, axitemp, ayitemp, aftemp, tf(i), vmax, amax);

    [xitemp, yitemp, vxitemp, vyitemp, axitemp, ayitemp] = calculateTrajectoryUniform(prim(i), x(:,i), y(:,i), vx(:,i), vy(:,i), ax(:,i), ay(:,i), tf(i+1));

    xytot(1,i+1) = xitemp;
    xytot(2,i+1) = yitemp;

    if i == (len - 1)
        vftemp = 0;
        aftemp = 0;
    end
end

end

你的问题很难理解。你能分享你的代码吗?tf是控制系统工具箱中的一个函数。您应该将tf变量重命名为其他变量。显示代码不太可能使我们能够帮助您。错误信息有哪些?MATLAB函数接口错误:“ModelTraction/Subsystem1/MATLAB Function/SFunction”输入端口1 prim处的信号是具有非离散采样时间的可变大小信号。任何可变大小信号的采样时间必须是离散的。模拟是以固定的步长时间运行的,或者我尝试了零阶保持、内存或延迟,但它不起作用。顺便说一句,我有其他错误之前和与另一个模拟。我需要知道如何在嵌入式函数中使用可变大小的输入…当您使用zoh或延迟块但它不起作用时,您是否收到相同或不同的错误消息?如果不同,是什么?