時間:2015-08-13 10:45:21來源:深圳市雷賽智能控制股份有限公司
一、問題現(xiàn)象及分析 問題經常通過以下編程表現(xiàn)出來:
//X發(fā)出脈沖后,等待脈沖發(fā)完后再做其它事情
d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );
while( d1000_check_done(0) == 0 ); 老版本的庫函數(shù)如下:
d1000_start_tr_move( 0, 6400, 3200, 6400, 0.1 );
while( d1000_check_done(0) == 0 ); 或者:
d1000_wait_done( 0 ); 此函數(shù)內部實際上包含類似于while( d1000_check_done(0) == 0 );的語句 以上可以看出,在檢測脈沖是否發(fā)完時,此段代碼的執(zhí)行完全獨占了CPU分配給當前進程的所有時間, 因而也排擠了其它消息的響應,當然也就不能響應定時器讀取位置,或其它停止操作等. 二、解決方法 解決此問題關鍵是讓while循環(huán)時能檢測系統(tǒng)消息,以下分別介紹在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函數(shù)
void DoEvents()
{
static MSG msg;
if( ::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) ){
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
標簽:
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(m.u63ivq3.com)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯(lián)網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2024-11-01
2024-10-31
2024-10-31
2024-10-31
2024-10-31
2024-10-29