基于多語(yǔ)言混合編程的任意波形發(fā)生器軟件系統設計*
*本論文受到國家重點(diǎn)研發(fā)計劃項目(項目編號:2017YFF0106600)以及裝備預研領(lǐng)域基金重點(diǎn)項目(項目編號:61400030201)的資助。
本文引用地址:http://dyxdggzs.com/article/202204/433253.htm作者簡(jiǎn)介:滕友偉(1987—),男,碩士,工程師,研究方向:信號處理。
0 引言
電子信息技術(shù)的高速發(fā)展帶來(lái)了被測試對象種類(lèi)的不斷豐富和測試需求的不斷提高。具體表現在:海、陸、空、天多層次;部署的高密度、多頻譜、大帶寬;多種參數組合變化、多種工作體制;系統集成化與專(zhuān)用芯片協(xié)同發(fā)展;空間電磁環(huán)境日益復雜;以及對抗手段的不斷加強。任意波形發(fā)生器[1-2]不僅可以產(chǎn)生常規激勵信號,還可以通過(guò)擴展功能插件實(shí)現外部計算單元和任意波形發(fā)生器硬件平臺的無(wú)縫對接,真正實(shí)現從信號產(chǎn)生、數據處理到信號輸出的全過(guò)程。
其中,波形計算單元即多種信號模擬插件,實(shí)現多種信號產(chǎn)生功能。波形文件具有統一的文件結構,實(shí)現波形數據的存儲和讀取。
1 軟件系統組成
本任意波形發(fā)生器軟件結構如圖2所示,主要包括應用層、功能模塊層、驅動(dòng)層和板級電路控制層。其中應用層為本軟件提供的用戶(hù)操作界面;功能模塊層為依據任意波形發(fā)生器功能劃分和硬件模塊,抽象出的采用模塊化設計的類(lèi)封裝;驅動(dòng)層是承上啟下的一層,實(shí)現PCIE、ISA等多種總線(xiàn)驅動(dòng)控制和數據傳輸;板級控制層為各功能板卡的控制接口,接受來(lái)自驅動(dòng)層的控制命令、波形數據,并反饋各電路的工作狀態(tài)。
采用上述4層軟件結構設計,不僅在物理結構將任意波形發(fā)生器邏輯做了清楚劃分,也為各功能模塊提供了自我保護和異常處理的有效途徑。
2 開(kāi)發(fā)語(yǔ)言及工具
應用層采用Visual Studio 2013平臺中基于C#語(yǔ)言的WPF用戶(hù)界面框架設計[3]。WPF作為微軟推出的新一代用戶(hù)界面框架,提供了統一的編程模型、語(yǔ)言和框架,真正做到了分離界面設計和邏輯設計,便于協(xié)同開(kāi)發(fā)。功能模塊層中的數據產(chǎn)生、任意波形生成及文件管理采用MATLAB R2014a開(kāi)發(fā)平臺,MATLAB軟件開(kāi)發(fā)平臺以其豐富的函數庫、矩陣計算、數值分析,為信號、數據產(chǎn)生開(kāi)發(fā)提供極大便利[4]。用戶(hù)層和功能模塊層采用XAML文件作為接口,這樣既實(shí)現分層隔離,也為方便錯誤的查找和定位。
XAML接口文件提供了1 個(gè)信號產(chǎn)生所需的MATLAB模塊傳入參數,如圖3所示的是一款噪聲信號接口文件,其中waveflag表示信號類(lèi)型,sampleRate表示該信號的采樣速率等等。利用MLAPP.dll程序集實(shí)現,軟件啟動(dòng)時(shí)執行Matlab引擎初始化并封裝為類(lèi),并提供執行接口。
引擎初始化方法如下:
private MLApp.MLApp _matlab;
private void Init()
{
Type ma t l abAppType = S y s t em.Type.
GetTypeFromProgID(“Matlab.Application”);
_ m a t l a b = S y s t e m . A c t i v a t o r .
CreateInstance(matlabAppType) as MLApp.MLApp;
Debug.Assert(_matlab != null);
_matlab.Visible = 0;
}
接口設計如下:
public void Execute(string matlabFolder, string
command)
{
matlabFolder = “ cd( ‘ ” + matlabFolder
+ “’)”;
_matlab.Execute(matlabFolder);
Thread.Sleep(200);
_matlab.Execute(“clear all”);
_matlab.Execute(“close all”);
_matlab.Execute(“clc”);
Thread.Sleep(1000);
_matlab.Execute(command);
}
驅動(dòng)層采用Visual Studio 6.0和WinDriver10.0聯(lián)合開(kāi)發(fā)設計[5-6],其中WinDriver為美國風(fēng)河公司提供的專(zhuān)業(yè)驅動(dòng)開(kāi)發(fā)工具,具有豐富的底層驅動(dòng)庫和設計樣例。Visual Studio 6.0開(kāi)發(fā)工具采用高效的C/C++語(yǔ)言程序設計基礎算法,并將驅動(dòng)層封裝為標準DLL庫以供調用。板級控制層設計采用C/C++程序設計語(yǔ)言,實(shí)現對實(shí)際電路及板卡的控制,響應驅動(dòng)層下發(fā)的控制命令,將存儲功能層產(chǎn)生的波形數據存入DDR高速存儲陣列等。
3 信號生成流程
信號生成流程如圖4所示,第1步:用戶(hù)在操作軟件界面配置信號參數;第2步:MATLAB讀取接口文件并轉換為相應指令執行,生成波形數據;第3步:軟件將生成的波形數據以文件的形式存儲到硬盤(pán);第4步:顯示控件讀取波形文件并顯示數據;第5步:輸出開(kāi)關(guān)打開(kāi),儀器輸出信號。
圖5所示的是任意波形發(fā)生器生成數字調制ASK型信號并輸出測試的實(shí)際場(chǎng)景。對比顯示控件波形和示波器實(shí)測結果即可驗證正確性。
4 結語(yǔ)
目前任意波形發(fā)生器的發(fā)展方向有:①硬件設計平臺化,其主要性能依托于高速DAC芯片性能和寬帶放大芯片發(fā)展;②軟件設計采用模塊化插件設計,要求兼容多種開(kāi)發(fā)語(yǔ)言和工具,方便升級、擴展和用戶(hù)二次開(kāi)發(fā)。因此多采用多層次軟件設計,并減少互關(guān)聯(lián)。
圖5 ASK調制信號產(chǎn)生及輸出
參考文獻:
[1] 張學(xué)峰,胡長(cháng)江.功能各異的各種任意波形發(fā)生器[J].國外電子測量技術(shù),2000(4):17-18.
[2] 劉豪.基于DDS的任意波形發(fā)生器的設計與實(shí)現[D].廣州:華南師范大學(xué),2010.
[3] 王鵬,崔靜.新一代界面技術(shù)WPF的架構及應用[J].成都紡織高等專(zhuān)科學(xué)校學(xué)報,2011(1):18-20.
[4] 李志明.VC++與Matlab的混合編程[J].遙測遙控,1999(11):71-74.
[5] WinDriver PCI/ISA/CardBus V9.01 User’s Manual[Z]. Jungo Ltd.,2008.
[6] 武安河.Windows 2000/XP WDM設備驅動(dòng)程序開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2003.
(本文來(lái)源于《電子產(chǎn)品世界》雜志2020年9月期)
評論