研學(xué)堂|運(yùn)動(dòng)控制卡編程小技巧(運(yùn)動(dòng)順序執(zhí)行問(wèn)題)

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

        希望對(duì)你有所幫助!

運(yùn)動(dòng)順序執(zhí)行

編程技巧

問(wèn)題描述

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

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

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

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


原因分析

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

3 解決方案

       軟件多線程可解決上述問(wèn)題,但多線程較麻煩??梢允褂密浖詣?dòng)函數(shù)實(shí)現(xiàn)。

       1   VB編程

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

     2    VC編程

       VC編程軟件中有類(lèi)似線程查詢(xún)函數(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)自動(dòng)線程函數(shù)“DoEvents”。
      //循環(huán)判斷當(dāng)前軸運(yùn)動(dòng)狀態(tài)
      while (status == 0)
       {
       // "當(dāng)前狀態(tài):運(yùn)動(dòng)",繼續(xù)循環(huán)判斷;   
       status=MCC. YK_check_done(mCardNo, Axis );  
       // 使用C#編程中自帶線程函數(shù)“DoEvents”
       Application.DoEvents();
       }

 4    Labview 編程

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

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

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

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

粵ICP備12078626號(hào)

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