王 浩,江衛華,余睿民,李涵嫣
(1.武漢工程大學電氣信息學院,湖北 武漢 430205;2.北京服裝學院信息工程學院,北京 100029)
軌跡控制,又稱輪廓控制,主要應用于傳統的數控系統、切割系統的運動輪廓控制[1],如氣動標記機、銑床、切割機等.目前連續軌跡控制系統多采用單板機控制[2],其操作復雜、程序修改不便.隨著市場全球化的發展,市場對適合中小批量加工、具有良好柔性和多功能的制造系統的需求已超過對大型單一功能的制造系統的需求[3].本文介紹一種基于Windows XP平臺并口的三軸軌跡控制系統.
通過計算機的控制,步進電機的脈沖、方向信號和刀具的控制信號經并口向下位機接口模塊發送.下位機接口模塊對信號進行抗干擾處理后,將脈沖和方向信號發送至步進電機驅動器,同時將控制信號發送至輔助設備.系統采用三軸控制.其中X、Y軸電機帶動刀具在水平面運動,Z軸在豎直方向運動.三軸到位信號通過并口送回上位機,上位機捕獲到位信號后及時動作.系統組成框圖如圖1所示.

圖1 接口模塊框圖
X、Y和Z軸到位信號的檢測由接近開關完成.X軸到位信號的處理電路圖如圖2所示.
以X軸為例,圖2中IN與接近開關的輸出端連接,OUT與光耦的輸入端連接.電機回原點時,接近開關的信號線為高電平,開關管的基極為高電平,開關管導通,其集電極被拉低為低電平,該低電平信號經阻容濾波后送至光耦輸入端,光耦輸出端與并口的狀態端口連接,計算機讀取到位信號.根據計算機狀態端口的TTL電平標準,反相器輸出端接上10 kΩ的上拉電阻.Y軸和Z軸類似.此外,下位機接口模塊還包含電平轉換電路,分別為步進電機驅動器、接近開關和反相器提供+36 V、+12 V和+5 V電壓.

圖2 到位信號處理電路
并行接口,簡稱并口,又稱LPT接口,是采用并行通信協議的擴展接口.一般用于連接打印機、掃描儀等外部設備.其工作模式包括標準并行口(SPP)模式、雙向模式、增強型半行接口(EPP)模式、擴展并行接口(ECP)模式等.以標準SPP模式為例,它使用三個8位的端口寄存器,即數據寄存器、狀態寄存器和控制寄存器.計算機就是通過對這些寄存器的讀寫操作訪問并口.該系統的并口工作在雙向模式下.
與Windows 9X環境不同,在Windows NT環境下,應用程序不能使用Win 32 API函數直接操作端口,為此微軟提出了一種全新的Windows驅動程序模型,即Windows Driver Model(WDM).WDM旨在通過提供一種靈活的方式來簡化驅動程序的開發,在實現對新硬件支持的基礎上減少并降低所必須開發的驅動程序的數量和復雜性[4].它實現了模塊化、分層次類型的驅動程序結構.本系統驅動的主要例程包括:DefaultPnpHander、DriverEntry、HandleRemoveDevice、HandleStartDevice、AddDevice、DeviceIOControl、DispatchRoutine、Pnp、Unload等部分.
應用程序與底層硬件的通信可分解為應用程序與驅動程序的通信和驅動程序與底層硬件的通信.應用程序與驅動程序通信前必需先建立兩者之間的聯系,即應用程序獲取驅動程序的設備句柄,如圖3所示[5].
驅動程序創建設備時,調用IoRegisterDeviceInterface(函數)為設備創建設備鏈接,該設備鏈接暴露給應用程序.應用程序通過設備鏈接獲取設備信息,并調用Win 32子系統中的CreatFile API.CreatFile函數調用Ntdll.dll庫中的NtCreatFile函數.NtCreatFile穿過用戶模式和內核模式之間的界面,到達內核模式,并調用同名的系統服務NtCreateFile.NtCreateFile系統服務通過I/O管理器創建請求包(IRP_MJ_CREAT)并傳輸至設備的驅動程序,驅動程序處理該IRP并返回.CreateFile調用成功后的返回值為設備句柄.在調用其它Win32函數訪問該設備時,只需將該句柄作為函數的設備名參數可實現對設備驅動程序的操作,即完成應用程序與驅動程序的通信.

