<nav id="cgkqy"></nav>
  • <nav id="cgkqy"><nav id="cgkqy"></nav></nav>
    <menu id="cgkqy"></menu>
  • <menu id="cgkqy"></menu>
  • <menu id="cgkqy"></menu>
  • <nav id="cgkqy"></nav>
  • <nav id="cgkqy"></nav>
  •  注冊名:

    密碼:

    個人注冊

    企業注冊

    商務申請

    商務管理平臺

    企業管理平臺

    個人管理平臺

    我的工控博客

    中國工控網www.archeagesp.com

    首頁 | 新聞中心 | 工控論壇 | 經驗視點 | 工控商務 | 電氣手冊 | 工控博客 | 招聘求職 | 網上調查 | 企業中心 | 供求信息 | 資料中心 | 工控書店

    所在位置:工控博客苑 -- 運動控制系統 -- DMC1000控制卡不能響應系統消息

    中國工控網搜索:

    鐘天玉先生

         學歷:大學本科
         職稱:工程師
         年齡:39歲
           新聞信息(7/2)
           工作圖片(0)
           技術論文(2/7)
           交流論壇(19/20)
           留言信箱(4)
           瀏覽人次:14260
           給我發消息
     我的新聞推薦 更多..
    發表人:zhong2010 發表時間:2010-5-9 21:06:00

     

    發表新論題

     本欄論題: DMC1000控制卡不能響應系統消息  [6551]
        DMC1000控制卡不能響應系統消息
       
        一、問題現象及分析
        問題經常通過以下編程表現出來:
       
        //X發出脈沖后,等待脈沖發完后再做其它事情
        d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );
        while( d1000_check_done(0) == 0 );
       
        老版本的庫函數如下:
       
        d1000_start_tr_move( 0, 6400, 3200, 6400, 0.1 );
        while( d1000_check_done(0) == 0 );
       
        或者:
        d1000_wait_done( 0 );
        此函數內部實際上包含類似于while( d1000_check_done(0) == 0 );的語句
       
        以上可以看出,在檢測脈沖是否發完時,此段代碼的執行完全獨占了CPU分配給當前進程的所有時間,
        因而也排擠了其它消息的響應,當然也就不能響應定時器讀取位置,或其它停止操作等.
       
        二、解決方法
        解決此問題關鍵是讓while循環時能檢測系統消息,以下分別介紹在VB,VC,CB下的解決措施:
       
        注:以下編程全以DMC1000最新的驅動庫函為參考
       
        1.VB編程
        d1000_start_t_move 0, 6400, 3200, 6400, 0.1
        DO
        DoEvents
        LOOP WHILE (d1000_check_done(0) = 0)
       
        2.VC編程
        在VC下編程關鍵是要解決類似于VB的DoEvnets函數
       
        void DoEvents()
        {
        static MSG msg;
        if( ::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) ){
        ::TranslateMessage( &msg );
        ::DispatchMessage( &msg );
        }
        }
       
        然后編程如下:
       
        d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );
        while( d1000_check_done(0) == 0 )
        ::DoEvents();
       
        3.CB編程
        同樣也需要完成一個DoEvents函數的定義:
        void DoEvents()
        {
        Application->ProcessMessages();//VCL給程序帶來極大簡化
        }
        編程如下:
        d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );
        while( d1000_check_done(0) == 0 )
        ::DoEvents();
       
        三、技巧提升
        有了自產的DoEvents函數,是否就可以一切OK了呢。試想一個問題,實際加工時,
        通常會有大量的小線段(即短脈沖距離)出現,若頻繁的調用DoEvents勢必帶來新的麻煩,因為加工
        需要連續的進行,設備的運動之間停頓時間過長,會形成設備的多次啟停,進而易產生振動,造成
        設備的加速磨損,并且速度也快不起來。因此添加一小小技巧(實用又省錢),判斷脈沖距離是否過小
        若過小則不執行DoEvents函數,過小量可以根據自己的需求也定義一個參考量。當然程序的執行順序也
        可以優化一下,以上面程序為例:
        if( d1000_check_done(0) != 0 ) return;
        d1000_start_t_move( 0, 6400, 3200, 6400, 0.1);
        咋一看沒有什么特別的,但是請看下加工程序的部分簡化代碼,也許會有新的啟示:
       
        for( int i(0); i
        {
       
        if( d1000_check_done(0) == 0 )
        {
        if( Len > 2.0 )DoEvents();
        //小于2單位(可以指為毫米,或其它單位)則不執行DoEvents函數
        continue;
        }
        Len = dist[i].Len;
        d1000_start_t_move( 0, dist[i], speed );
        i ++;
        }
        當然,世界上做事情的方法多的是,有高手則愿意動用復雜的多任務編程方法來完成操作,
        最后經過努力,事情也可以解決,若有興趣,可參見另一篇《控制卡的多任務編程》,然后自行做
        編程測試。不過本人的理論是,解決事情的方法越簡單越好,據本人了解,大師之所以為大師,通常
        不是把問題搞得高深莫測,而是通俗易懂。
       
        四、其它應用
        此方法對所有DMC系列的控制卡的編程都可以運用,還可用在自定義的Arc(圓弧運動)函數
        上,參見下面偽代碼(Arc的直線擬合算法參見DMC2000的ARC算法):
       
        for( int i(0); i
        {
        while( IsRunning(X) || IsRunning(Y) )
        {
        if( i%16 == 0 ) DoEvents();//每16再運行一次
        }
        start_line2( newx, newy );
        }
       
       
     

    如果要回復本欄論題,請首先登陸網站

    ·如果你已經是中國工控網www.archeagesp.com成員,請直接登錄。

    ·如果你還不是中國工控網www.archeagesp.com成員,請首先注冊,注冊為免費!

    注冊名:

    密  碼:

               注冊中國工控網www.archeagesp.com
               忘記密碼
     
         相關技術論文:

    關于我們     免責聲明     服務項目     廣告聯系     友情鏈接     聯系方式     意見反饋     設為首頁     加入收藏

     ©2021-2022 中國工控網(www.archeagesp.com) 版權所有 豫ICP備17046657號

    管理員信箱:chinakong98@163.com  服務熱線:13525974529

    洛陽博德工控自動化技術有限公司

    中國    洛陽

    被公侵犯的人妻高清,成人午夜福利是免费观看,日韩精品人妻无码久久影院
    <nav id="cgkqy"></nav>
  • <nav id="cgkqy"><nav id="cgkqy"></nav></nav>
    <menu id="cgkqy"></menu>
  • <menu id="cgkqy"></menu>
  • <menu id="cgkqy"></menu>
  • <nav id="cgkqy"></nav>
  • <nav id="cgkqy"></nav>