利用RTSI總線實現運動控制和數據采集之間同步
4編程實現
運動控制與數據采集的同步控制流程如圖2所示。
筆者采用LabWindows/CVI軟件對RTSl總線、數據采集和運動控制進行編程,其函數庫由NI-DAQ和NI-Motion提供。其中 NI-Motion函數庫可以將運動控制與所有應用軟件相結合,并可通過數字觸發(fā)輸入或NI運動控制卡上的斷點輸出,使運動與測量硬件同步運行。RTSI 總線則將這些觸發(fā)與中斷信號連接到其他卡上,此總線功能由軟件設定。通過“Measurement&AutomationExplorer” (MAX)設備管理工具,可以配置各設備的硬件屬性,為每個設備分配1個設備編號,在編程時作為查找設備的標識。下面是編程所需要的主要函數。
(1)連接中斷信號和RTSI總線信號函數
flex_select_signal(boardID,destination,source),其中boardlD為MAX分配的數據采集卡的 ID號;destination目的信號,為RTSI某引腳,如NIMC_RT-SI[0..7];source源信號,為某一中斷信號的名稱,如 NIMC_BREAKPOINT[1..4]。
?。?)設置運動參數和中斷信號模式函數
設置運動速度函數 flex_load_velocity(boardlD,axisOrVectorSpace,velocity,inputVector),其中ax- isOrVectorSpace為選擇軸編號或空間坐標;in-putVector參數對脫離主機運行的程序有用,一般設成OXFF。
設置加速度/減速度函數 flex_load_acceleration(boardID,axisOrVectorSpace,accelerationType,accel- eration,inputVector),其中accelerationType為選擇加載的方式,即加速度、減速度還是同時加載。
設置S-Curve時間函數flex_load_velocity(boar- dID,axisOrVectorSpace,sCurveTime,inputVector),其中sCurveTime為從0加速到恒定速度或從恒定速度減速到0時的時間,單位為采樣時間的整數倍。范圍為l~32767。
設置運動模式函數flex_set_op_mode(boardID,axisOrVectorSpace,operationMode)。
設置運動的目標位置flex_load_target_pos(boardID,axis,targetPosition,inputVector)。
設置產生中斷的方式函數flex_config- ure_breakpoint(boardID,axisOrEncoder,enableMode,actionOnBreakpoint,operation),其中actionOnBreak-point為中斷時電平的高低,operation為選擇單點中斷方式或緩沖中斷方式,由運動控制卡的信號決定。
?。?)設置中斷信號產生位置和打開中斷函數
設置中斷信號產生位置函數 flix_load_pos_bp(boardID,axisOrEncoder,breakpointPosition.inputVector),其中breakpointPosition為中斷位置(即采樣點)的起始位置,下一次產生中斷的位置為上一次產生中斷的位置加上采樣間距。打開中斷函數 flex_enable_breakpoint()。
(4)啟動電機運動函數
啟動電機運動函數flex_start(boardID,ax-isOrVectorSpace,axisOrVSMap),其中axisOrVSMap為可選擇單軸運動或多軸同時運動。
?。?)檢查各種狀態(tài)函數
檢查運動狀態(tài),讀取運動是否結束函數flex_check_move_complete_status()。檢測中斷狀態(tài)函數flex_read_axis_status_rtn0()。從通信狀態(tài)寄存器中讀取通信狀態(tài)函數flex_read_csr_rtn()。
5結束語
利用RTSI可為各種測控系統應用提供基于硬件的高速同步能力,本文討論的這種基于RTSI的運動控制和數據采集之間的同步方法采用Lab-Windows/CVI編程實現,可應用到在運動過程中實時采集數據的測控系統中,能獲得很好的測量精度。
評論