新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用RTSI總線實(shí)現(xiàn)運(yùn)動控制和數(shù)據(jù)采集之間同步

利用RTSI總線實(shí)現(xiàn)運(yùn)動控制和數(shù)據(jù)采集之間同步

作者: 時(shí)間:2016-12-19 來源:網(wǎng)絡(luò) 收藏

4編程實(shí)現(xiàn)

  運(yùn)動控制與數(shù)據(jù)采集的同步控制流程如圖2所示。

  筆者采用LabWindows/CVI軟件對RTSl總線、數(shù)據(jù)采集和運(yùn)動控制進(jìn)行編程,其函數(shù)庫由NI-DAQ和NI-Motion提供。其中 NI-Motion函數(shù)庫可以將運(yùn)動控制與所有應(yīng)用軟件相結(jié)合,并可通過數(shù)字觸發(fā)輸入或NI運(yùn)動控制卡上的斷點(diǎn)輸出,使運(yùn)動與測量硬件同步運(yùn)行。RTSI 總線則將這些觸發(fā)與中斷信號連接到其他卡上,此總線功能由軟件設(shè)定。通過“Measurement&AutomationExplorer” (MAX)設(shè)備管理工具,可以配置各設(shè)備的硬件屬性,為每個(gè)設(shè)備分配1個(gè)設(shè)備編號,在編程時(shí)作為查找設(shè)備的標(biāo)識。下面是編程所需要的主要函數(shù)。

 ?。?)連接中斷信號和RTSI總線信號函數(shù)

  flex_select_signal(boardID,destination,source),其中boardlD為MAX分配的數(shù)據(jù)采集卡的 ID號;destination目的信號,為RTSI某引腳,如NIMC_RT-SI[0..7];source源信號,為某一中斷信號的名稱,如 NIMC_BREAKPOINT[1..4]。

 ?。?)設(shè)置運(yùn)動參數(shù)和中斷信號模式函數(shù)

  設(shè)置運(yùn)動速度函數(shù) flex_load_velocity(boardlD,axisOrVectorSpace,velocity,inputVector),其中ax- isOrVectorSpace為選擇軸編號或空間坐標(biāo);in-putVector參數(shù)對脫離主機(jī)運(yùn)行的程序有用,一般設(shè)成OXFF。

  設(shè)置加速度/減速度函數(shù) flex_load_acceleration(boardID,axisOrVectorSpace,accelerationType,accel- eration,inputVector),其中accelerationType為選擇加載的方式,即加速度、減速度還是同時(shí)加載。

  設(shè)置S-Curve時(shí)間函數(shù)flex_load_velocity(boar- dID,axisOrVectorSpace,sCurveTime,inputVector),其中sCurveTime為從0加速到恒定速度或從恒定速度減速到0時(shí)的時(shí)間,單位為采樣時(shí)間的整數(shù)倍。范圍為l~32767。

  設(shè)置運(yùn)動模式函數(shù)flex_set_op_mode(boardID,axisOrVectorSpace,operationMode)。

  設(shè)置運(yùn)動的目標(biāo)位置flex_load_target_pos(boardID,axis,targetPosition,inputVector)。

  設(shè)置產(chǎn)生中斷的方式函數(shù)flex_config- ure_breakpoint(boardID,axisOrEncoder,enableMode,actionOnBreakpoint,operation),其中actionOnBreak-point為中斷時(shí)電平的高低,operation為選擇單點(diǎn)中斷方式或緩沖中斷方式,由運(yùn)動控制卡的信號決定。

 ?。?)設(shè)置中斷信號產(chǎn)生位置和打開中斷函數(shù)

  設(shè)置中斷信號產(chǎn)生位置函數(shù) flix_load_pos_bp(boardID,axisOrEncoder,breakpointPosition.inputVector),其中breakpointPosition為中斷位置(即采樣點(diǎn))的起始位置,下一次產(chǎn)生中斷的位置為上一次產(chǎn)生中斷的位置加上采樣間距。打開中斷函數(shù) flex_enable_breakpoint()。

 ?。?)啟動電機(jī)運(yùn)動函數(shù)

  啟動電機(jī)運(yùn)動函數(shù)flex_start(boardID,ax-isOrVectorSpace,axisOrVSMap),其中axisOrVSMap為可選擇單軸運(yùn)動或多軸同時(shí)運(yùn)動。

 ?。?)檢查各種狀態(tài)函數(shù)

  檢查運(yùn)動狀態(tài),讀取運(yùn)動是否結(jié)束函數(shù)flex_check_move_complete_status()。檢測中斷狀態(tài)函數(shù)flex_read_axis_status_rtn0()。從通信狀態(tài)寄存器中讀取通信狀態(tài)函數(shù)flex_read_csr_rtn()。

5結(jié)束語

  利用RTSI可為各種測控系統(tǒng)應(yīng)用提供基于硬件的高速同步能力,本文討論的這種基于RTSI的運(yùn)動控制和數(shù)據(jù)采集之間的同步方法采用Lab-Windows/CVI編程實(shí)現(xiàn),可應(yīng)用到在運(yùn)動過程中實(shí)時(shí)采集數(shù)據(jù)的測控系統(tǒng)中,能獲得很好的測量精度。


上一頁 1 2 下一頁

評論


技術(shù)專區(qū)

關(guān)閉