基于PXI 總線的水聲目標回波模擬模塊的設計
驅動程序設計的工作主要在步驟⑥、⑦,編寫驅動主要針對以下的幾個方面。驅動程序框架已經在添加資源時,創(chuàng)建了操作資源的KMemoryRange 類和KIoRange 類的對象,如將PCI 的Base1 空間設定為一個I/O 映射的空間,這個空間實際上就是CPLD 中寄存器的空間。要讀寫CPLD 中的寄存器訪問雙口存儲器就是訪問Base1 空間,這時S5920的PTNUM[2:0]會輸出001,可以使用它完成對映射到該空間雙口存儲器的片選使能。
驅動程序中需要創(chuàng)建對象 KIoRange m_IoPortRange1;
并在 OnStartDevice(KIrpI)函數中調用
status = m_IoPortRange1.Initialize(
pResListTranslated,
pResListRaw,1);
對該對象進行初始化。
在驅動的其它例程中就可以使用對象 m_IoPortRange1 調用該類的成員函數ind、inw、inb、outb、outw、outd 來完成對PCI 卡的Base1 空間的DWORD、WORD 和Byte 的輸入輸出操作。
3.2 應用軟件編寫
3.2.1 應用程序與驅動程序的通信方法
應用程序與驅動程序通信步驟為:應用程序首先使用 CreatFile 函數打開設備,然后使用WriteFile、ReadFile、DeviceIoControl 與驅動程序進行通信,最后在應用程序退出前使用CloseHandle 關閉設備。DeviceIoControl 使用不同的IOCTL 命令字來調用驅動中的不同程序,完成應用程序與驅動程序的數據交換,驅動程序根據訪問方式的不同,使用不同的方式獲取應用程序的輸入輸出緩沖區(qū)地址。
驅動程序與應用程序的通信:當驅動程序獲取了特定事件發(fā)生時,有時需要將這一信息通知給應用程序,主要的方法有2 種:一種是使用DeviceIoControl 進行異步通信,另一種是在應用程序中創(chuàng)建一個事件,并將該句柄傳給驅動程序,然后在應用層開啟一個線程等待這個事件,驅動程序會在事件發(fā)生的時候設置事件信號狀態(tài)來觸發(fā)應用程序。
3.2.2 與NI LabView 應用程序通信
仿真系統(tǒng)控制軟件由 NI 公司的LabView 軟件編制,為使本模塊能使用該軟件控制,必須編寫接口程序。接口程序實際上就是Windows 標準動態(tài)鏈接庫。鏈接庫可以由LabView軟件調用。
鏈接庫導出函數定義如下:
extern C __declspec(dllexport) HANDLE OpenDrv();
extern C __declspec(dllexport) void CloseDrv(HANDLE hDevice);
extern C __declspec(dllexport) void WriteData(HANDLE hDevice,
ULONG freq,double frequency1,double frequency2,
double frequency3,double frequency4,double delay,double atten);
由于在C++中HANDLE 型定義為void *,而LabView 中沒有指針型變量,用Labview調用該函數時可直接定義為ULONG 型。具體代碼略。
4 應用實例
某型多普勒聲吶發(fā)射信號頻率為 300kHz,發(fā)射脈寬最大60ms,信號采用重復相位編碼,編碼靈活可變,帶寬達到75kHz。為了完成對該聲納的檢測,需要對其回波進行模擬,考慮到回波會產生伸縮效應,本模塊的主要技術指標如下:
采樣頻率:10MHz~40MHz
存儲深度:1MB
D/A 頻率:10MHz~40MHz
該模塊已用于某型多普勒聲吶的檢測,可以模擬不同深度、不同相對速度的海底回波信號,工作良好,性能穩(wěn)定。
5 結束語
寬帶回波模擬模塊利用 PXI 技術,在Windows 環(huán)境下可以實現(xiàn)良好的人機界面,安裝方便,體積小,適用范圍比較廣泛。模擬模塊可以模擬不同延遲、不同尺度伸縮的寬帶點目標信號。系統(tǒng)已用于某型寬帶多普勒聲吶的陸上檢測,經過與水池調試、湖試數據對比,發(fā)現(xiàn)該模擬方法有效,結果與實際試驗基本一致。
評論