[西门子] 脉冲轴电子凸轮(梯形、三次、五次、S)曲线算法——西...

[复制链接]
查看262 | 回复0 | 2024-10-24 14:14:49 | 显示全部楼层 |阅读模式


在现代智能装备制造领域中,机械电子化、硬件软件化成为发展的主要趋势。电子凸轮凭借精度高、速度快、稳定性好、灵活性高、成本低、噪声低等优点,在工业设备中逐渐取代机械凸轮的应用。电子凸轮常用总线控制,本项目采用脉冲控制,降低设备成本,使其仍具有电子凸轮的功能。

---设计思路---

---曲线分析---

选择五种基本的曲线,即直线、梯形曲线、三次曲线、五次曲线、S形曲线作为研究对象进行相关曲线算法的研究,通过曲线公式对曲线的位移、速度、加速度、加加速度曲线进行计算与仿真

---梯形曲线算法分析---
对于不需要频繁进行加减速运动的工业场合,例如:搬运机器人在搬运过程中的平稳加减速运动、机器人在自动化生产线上的平稳运动以及在机械系统中控制运动部件动作等场合,这些场合都涉及到梯形曲线算法的应用。梯形曲线分为三个部分:加速段、匀速段、减速段,运动状况是先进行加速运动,再进行匀速运动,最后进行减速运动,速度曲线形状如梯形,不同运动状态下的加速度恒定。梯形曲线算法公式内容如下:

加速度段: 

匀速度段

减速度段

---仿真---

在TIA Portal V15软件中,对梯形曲线的参数进行变量设置,曲线参数的数据类型选择双精度浮点值(LReaL),设置位移量、加速段轨迹和减速段轨迹所需的时间、以及达到最大速度所需时间和总时间,使用SCL编程语言对梯形曲线的参数和公式进行程序的编程,对梯形曲线轨迹的参数和输出值进行计算,并在TIA Portal V15软件中使用Trace跟踪功能,对输出值进行实时跟踪,得到梯形曲线的轨迹。

---结论---

由脉冲发出的梯形曲线轨迹可以看出,具有匀加速段、匀速段和匀减速段,速度值先均匀增加,再保持恒定,最后均匀减少,适合于实际工业生产中需要平稳加减速的场合。

---实现代码---

    REGION 输入
        #P0 := #Param.P0;
        #P1 := #Param.P1;
        #Vm := #Param.Vel;
        #Am := #Param.Acc;
        #Jm := #Param.Jerk;
    END_REGION

    REGION 参数计算
        #Pf := ABS(#P1 - #P0);           
        #Ta := #Vm / #Am;               //加速和减速需要的时间。
        #Tm := (#Pf - #Am*#Ta**2)/#Vm;   //匀速度段需要的时间。
        #Tf := #Tm + 2 * #Ta;             
        
        IF #Tf - 2 * #Ta > 0 THEN     
            #Type := 1;
        ELSE                     
            #Type := 2;
        END_IF;
        
    END_REGION

    REGION 输出
        //
        #NoVar := 0;
        #Tff := #Tf;
        //轨迹参数
        #ArrA[0] := #Pf;
        #ArrA[1] := #Tf;
        #ArrA[2] := #Ta;
        #ArrA[3] := #Tf;
    END_REGION

    REGION 输入
        //
        #P0 := #Param.P0;
        #P1 := #Param.P1;
        #Vm := #Param.Vel;
        #Am := #Param.Acc;
        #Jm := #Param.Jerk;
        //轨迹参数
        #Pf := #ArrA[0];
        #Tf := #ArrA[1];
        #Ta := #ArrA[2];
        #Tf := #ArrA[3];
        #Tm := #Tf - #Ta;
        
        IF #P1 < #P0 THEN
            #Vm *= -1;
            #Am *= -1;
            #Pf *= -1;
        END_IF;
        
    END_REGION

    REGION 生成轨迹
        //轨迹类型
        CASE #Type OF
            1://梯形
                IF #inT <= #Ta THEN      //加速段
                    #q_0 := #P0 + 0.5 * #Am * #inT ** 2;
                    #q_1 := #Am * #inT;
                    #q_2 := #Am / #Ta;
                    
                ELSIF #inT<=#Tm THEN   //匀速段
                    #q_0 := #P0 + 0.5 * #Am * #Ta ** 2 + #Vm * (#inT - #Ta);
                    #q_1 := #Vm;
                    #q_2 := 0;
                ELSIF #inT<=#Tf THEN    //减速段
                    #q_0 := #P0 + #Pf - 0.5 * #Am * (#Tf - #inT) ** 2;
                    #q_1 := - #Am * (#inT - #Ta - #Tm);
                    #q_2 := - #Am/#Ta;
                ELSE
                    //终点
                    #q_0 := #P0 + #Pf - 0.5 * #Am * (0) ** 2;
                    #q_1 := 0;
                    #q_2 := 0;
                END_IF;
                
            2://三角形
                IF #inT <= #Ta THEN    //加速段
                    #q_0 := #P0 + 0.5 * #Am * #inT ** 2;
                    #q_1 := #Am * #inT;
                    #q_2 := #Am / #Ta;
                ELSIF #inT<=#Tf THEN  //减速段
                    #q_0 := #P0 + #Pf - 0.5 * #Am * (#Tf - #inT) ** 2;
                    #q_1 := - #Am * (#inT - #Tf);
                    #q_2 := - #Am;
                ELSE                //终点
                    #q_0 := #P0 + #Pf - 0.5 * #Am * (0) ** 2;
                    #q_1 := - 0;
                    #q_2 := - 0;
                END_IF;
        END_CASE;
    END_REGION

    REGION 输出
        //轨迹
        #NoVar := 0;
        #q[0] := #q_0;
        #q[1] := #q_1;
        #q[2] := #q_2;
        #q[3] := 0;
    END_REGION

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册哦

    x
    您需要登录后才可以回帖 登录 | 注册哦

    本版积分规则