星秀直播官方版-星秀直播直播视频在线观看免费版下载-星秀直播安卓版本免费安装

研學(xué)堂|運動控制卡編程小技巧(運動順序執(zhí)行問題)

   2020-11-17 運動控制13169
核心提示:在運動控制卡開發(fā)應(yīng)用中,運動順序執(zhí)行是最常見的編程問題之一,關(guān)系到設(shè)備后續(xù)控制動作能否正常運行。 下面,我們分享研控運動控制卡的編程小技巧!
微信圖片_20201117090516 
       在運動控制卡開發(fā)應(yīng)用中,運動順序執(zhí)行是最常見的編程問題之一,關(guān)系到設(shè)備后續(xù)控制動作能否正常運行。
下面,我們分享研控運動控制卡的編程小技巧!

        希望對你有所幫助!

運動順序執(zhí)行

編程技巧

問題描述

         我們使用上位機編程軟件對控制卡進(jìn)行點位、插補等多段軌跡運動時,軌跡間需判斷上段軌跡運動停止?fàn)睿╕K_check_done(CardNo,axis_no)),上段軌跡運動停止則立即啟動下段軌跡運動。

        如果編程時只是單獨使用While循環(huán),執(zhí)行后會發(fā)現(xiàn)上位機界面被卡死,按鍵不能響應(yīng)。

        如以下用例程序,將出現(xiàn)上述問題:

        研控控制卡MCC800從位置dist_0運動到位置dist_1,程序如下:
 
        //設(shè)定運動速度參數(shù)
        rtn =YK_set_profile(mCardNo,Axis,atof(mMinVel),atof(mMaxVel),atof(mAccTime),atof(mDecTime),atof(mEndVel));
        //設(shè)定S段時間
        rtn  =YK_set_s_profile(mCardNo,Axis,0,atof(mSmoothTime));                           
        //啟動第一段運動軌跡
        rtn= YK_pmove(mCardNo, Axis, dist_0, 0);
       //判斷當(dāng)前軸狀態(tài)
       status= YK_check_done(mCardNo, Axis );                        
       //循環(huán)判斷當(dāng)前軸運動狀態(tài)
       while (status ==0)
       {
       // "當(dāng)前狀態(tài):運動",繼續(xù)循環(huán)判斷;   
              status = YK_check_done(mCardNo,Axis );   
       }
       //啟動第二段運動軌跡
       rtn= YK_pmove(mCardNo, Axis, dist_1, 0);
       //指令執(zhí)行完成


原因分析

       上述程序,在啟動運動位置到dist_0過程中需不斷循環(huán)判斷運動是否停止,在條件不滿足即運動沒有停止時程序一直處于循環(huán)中,程序?qū)加谜麄€軟件的進(jìn)程時間資源,即進(jìn)入了死循環(huán),其它進(jìn)程消息不能及時響應(yīng),導(dǎo)致上位機界面卡死。
因此我們需要軟件在循環(huán)判斷運動狀態(tài)的同時還需響應(yīng)其它進(jìn)程消息。

3 解決方案

       軟件多線程可解決上述問題,但多線程較麻煩??梢允褂密浖詣雍瘮?shù)實現(xiàn)。

       1   VB編程

        VB編程軟件中有系統(tǒng)自動線程函數(shù)“DoEvents”。
        //循環(huán)判斷當(dāng)前軸運動狀態(tài)
        while (status ==0)
       {
       // "當(dāng)前狀態(tài):運動",繼續(xù)循環(huán)判斷;   
              status = YK_check_done(mCardNo,Axis );  
       // 使用VB編程中自帶線程函數(shù)“DoEvents”
       DoEvents
       }

     2    VC編程

       VC編程軟件中有類似線程查詢函數(shù)“PeekMessage”。
       //循環(huán)定義函數(shù)名DoEvents
       void CMCC800VCTestMotionDlg::DoEvents()
       {      
       static MSG msg;
      if(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) )
       {
        ::TranslateMessage( &msg );
        ::DispatchMessage( &msg );
       }      
       }

3    C# 編程

      C#編程軟件中有系統(tǒng)自動線程函數(shù)“DoEvents”。
      //循環(huán)判斷當(dāng)前軸運動狀態(tài)
      while (status == 0)
       {
       // "當(dāng)前狀態(tài):運動",繼續(xù)循環(huán)判斷;   
       status=MCC. YK_check_done(mCardNo, Axis );  
       // 使用C#編程中自帶線程函數(shù)“DoEvents”
       Application.DoEvents();
       }

 4    Labview 編程

       Labview編程軟件中在循環(huán)框中添加延時時間。

微信圖片_20201117090520
 
標(biāo)簽: 運動控制
分享到: 0
收藏 0
 
更多>同類方案
免責(zé)申明
推薦方案
點擊排行
最新資訊更多>
最新供應(yīng)更多>
網(wǎng)站首頁  |  聯(lián)系方式  |  關(guān)于我們  |  問題解析  |  版權(quán)隱私  |  使用協(xié)議  |  網(wǎng)站地圖  |  排名推廣  |  廣告服務(wù)  |  積分換禮  |  網(wǎng)站留言  |  RSS訂閱  |  違規(guī)舉報  |  粵ICP備1207862號

中國智能化網(wǎng)(zgznh®)--引領(lǐng)工業(yè)智能化產(chǎn)業(yè)發(fā)展 共享智能化+優(yōu)質(zhì)平臺

版權(quán)所有:深圳市智控網(wǎng)絡(luò)有限公司 學(xué)術(shù)指導(dǎo):深圳市智能化學(xué)會

粵ICP備12078626號

深公網(wǎng)安備案證字第 4403101901094 號 | 粵公網(wǎng)安備 44030702001206號