分享好友 方案首页 频道列表

研学堂|运动控制卡编程小技巧(运动顺序执行问题)

2020-11-17 08:58131690
微信图片_20201117090516 
       在运动控制卡开发应用中,运动顺序执行是最常见的编程问题之一,关系到设备后续控制动作能否正常运行。
下面,我们分享研控运动控制卡的编程小技巧!

        希望对你有所帮助!

运动顺序执行

编程技巧

问题描述

         我们使用上位机编程软件对控制卡进行点位、插补等多段轨迹运动时,轨迹间需判断上段轨迹运动停止状(YK_check_done(CardNo,axis_no)),上段轨迹运动停止则立即启动下段轨迹运动。

        如果编程时只是单独使用While循环,执行后会发现上位机界面被卡死,按键不能响应。

        如以下用例程序,将出现上述问题:

        研控控制卡MCC800从位置dist_0运动到位置dist_1,程序如下:
 
        //设定运动速度参数
        rtn =YK_set_profile(mCardNo,Axis,atof(mMinVel),atof(mMaxVel),atof(mAccTime),atof(mDecTime),atof(mEndVel));
        //设定S段时间
        rtn  =YK_set_s_profile(mCardNo,Axis,0,atof(mSmoothTime));                           
        //启动第一段运动轨迹
        rtn= YK_pmove(mCardNo, Axis, dist_0, 0);
       //判断当前轴状态
       status= YK_check_done(mCardNo, Axis );                        
       //循环判断当前轴运动状态
       while (status ==0)
       {
       // "当前状态:运动",继续循环判断;   
              status = YK_check_done(mCardNo,Axis );   
       }
       //启动第二段运动轨迹
       rtn= YK_pmove(mCardNo, Axis, dist_1, 0);
       //指令执行完成


原因分析

       上述程序,在启动运动位置到dist_0过程中需不断循环判断运动是否停止,在条件不满足即运动没有停止时程序一直处于循环中,程序将会占用整个软件的进程时间资源,即进入了死循环,其它进程消息不能及时响应,导致上位机界面卡死。
因此我们需要软件在循环判断运动状态的同时还需响应其它进程消息。

3 解决方案

       软件多线程可解决上述问题,但多线程较麻烦。可以使用软件自动函数实现。

       1   VB编程

        VB编程软件中有系统自动线程函数“DoEvents”。
        //循环判断当前轴运动状态
        while (status ==0)
       {
       // "当前状态:运动",继续循环判断;   
              status = YK_check_done(mCardNo,Axis );  
       // 使用VB编程中自带线程函数“DoEvents”
       DoEvents
       }

     2    VC编程

       VC编程软件中有类似线程查询函数“PeekMessage”。
       //循环定义函数名DoEvents
       void CMCC800VCTestMotionDlg::DoEvents()
       {      
       static MSG msg;
      if(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) )
       {
        ::TranslateMessage( &msg );
        ::DispatchMessage( &msg );
       }      
       }

3    C# 编程

      C#编程软件中有系统自动线程函数“DoEvents”。
      //循环判断当前轴运动状态
      while (status == 0)
       {
       // "当前状态:运动",继续循环判断;   
       status=MCC. YK_check_done(mCardNo, Axis );  
       // 使用C#编程中自带线程函数“DoEvents”
       Application.DoEvents();
       }

 4    Labview 编程

       Labview编程软件中在循环框中添加延时时间。

微信图片_20201117090520
反对 0
举报 0
收藏 0
打赏 0
什么是运动控制-运动控制系统组成
​运动控制起源于早期的伺服控制。简单地说,运动控制就是对机械运动部件的位置、速度等进行实时的控制管理,使其按照预期的运动轨迹和规定的运动参数进行运动。

0评论2022-03-1142926