李宏宇 李茂月 劉獻(xiàn)禮
(哈爾濱理工大學(xué)機(jī)械動(dòng)力工程學(xué)院,黑龍江哈爾濱150080)
基于PC機(jī)的開(kāi)放式數(shù)控系統(tǒng),是由運(yùn)動(dòng)控制器、邏輯控制器、傳感器信息采集器配以應(yīng)用軟件的形式實(shí)現(xiàn)對(duì)機(jī)床的加工過(guò)程控制.開(kāi)放式數(shù)控系統(tǒng)的構(gòu)成是以工業(yè)控制計(jì)算機(jī)硬件體系和實(shí)時(shí)系統(tǒng)為基礎(chǔ),同時(shí)安裝擴(kuò)展相應(yīng)板卡及軟件.而不同的硬件設(shè)備在Windows系統(tǒng)下存在軟件版權(quán)許可、不兼容或地址沖突等問(wèn)題,導(dǎo)致開(kāi)放式數(shù)控系統(tǒng)在應(yīng)用上受到一定限制[1].為了解決開(kāi)放式數(shù)控系統(tǒng)中多硬件同時(shí)工作時(shí)的兼容匹配問(wèn)題,實(shí)現(xiàn)高質(zhì)量、高可靠的實(shí)時(shí)性要求,實(shí)現(xiàn)開(kāi)放式數(shù)控系統(tǒng)相應(yīng)的實(shí)時(shí)控制功能,利用Ardence公司開(kāi)發(fā)的基于Windows操作系統(tǒng)的實(shí)時(shí)解決方案RTX(real-time extension),通過(guò)在硬件抽象層增加實(shí)時(shí)擴(kuò)展來(lái)實(shí)現(xiàn)基于優(yōu)先級(jí)的實(shí)時(shí)任務(wù)管理,提升系統(tǒng)實(shí)時(shí)性能,增強(qiáng)實(shí)時(shí)控制能力.硬件抽象層是Windows系統(tǒng)提供的、可被用來(lái)進(jìn)行修改和擴(kuò)展的資源的一部分[2-3].開(kāi)放式數(shù)控系統(tǒng)在加工過(guò)程中完成對(duì)機(jī)床各種輸入信號(hào)的采集和對(duì)機(jī)床動(dòng)作進(jìn)行控制的輸出信號(hào)的發(fā)送,整個(gè)加工過(guò)程需要保證系統(tǒng)數(shù)據(jù)信號(hào)的高質(zhì)量、高可靠的實(shí)時(shí)輸入、輸出.由于完成對(duì)各種數(shù)字信號(hào)、直流信號(hào)的采集,伺服控制信號(hào)、開(kāi)關(guān)邏輯信號(hào)的輸出等工作的是各種特定功能的板卡,因此,需要重新開(kāi)發(fā)各種板卡在RTX環(huán)境下的驅(qū)動(dòng)程序.
本文以課題組自主開(kāi)發(fā)的開(kāi)放式數(shù)控系統(tǒng)中用于數(shù)據(jù)采集的Advantech PCI-1710高速數(shù)據(jù)采集卡和PCI-1758UDIO控制卡為例,研究了RTX實(shí)時(shí)系統(tǒng)環(huán)境下多PCI設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)方法和步驟,同時(shí)在開(kāi)放式數(shù)控系統(tǒng)實(shí)驗(yàn)運(yùn)動(dòng)平臺(tái)上通過(guò)對(duì)RTX環(huán)境下與Windows系統(tǒng)環(huán)境下的板卡控制功能的實(shí)時(shí)性能進(jìn)行的比較分析實(shí)驗(yàn),測(cè)試了RTX環(huán)境下PCI硬件設(shè)備驅(qū)動(dòng)程序的性能.
在開(kāi)放式數(shù)控系統(tǒng)體系結(jié)構(gòu)中,安裝有不同功能的PCI板卡的工控機(jī)作為主體,其系統(tǒng)結(jié)構(gòu)如圖1所示.工作過(guò)程為板卡通過(guò)在工控機(jī)上的PCI(peripheral component interconnect)卡槽與工控機(jī)相連,工控機(jī)電纜線與機(jī)床設(shè)備相連,通過(guò)電纜線采集輸入設(shè)備信號(hào)、輸出控制信號(hào).系統(tǒng)工作過(guò)程中,工控機(jī)及板卡通訊接口的初始化、自動(dòng)掃描通道、采集數(shù)據(jù)及發(fā)送控制信號(hào)等均通過(guò)上位機(jī)軟件編程實(shí)現(xiàn).
PCI-1710高速數(shù)據(jù)采集卡負(fù)責(zé)數(shù)字信號(hào)的采集和與傳感器、機(jī)床的通訊.PCI-1758UDIO控制卡以數(shù)字開(kāi)關(guān)量的形式對(duì)機(jī)床進(jìn)行邏輯功能控制.
RTX通過(guò)對(duì) Windows操作系統(tǒng)的擴(kuò)展,使Windows操作系統(tǒng)成為即時(shí)操作系統(tǒng)[4].不同功能的板卡工作在RTX實(shí)時(shí)系統(tǒng)環(huán)境下,為使板卡在RTX實(shí)時(shí)系統(tǒng)環(huán)境下工作,應(yīng)將板卡導(dǎo)入RTX環(huán)境,在RTX Properties控制面板的Hardware菜單中,分布選中PCI-1710高速數(shù)據(jù)采集卡和PCI-1758UDIO控制卡,右鍵單擊點(diǎn)擊Add RTX INF Support,再單擊apply以使RtxPnp.inf文件支持選擇的設(shè)備,如圖2所示.
然后,在Windows設(shè)備管理器中更新所選擇的設(shè)備,即將其轉(zhuǎn)換成一個(gè)RTX設(shè)備,如圖3所示.此操作將RTX實(shí)現(xiàn)為一套動(dòng)態(tài)與靜態(tài)庫(kù)的集合,實(shí)現(xiàn)Windows的內(nèi)核設(shè)備驅(qū)動(dòng)與實(shí)時(shí)硬件抽象層的擴(kuò)展.
驅(qū)動(dòng)程序是直接控制硬件設(shè)備進(jìn)行工作的軟件程序.對(duì)于不同的PCI總線設(shè)備,需要CPU通過(guò)某段范圍的地址訪問(wèn).因此開(kāi)發(fā)驅(qū)動(dòng)程序只需對(duì)不同板卡數(shù)據(jù)偏移寄存器進(jìn)行配置,獲得每個(gè)PCI板卡的映射基地址,然后根據(jù)PCI板卡硬件手冊(cè)中的寄存器偏移量和數(shù)據(jù)位置位方式對(duì)寄存器進(jìn)行讀寫[5-6].
開(kāi)發(fā)RTX環(huán)境下多PCI板卡驅(qū)動(dòng)程序首先要遍歷操作系統(tǒng)上所有的PCI板卡,獲取需要驅(qū)動(dòng)的板卡總線號(hào)、中斷向量以及映射基地址等信息.根據(jù)板卡制造商提供的硬件內(nèi)部寄存器資料及VendorID和DeviceID確定需要驅(qū)動(dòng)的具體設(shè)備.所有信息獲取到以后,以結(jié)構(gòu)體形式存儲(chǔ)不同板卡信息.遍歷板卡部分程序如下:
for(bus=0; flag; bus++)//總線循環(huán)
{
for(i=0; i<PCI_MAX_DEVICES && flag; i++) //設(shè)備循環(huán)
{SlotNumber.u.bits.DeviceNumber = i;
for(f=0; f<PCI_MAX_FUNCTION; f++) //功能循環(huán)
{SlotNumber.u.bits.FunctionNumber = f; bytesWritten =RtGet-
BusDataByOffset(
PCIConfiguration,
bus,
…
PCI_COMMON_HDR_LENGTH
);//獲取總線數(shù)據(jù)
if(PciData->VendorID&&PciData->DeviceID) //找到設(shè)備
{bus,InterruptLine…;
//得到板卡總線號(hào)和中斷向量等信息
}
通過(guò)遍歷總線上所有設(shè)備,獲得PCI-1710高速數(shù)據(jù)采集卡與PCI-1758UDIO控制卡的總線號(hào)、中斷向量以及映射基地址等信息.具體流程如圖4所示.
通過(guò)RtGetBusDataByOffset()接口函數(shù)對(duì)PCI總線上的設(shè)備進(jìn)行枚舉,獲得所要驅(qū)動(dòng)的PCI板卡設(shè)備信息后.利用以獲取不同板卡設(shè)備的總線號(hào)、中斷向量、映射基地址等信息的結(jié)構(gòu)體變量,程序可直接定位到相應(yīng)板卡進(jìn)行初始化配置、邏輯地址映射、板卡的采集、控制等I/O端口功能的啟動(dòng)、停止操作.板卡定位及使能部分程序如下:
PCI_SLOT_NUMBER SlotNumber;
PPCI_COMMON_CONFIG PciData;
//板卡信息結(jié)構(gòu)體
PciData->Command=PCI_ENABLE_IO_SPACE|PCI_ENABLE_
MEMORY_SPACE|PCI_ENABLE_BUS_MASTER;//使能寄存器
使用RtEnablePortIO()函數(shù),將函數(shù)參數(shù)設(shè)置為PCI-1710數(shù)據(jù)采集卡或PCI-1758UDIO控制卡存儲(chǔ)在板卡信息結(jié)構(gòu)體PciData中相應(yīng)的基地址,即可分別或同時(shí)使能相應(yīng)板卡I/O端口控制寄存器.
在使能相應(yīng)板卡I/O端口控制寄存器之后,就可以根據(jù)PCI板卡硬件手冊(cè)進(jìn)行端口信號(hào)的采集、發(fā)送操作.如表1所示,為PCI-1758UDIO控制卡數(shù)字輸出寄存器端口偏移地址及相應(yīng)位輸出規(guī)則.
其中0x08為PCI-1758UDIO控制卡數(shù)字輸出端口Port0-Port1偏移地址,0x0E為輸出端口Port6-Port7偏移地址.Base為板卡基地址.
根據(jù)PCI板卡硬件手冊(cè)確定I/O端口偏移地址,加上PciData中的PCI板卡基地址,利用RTX端口操作函數(shù)對(duì)板卡I/O端口進(jìn)行讀寫操作:
RtReadUchar(addrBase+0x08,0x200);//讀 Port1端口2位
addrbase是PCI-1758UDIO板卡I/O端口基地址,后面為操作寄存器的偏移地址.同樣,要實(shí)現(xiàn)PCI-1710高速數(shù)據(jù)采集卡功能,按照硬件手冊(cè)里相應(yīng)的寄存器地址說(shuō)明,利用RtWriteUchar(addrBase+0x,0x)對(duì)其進(jìn)行相應(yīng)的配置即可.操作完畢之后,關(guān)閉板卡,用RtDisablePortIO()函數(shù)關(guān)閉板卡I/O端口.
Windows系統(tǒng)環(huán)境與RTX系統(tǒng)環(huán)境的本質(zhì)區(qū)別是能否在預(yù)定的短時(shí)間內(nèi)得到正確的邏輯結(jié)果,要求系統(tǒng)具備多任務(wù)處理的實(shí)時(shí)相應(yīng)機(jī)制[7].利用課題組自主開(kāi)發(fā)的開(kāi)放式數(shù)控系統(tǒng)實(shí)驗(yàn)運(yùn)動(dòng)平臺(tái)結(jié)合RTX測(cè)試工具驗(yàn)證了PCI-1758UDIO控制板卡在RTX環(huán)境下驅(qū)動(dòng)程序的性能.
表1 PCI-1758UDIO數(shù)字輸出寄存器地址
開(kāi)放式數(shù)控系統(tǒng)實(shí)驗(yàn)運(yùn)動(dòng)平臺(tái)如圖5所示,系統(tǒng)硬件由安裝了Sercos通訊卡、PCI-1758UDIO板卡、PCI-1710高速數(shù)據(jù)采集卡的工業(yè)控制計(jì)算機(jī)與伺服運(yùn)動(dòng)機(jī)構(gòu)、邏輯功能實(shí)現(xiàn)機(jī)構(gòu)、傳感機(jī)構(gòu)等組成,其中,與Sercos通訊卡結(jié)合的旋轉(zhuǎn)伺服電動(dòng)機(jī)實(shí)現(xiàn)了X軸單自由度伺服運(yùn)動(dòng),與PCI-1758UDIO板卡及PCI-1710高速數(shù)據(jù)采集卡分別連接的推拉式電磁鐵、接近開(kāi)關(guān)實(shí)現(xiàn)了邏輯控制功能的輸出與數(shù)據(jù)采集功能的實(shí)現(xiàn).
如圖6所示.實(shí)驗(yàn)通過(guò)開(kāi)發(fā)的RTX環(huán)境下板卡驅(qū)動(dòng)程序,控制推拉式電磁鐵的伸縮,通過(guò)RTX測(cè)試工具,測(cè)試板卡驅(qū)動(dòng)程序性能.
為了動(dòng)態(tài)地標(biāo)識(shí)板卡運(yùn)行狀態(tài),采用MFC定時(shí)器與RTX定時(shí)器實(shí)時(shí)性能進(jìn)行對(duì)比,定時(shí)周期最大值設(shè)置為1 000 μs,通過(guò)開(kāi)放式數(shù)控系統(tǒng)實(shí)驗(yàn)平臺(tái)人機(jī)界面軟件,分別通過(guò)調(diào)用Windows下板卡驅(qū)動(dòng)以及已開(kāi)發(fā)的RTX環(huán)境下板卡驅(qū)動(dòng)程序,驅(qū)動(dòng)板卡工作,有序地進(jìn)行推拉式電磁鐵的伸縮運(yùn)動(dòng),利用RTX工具PerformanceView和PlatformEvaluator對(duì)推拉式電磁鐵的工作過(guò)程中驅(qū)動(dòng)程序執(zhí)行響應(yīng)進(jìn)行監(jiān)控,包括Windows與RTX在1 000 μs定時(shí)周期響應(yīng)時(shí)間比較,程序運(yùn)行時(shí)工控機(jī)CUP性能,RTX一周期內(nèi)最大持續(xù)執(zhí)行時(shí)間.如圖7所示,可以看出RTX運(yùn)行時(shí)對(duì)CPU的占用率小于10%,有效節(jié)省了CPU處理時(shí)間,提高了板卡控制精確度.
由執(zhí)行動(dòng)作過(guò)程監(jiān)控結(jié)果(如圖8所示)可以看出,Windows對(duì)1 000 μs定期周期響應(yīng)平均時(shí)間在接近1 000 μs處波動(dòng),雖然滿足控制要求,但是對(duì)于實(shí)際加工過(guò)程中對(duì)實(shí)時(shí)性的要求,在Windows環(huán)境下的板卡驅(qū)動(dòng)性能不能滿足高速高精度控制要求.而在RTX下板卡的驅(qū)動(dòng)性能卓越,穩(wěn)定在300 μs左右,這樣的實(shí)時(shí)性會(huì)給整個(gè)開(kāi)放式數(shù)控系統(tǒng)實(shí)時(shí)性提供保障.
本文以Advantech PCI-1710高速數(shù)據(jù)采集卡和PCI-1758UDIO控制卡為例,研究了RTX實(shí)時(shí)環(huán)境下PCI設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)方法和步驟.該方法的優(yōu)點(diǎn)在于:
(1)以實(shí)際應(yīng)用為背景,針對(duì)開(kāi)放式數(shù)控系統(tǒng)的實(shí)時(shí)性要求采用RTX實(shí)時(shí)系統(tǒng),具有實(shí)時(shí)性強(qiáng)、通用性強(qiáng)、擴(kuò)展性強(qiáng)的特點(diǎn).
(2)結(jié)合實(shí)際加工過(guò)程中對(duì)實(shí)時(shí)性的要求,給出了一種基于RTX的PCI硬件設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)方法、開(kāi)發(fā)過(guò)程.為解決Windows環(huán)境下硬件設(shè)備兼容性的問(wèn)題.提供了重要的參考方式.
(3)在開(kāi)放式數(shù)控系統(tǒng)實(shí)驗(yàn)運(yùn)動(dòng)平臺(tái)上對(duì)Windows系統(tǒng)環(huán)境下與RTX環(huán)境下的板卡驅(qū)動(dòng)程序的實(shí)時(shí)性能進(jìn)行比較分析,驗(yàn)證了PCI板卡驅(qū)動(dòng)的有效性和穩(wěn)定性.該RTX環(huán)境下的驅(qū)動(dòng)程序,充分發(fā)揮了PCI板卡和RTX實(shí)時(shí)系統(tǒng)的優(yōu)點(diǎn),節(jié)省了主處理器的占用時(shí)間,提高了I/O控制的精確度.為實(shí)現(xiàn)智能切削加工做出了基礎(chǔ)性研究工作.