1 引言
許多測試系統(tǒng)要求在連續(xù)運動的同時能實時進行數據采集。如果測試過程不連續(xù),或者測試位置在前而采集在后,二者之間不能同步,將不可避免地產生誤差。為了提高測量精度,運動控制和數據采集必須實現同步。目前,美國ni公司提供的pci總線e系列數據采集卡和運動控制卡都嵌入了rtsi(real- time system integration)總線,它可以滿足需要精確同步和實時數據采集處理的測試系統(tǒng)的要求。本文主要介紹如何利用rtsi總線編程實現運動控制和數據采集之間的同步。
2 rtsi總線
risi總線是實時系統(tǒng)集成總線,它是一種專用高速數字總線,專門提供ni產品(包括圖像采集和數據采集產品)之間的高速互連。rtsi總線包括7根觸發(fā)線,用于創(chuàng)建ni的測量、圖像采集和運動控制設備以及接口板卡之間靈活的同步關系。通過軟件設置可將其他觸發(fā)信號路由到rtsi總線上,也可以將 rtsi總線信號路由到其分觸發(fā)信號線上作為觸發(fā)時鐘,實現l路信號驅動多個設備,達到同步的目的。通過rtsi總線,可用1個公共的觸發(fā)或定時事件實現幾個功能事件同步。rtsi總線的典型應用包括觸發(fā)圖像采集、基于運動事件的數據采集測量、捕獲基于外部事件到運動控制器的當前運動位置等。
對于pci總線e系列數據采集卡,有15種信號與rtsi總線相連,包括時基信號、數據采集時鐘、d/a輸出時鐘、板上通用計數器信號、外部pfi(可編程輸入)信號等,如圖1所示。

3 運動控制與數據采集的同步
測試系統(tǒng)中采取的同步方式一般有二種:一種是運動控制卡控制電機運動到某個指定位置,數據采集卡能實時采集該位置上的數據,這種方式稱為中斷;另一種同步方式是如果電機運動到某個位置時數據采集卡采集到滿足某種條件的信號,則需要記錄電機當前的運動位置,這種方式稱為捕獲。本文主要討論中斷同步方式。
3.1 中斷方式
中斷分為絕對位置中斷、相對位置中斷及周期性位置中斷。絕對位置中斷是指當電機運動到某絕對位置時運動控制卡將產生外部中斷信號;相對位置中斷是指當電機的運動位置相對于允許電機產生中斷時的位置之差滿足設定的條件時產生中斷信號;求模位置中斷是指每相對于某個設定的位置都將產生1個中斷信號。因此可以根據測試系統(tǒng)的不同需要決定采取什么樣的中斷方式。
3.2 同步的原理
當運動控制卡控制電機運動到某個位置時,編碼器上返回的位置信號一旦符合設定的位置條件,將發(fā)出1個中斷信號。該信號可作為數據采集卡采集信號的觸發(fā)條件,使采集卡能實時采集所需數據。運動控制卡和數據采集卡可以通過rtsi總線實現二者之間的同步。運動控制卡產生的中斷信號通過內部電路傳送到 rtsi輸出引腳,目前rtsi輸出引腳主要有7個(rtsio-rtsl6)。rpsi輸出引腳可通過外部電纜與數據采集卡的rtsi引腳相連。采集卡的rtsi引腳也可以通過內部電路與其控制信號(見圖1)相連,從而實現二者之間的同步。
當運動控制卡控制電機運動到某個指定位置時將產生中斷信號,該中斷輸出信號可連接到運動控制卡的rtsi引腳,運動控制卡的rtsi引腳與數據采集卡的rtsi引腳相連。而在采集卡內,rtsi引腳信號作為系統(tǒng)的掃描時鐘,與采樣時鐘信號相連,因此運動控制卡每產生1個中斷信號,數據采集卡便進行1次通道掃描,讀取各個上采集的數據。該數據將存放在設置的緩沖區(qū)中。而一旦緩沖區(qū)中的數據已滿,則通過多線程的方式顯示到屏幕上。這樣就實現了運動控制和數據采集之間的同步。
4 編程實現
運動控制與數據采集的同步控制流程如圖2所示。

筆者采用labbbbbbbs/cvi軟件對rtsl總線、數據采集和運動控制進行編程,其函數庫由ni-daq和ni-motion提供。其中 ni-motion函數庫可以將運動控制與所有應用軟件相結合,并可通過數字觸發(fā)輸入或ni運動控制卡上的斷點輸出,使運動與測量硬件同步運行。rtsi 總線則將這些觸發(fā)與中斷信號連接到其他卡上,此總線功能由軟件設定。通過“measurement&automation explorer” (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]。
(2)設置運動參數和中斷信號模式函數
設置運動速度函數 flex_load_velocity(boardld,axisorvectorspace,velocity,bbbbbvector),其中ax- isorvectorspace為選擇軸編號或空間坐標;in-putvector參數對脫離主機運行的程序有用,一般設成oxff。
設置加速度/減速度函數 flex_load_acceleration(boardid,axisorvectorspace,accelerationtype,accel- eration,bbbbbvector),其中accelerationtype為選擇加載的方式,即加速度、減速度還是同時加載。
設置s-curve時間函數flex_load_velocity(boar- did,axisorvectorspace,scurvetime,bbbbbvector),其中scurvetime為從0加速到恒定速度或從恒定速度減速到0時的時間,單位為采樣時間的整數倍。范圍為l~32 767。
設置運動模式函數flex_set_op_mode(boardid,axisorvectorspace,operationmode)。
設置運動的目標位置flex_load_target_pos(boardid,axis,targetbbbbbbbb,bbbbbvector)。
設置產生中斷的方式函數flex_config- ure_breakpoint(boardid,axisorencoder,enablemode,bbbbbbonbreakpoint,operation),其中bbbbbbonbreak-point為中斷時電平的高低,operation為選擇單點中斷方式或緩沖中斷方式,由運動控制卡的信號決定。
(3)設置中斷信號產生位置和打開中斷函數
設置中斷信號產生位置函數 flix_load_pos_bp(boardid,axisorencoder,breakpointbbbbbbbb.bbbbbvector),其中breakpointbbbbbbbb為中斷位置(即采樣點)的起始位置,下一次產生中斷的位置為上一次產生中斷的位置加上采樣間距。打開中斷函數 flex_enable_breakpoint()。
(4)啟動電機運動函數
啟動電機運動函數flex_start(boardid,ax-isorvectorspace,axisorvsmap),其中axisorvsmap為可選擇單軸運動或多軸同時運動。
(5)檢查各種狀態(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可為各種測控系統(tǒng)應用提供基于硬件的高速同步能力,本文討論的這種基于rtsi的運動控制和數據采集之間的同步方法采用lab-bbbbbbs/cvi編程實現,可應用到在運動過程中實時采集數據的測控系統(tǒng)中,能獲得很好的測量精度。










