摘 要:介紹了一種CT掃描控制的,並給出了其在Windows平臺下的實現方法。實驗表明:該方法具有良好可靠性。
關鍵詞:工業CT 掃描 Windows裝置驅動
一、引言
工業機斷層掃描成像技術(Industrial Computerized Tomography),簡稱工業CT或ICT,是計算機技術與放射學相結合的一門新的成像技術。工業CT在無損檢測(NDT)與無損評價(NDE)領域得到了廣泛的。
CT掃描檢測模式已經經歷了三代掃描模式。第三代掃描方式的此掃描檢測模式的示意如圖1
M個分度旋
輻射源
探測器陣列
圖1 第三代掃描示意圖
相對旋轉一週,完成一個斷層掃描檢測,獲得由N×N個數據組成的資料集。本文將Windows下第三代CT掃描檢測模式控制系統的開發。
二、系統總體結構
本文以重慶大學ICT研究中心研製的某臥式工業CT機為例闡述工業CT機掃描運動控制。臥式工業CT機主要要求對下列三個運動軸的位置進行控制:
1.分度運動(工件轉動)M1
分度運動的定位精度到等效探測器空間分佈均勻性,直接影響圖象質量。可作正、反方向連續轉動。
2.插值運動M2
通過該方向的運動調整探測器的位移,以獲取更多的探測資料,提高解析度。
3.工件分層運動M3
分層運動用於選擇CT掃描斷層位置。
選用研華公司的PCL_839三軸運動控制卡控制這三個運動。PCL_839卡自身含有3個脈衝發生器,能夠執行同步及獨立控制三個軸的`運動任務。選用研華公司的三通道正交計數卡PCL_833獲取這三個運動位置反饋訊號。控制原理框圖如圖2。
圖2 CT掃描運動控制框圖
三、Window下CT掃描控制軟體的開發
1.應用程式與驅動程式的互動
Windows中提供了以下5個API函式,通過它們可以像訪問一個檔案那樣訪問裝置。
(1)CreateFile()開啟一個WDM裝置
(2)CloseHandle()關閉一個WDM裝置
(3)ReadFile()從裝置讀資料
(4)WriteFile()向裝置寫資料
(5)DeviceIoControl()裝置控制命令,讀、寫操作可一起完成。
應用程式首先必須通過CreateFile()開啟和建立到一個WDM裝置連線,才能對它進行各種I/O 操作。下面將給出研華PCL_839卡驅動程式的DriverEntry例程,設定了驅動程式的入口點和主要回調例程,以後核心會在合適的環境下呼叫這些例程處理。
DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{NTSTATUS status = STATUS_SUCCESS;
DriverObject->DriverExtension->AddDevice= PCL_839 AddDevice;
………….
Return status;
}
2.CT掃描過程控制
(1)CT掃描控制策略
為提高CT掃描效率及減少機器的損耗,採用CT掃描運動勻速方式,CT掃描速度的快慢根據採集的時間要求確定,在運動過程中到達一個採集點時,就給資料採集系統傳送一個採集訊號,通知採集系統準備讀取當前點的採集資料。CT掃描控制流程圖如下所示:
(2)CT掃描軟體的編寫
首先,使用者程式發出初始化電機的命令BYTE InitPCL_839 [] = //初始化命令碼
{…
PCL_839IO_WRITE, PARPORT_XX, 0xXX, //命令碼,操作地址,運算元
…
};
BYTE ChaZhiPCL_839 [] = //插值運動命令碼
{…
PCL_839IO_WRITE, PARPORT_XX, 0xXX, //命令碼,操作地址,運算元
…
};
初始化包括電機的操作模式,速度控制,及中斷使能等。
上面給出初始化、插值運動命令碼及在使用者態呼叫初始化命令碼的程式,在使用者態呼叫插值運動命令碼只需對DeviceIoControl修改即可,如下所示:
DeviceIoControl(hWdmIo, IOCTL_ PCL_839IO_RUN_CMDS,
ChaZhiPCL_839, ChaZhiPCL_839, // Input
rv, sizeof(rv), // Output
&BytesReturned, NULL)
其它操作如分度運動、分層運動與此類似,鑑於篇幅所限這裡不再敘述。
CT掃描任務的強實時性要求程式與驅動程式能進行實時通訊。為保證CT掃描系統的實時性,採用Win32事件對應用程式進行通訊。當發生中斷時,設定事件的觸發狀態。驅動程式建立命名的核心態事件,具體步驟如下。
①宣告核心態事件
KEVENT myEventToSingnal; //在PCL_839裝置擴充套件dx中宣告
②當核心事件發生時,設定事件為觸發態,實現WDM對應用程式的通訊
state=KeReadStateEvent(dx->myEventToSingnal);
設定事件為非觸發態
KeClearEvent(dx->myEventToSingnal);
③最後釋放事件控制代碼
ExFreePool((dx->myEventToSingnal);
由於在該軟體設計中,事件是由中斷髮出的。在進行上述處理之前,必須有一些中斷初始步驟設定。應用程式在等待一個事件發生後,就對相應的事件做出快速反映,以保證CT掃描控制的實時性。
四、結論
在Windows 2000平臺上對CT掃描控制系統進行開發,不僅能更好的實現CT機的掃描控制,縮短開發週期,而且可以提高整個控制系統的可靠性、穩定性。
[1] (美)Chris Cant 著.Windows WDM裝置驅動程式開發指南.機械工業出版社.
[2] 劉麗,劉紅霞.工業CT掃描臺高加速運動控制.鄭州航空工業管院學報(版).第23卷第3期2004年6月.
[3] 劉鴻,王平,俞偉.WDM驅動程式開發疑難.機應用.第23卷第6期2003年6月.
[4] 馬官營.楊明.吳曉琳Windows2000通用裝置驅動程式設計.計算機應用.第23卷2003年6月