圖3 應用程序獲取設備句柄
應用程序獲取設備句柄后,對端口的讀寫操作通過調用端口操作函數(DeviceIOControl)實現.調用該函數前需用CTL_CODE宏定義來定義操作碼(IOCTL),定義時需指定操作模式,如定義采用緩沖區方式讀端口的IOCTL碼為:
#define IOCTL_READ_PORT CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 0X800, METHOD_BUFFERED, FILE_ANY_ACCESS)
為使Windows操作系統易于移植到不同的硬件平臺的上,微軟提出并使用了硬件抽象層(HAL).設備驅動程序可直接調用硬件抽象層提供的函數實現對底層硬件的操作,通過修改抽象層程序可實現多硬件平臺移植[6].如對于32位的X86系列CPU中的Windows,驅動程序調用硬件抽象層的讀端口函數(READ_PORT_UCHAR)和寫端口函數(WRITE_PORT_UCHAR)可完成對端口數據的八位讀寫操作,即完成驅動程序與底層數據的通信.
以讀取并口八位數據為例,函數調用如圖4所示[5].

圖4 應用程序讀端口
處理過程為:應用程序調用DeviceIOControl函數后,相應控制碼和請求同時傳遞給驅動程序,且I/O管理器會創建一個IRP_MJ_DEVICE_CONTROL類型的IRP,用戶提供的輸入緩沖區的內容被復制到內核模式中,其地址由IRP的AssociatedIrp.SystemBuffer子域記錄.然后驅動程序會將創建的IRP轉發至DeviceIOControl派遣函數中;派遣函數讀取IRP的內存地址,獲得輸入緩沖區數據及IOCTL_READ_PORT操作碼,并調用READ_PORT_UCHAR函數;READ_PORT_UCHAR函數從端口讀取八位數據,并將該數據存放在IRP提供的內存地址中;在IRP返回時,這段內存地址的數據被復制到DeviceIOControl提供的輸出緩沖區中;應用程序獲取緩沖區中的數據,端口完成讀操作.其中,用戶層與內核層之間的數據復制由操作系統完成.
系統應用程序的開發采用模塊化程序設計方法,即將整個軟件逐步細分為樹形結構,直至所有子過程都能用編程語言直接實現[7].函數之間的參數采用指針傳遞.整個并口驅動程序為子函數,供應用程序調用.
軌跡控制系統的核心問題是如何控制刀具的運動.下位機接口模塊雖為三軸設計,但設計軟件時,Z軸并不參與插補.它主要用于銑床中的出刀和回刀操作.在應用于氣動標記機系統時,將Z軸出刀位移設置為零即可實現兩軸單平面運動.因此該軌跡控制主要針對平面曲線的運動軌跡.而平面曲線的軌跡需要兩個坐標軸的協調運動才能形成.在兩軸聯動的數控機床中廣泛應用逐點比較法.系統采用逐點比較法的直線插補方式.在步進電機驅動器高細分度的配合下,系統輪廓的加工精度能得到有效保證.該軌跡控制系統在氣動標記機系統中的應用效果圖如圖5所示.

圖5 在氣動標記機系統中的應用
整個系統采用模塊化設計方法,且同時適用于多種小型數控機床.目前該系統已在氣動標記機和銑床上使用.實踐證明,該系統具有許多優點:①數據處理能力強、速度快;②抗外界干擾能力強、可在惡劣環境下作業;③有效節約產品成本、提高系統的可靠性;④可加工任意字符、商標、圖形和圖案等,操作和維護方便.
參考文獻:
[1]莊文波.連續軌跡運動控制系統的研究與應用[D].哈爾濱:哈爾濱工程大學,2008.
[2]陳慶,熊瑞平,袁中凡,等.基于PC機并口的線切割數控系統[J].機械與電子,2006(11):44-46.
[3]蔡曉雯.基于MCX314的運動控制器的研究與設計[D].湘潭:湘潭大學,2008.
[4]楊珺.基于WIN2000下的WDM驅動程序探究[D].天津:天津大學,2005.
[5]張帆,史彩成.Windows驅動開發技術詳解[M].北京:電子工業出版社,2008.
[6]冉全,陳為,趙世平.事件馬飛動編程機制在嵌入式GUI系統中的實現[J].武漢工程大學學報,2009,31(7):84-87.
[7]江衛華.基于PC計算機并行口氣動標記機系統的設計[J].電氣傳動自動化,2002,24(1):44-46.