【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度

1、函数关系【开度—匀速度】【开度—启动时间】【开度变化—运动时间】

输入开度和最终液压阀转动速度之间的关系:
在这里插入图片描述
开度和启动时间之间的关系:
【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度_第1张图片
启动之后,开度变化与时间的关系
在这里插入图片描述

2、实现流程

【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度_第2张图片

Simulink框架

【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度_第3张图片
之前用S-function表示这个模型的总是理不清时序逻辑,因为有很多参数受到上一时刻的影响,如果把输出端的数据重新引进输入端,出了各种错误**。后面才意识到可以用全局变量来解决,
如何在Simulink里面添加全局变量参考这篇文章,除了在代码里面申明Global参数以外,还要添加数据存储模块才可以用。
Simulink中matlab Function模块全局变量的使用方法总结
Fcn函数的代码:

function y = fcn(u)
global t_start; % Edit Data中设置初值为零
global C_before;% Edit Data中设置初值为零
global w0 w delt vel
t = u(1);
C = u(2);
if C ~= C_before    
    w0=vel;
    t_start = t;
    
    % 获得w参数
    if C<=0.2
        w = 0;
    else
        w = 3.28168377*C-0.656336753;
    end
    
    % 获得时间间隔delt参数
    if w0 ==0
        if C<= 0.2
            delt = 0;
        elseif C>0.2&&C<=0.45
            delt = -20*C+12;
        else
            delt = 3;
        end
        else    
        if abs(C-C_before)<0.2
            delt = 20*abs(C-C_before);
        else
            delt = 4;
        end    
    end
end
% 根据处于的阶段确定速度
if t-t_start < delt
    vel = (w -w0)/delt * (t-t_start)+w0;
else
    vel = w;        
end
if C ~= C_before
     C_before = C;
end
y = vel;

结果显示,
【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度_第4张图片

【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度_第5张图片【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度_第6张图片

你可能感兴趣的:(机器人基础,C++)