国产成人无码精品久久久露脸,成人无码免费一区二区三区网站,欧美成人黑人在线视频,国产成人户外露出视频在线

行業(yè)新聞

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

所屬分類:行業(yè)新聞 發(fā)表日期:2020-11-21 文章來源:

在運(yùn)動(dòng)控制卡開發(fā)應(yīng)用中券盅,運(yùn)動(dòng)順序執(zhí)行是最常見的編程問題之一舔艾,關(guān)系到設(shè)備后續(xù)控制動(dòng)作能否正常運(yùn)行鳄逾。

下面,我們分享研控運(yùn)動(dòng)控制卡的編程小技巧列序!

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

運(yùn)動(dòng)順序執(zhí)行——編程技巧

1.1

問題描述

我們使用上位機(jī)編程軟件對(duì)控制卡進(jìn)行點(diǎn)位失叁、插補(bǔ)等多段軌跡運(yùn)動(dòng)時(shí)睹肝,軌跡間需判斷上段軌跡運(yùn)動(dòng)停止?fàn)顟B(tài)(YK_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)上述問題:

研控控制卡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í)行完成

1.2

原因分析

上述程序弄讥,在啟動(dòng) 運(yùn)動(dòng)位置到dist_0過程中需不斷循環(huán)判斷運(yùn)動(dòng)是否停止,在條件不滿足即運(yùn)動(dòng)沒有停止時(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)程消息。

1.3

解決方案

軟件多 線程可解決上述問題口四,但多線程較麻煩孵运。可以使用軟件自動(dòng)函數(shù)實(shí)現(xiàn)蔓彩。

1.3.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

}

1.3.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 );

}

}

1.3.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();

}

1.3.4 Labview 編程

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