深圳市研控自动化科技有限公司

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

供稿:深圳市研控自动化科技有限公司
发布时间:2020/11/20 23:47:54

在运动控制卡开发应用中,运动顺序执行是最常见的编程问题之一,关系到设备后续控制动作能否正常运行。


下面,我们分享研控运动控制卡的编程小技巧
希望对你有所帮助!



运动顺序执行——编程技巧





1.1问题描述


我们使用上位机编程软件对控制卡进行点位、插补等多段轨迹运动时,轨迹间需判断上段轨迹运动停止状态(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);

       //指令执行完成



1.2原因分析


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


因此我们需要软件在循环判断运动状态的同时还需响应其它进程消息。



1.3解决方案

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



1.3.1      VB编程



VB编程软件中有系统自动线程函数“DoEvents”。

//循环判断当前轴运动状态

while (status ==0)

       {

       // "当前状态:运动",继续循环判断;   

              status = YK_check_done(mCardNo,Axis );  

       // 使用VB编程中自带线程函数“DoEvents”

DoEvents

       }




1.3.2      VC编程



VC编程软件中有类似线程查询函数“PeekMessage”。

//循环定义函数名DoEvents

void CMCC800VCTestMotionDlg::DoEvents()

{      

       static MSG msg;

      if(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) )

       {

        ::TranslateMessage( &msg );

        ::DispatchMessage( &msg );

       }      

}




1.3.3      C# 编程



C#编程软件中有系统自动线程函数“DoEvents”。
//循环判断当前轴运动状态
while (status == 0)

        {

       // "当前状态:运动",继续循环判断;   

         status=MCC. YK_check_done(mCardNo, Axis );  

       // 使用C#编程中自带线程函数“DoEvents”

Application.DoEvents();

       }




1.3.4      Labview 编程



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

微信图片_20201120235720.png




如需了解更多信息,请访问 (深圳市研控自动化科技有限公司)官网 http://www.yankong.com

关键词:研控,运动控制卡

联系我们

桌面版

深圳市研控自动化科技有限公司
地 址:深圳市南山区高新北区新西路7号兰光科技大厦8楼A802
邮 编:518000
电 话:0755-86142288
传 真:0755-86142266
网 址:http://www.yankong.com
E-mail:yako@yankong.com
联系人:董小姐

工控宝
您的贴身工控百宝箱!

点击下载