在運(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 =Y(jié)K_set_profile(mCardNo,Axis,atof(mMinVel),atof(mMaxVel),atof(mAccTime),atof(mDecTime),atof(mEndVel));
//設(shè)定S段時(shí)間
rtn =Y(jié)K_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
}
審核編輯:符乾江
-
編程
+關(guān)注
關(guān)注
90文章
3722瀏覽量
97386 -
運(yùn)動(dòng)控制卡
+關(guān)注
關(guān)注
7文章
131瀏覽量
16123
發(fā)布評(píng)論請(qǐng)先 登錄
運(yùn)動(dòng)控制卡穩(wěn)定選型:CSNP1GCR01-AOW 工業(yè)級(jí)可靠應(yīng)用解析
全國產(chǎn)強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制內(nèi)核(十二):實(shí)時(shí)在線變速實(shí)現(xiàn)多段速的軟著陸# 運(yùn)動(dòng)控制器# 正運(yùn)動(dòng)技術(shù)# 運(yùn)動(dòng)控制卡
緊湊型網(wǎng)絡(luò)運(yùn)動(dòng)控制卡ECI1808/ECI1A08#運(yùn)動(dòng)控制卡# 正運(yùn)動(dòng)技術(shù)# 正運(yùn)動(dòng)控制卡# 運(yùn)動(dòng)控制器
6路高性能PCIe EtherCAT運(yùn)動(dòng)控制卡XPCIE6032H#運(yùn)動(dòng)控制卡# 正運(yùn)動(dòng)# 正運(yùn)動(dòng)控制卡
PCIe兩路獨(dú)立主站高性能 EtherCAT運(yùn)動(dòng)控制卡XPCIE2032H# 運(yùn)動(dòng)控制卡# 正運(yùn)動(dòng)技術(shù)
高速高精運(yùn)動(dòng)控制!PCIe超實(shí)時(shí)2通道EtherCAT運(yùn)動(dòng)控制卡上市!
全球首創(chuàng)!PCIe超實(shí)時(shí)6通道EtherCAT運(yùn)動(dòng)控制卡上市!
全球首創(chuàng)!PCIe 6路高性能EtherCAT運(yùn)動(dòng)控制卡XPCIE6032H #正運(yùn)動(dòng)技術(shù) #運(yùn)動(dòng)控制卡
圖像信號(hào)分析處理卡設(shè)計(jì)原理圖:536-基于FMC接口的XCZU7EV 通用PCIe卡 視覺處理卡 工業(yè)控制卡
C#上位機(jī)與運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的周期上報(bào)
控制系統(tǒng)調(diào)優(yōu)必備知識(shí):“運(yùn)動(dòng)控制卡 控制周期怎么算”你真的懂了嗎?
研控運(yùn)動(dòng)控制卡的編程小技巧
評(píng)論