郭天宇,代中華,張志濤,范新剛
?
基于LabVIEW平臺的信號實時采集與處理系統
郭天宇,代中華,張志濤,范新剛
(上海船舶電子設備研究所,上海 201108)
基于LabVIEW平臺的信號實時采集與處理系統,相對于傳統的基于Visual C++或VxWorks的系統,具有軟件開發和修改快捷、可快速實現數據可視化、與通用平臺或設備接口方便等優點,使科研人員能夠將主要精力集中于實驗而非編程。介紹了一種基于LabVIEW平臺的信號實時采集與處理系統。首先介紹了該系統的硬件組成和軟件設計方法,之后詳細介紹了將不同廠商的硬件板卡集成到LabVIEW平臺上,并由LabVIEW統一控制的方法——生成動態鏈接庫。該系統已成功應用于某型水聲裝備的效能評估試驗中。
LabVIEW平臺;實時采集與處理;動態鏈接庫
實時信號采集與處理系統是進行水聲試驗所必需的設備。它一般由主控、信號調理、模擬輸入、信號處理、模擬輸出、網絡通信等設備組成。國內外現有的實時信號采集與處理系統大多采用Windows&Visual C++或VxWorks作為軟件平臺,此類平臺的缺點是:編寫顯示和控制程序復雜,無法快速實現不同階段的數據可視化,無法快速修改程序以滿足不斷變化的試驗需求。
本文所介紹的系統,將主控、模擬輸入、信號處理、模擬輸出、網絡通信等不同類型、不同廠商的設備集成到LabVIEW平臺上。該平臺具有如下優點:開發顯示和控制程序快捷,能快速實現各個階段的數據可視化,可根據試驗需求快速完成程序的修改,提供大量的常用信號處理函數,能直接與大多數平臺或設備接口,如串口、網絡通信接口、Matlab等。該系統的信號處理部分,除了采用傳統的基于多片DSP的并行處理技術外,還增加了基于Matlab的集群并行處理技術,該處理方法是直接將Matlab信號處理程序分成若干程序片段,分配給多臺計算機的多個CPU核,使這些程序片段并行執行,從而省去了把Matlab程序轉換為C語言的中間環節,提高了信號處理程序的開發效率。
NI公司自己生產的硬件板卡,都會提供現成的可在LabVIEW下直接調用的驅動函數。但是對于非NI公司的硬件板卡,一般并不提供這種驅動函數,但是可以把硬件制造商提供的C語言驅動函數打包成動態鏈接庫(Dynamic Link Library, DLL),從而實現在LabVIEW下對這些驅動函數的調用。本系統所使用的硬件板卡均不是NI公司的,正是運用了上述方法使所有硬件設備能夠整合在LabVIEW平臺上,由LabVIEW統一控制。
本系統能夠使試驗研究人員從繁重的軟件編程工作中解脫出來,快速組建和修改軟件,把主要精力集中在對試驗結果的分析和信號處理算法的改進上。
本系統的硬件平臺基于CPCI總線,主要由6U CPCI總線機箱、CPCI總線主控板、PMC總線數據采集卡、CPCI總線多DSP信號處理板、PMC總線反射內存網卡等設備組成。
系統原理框圖如圖1所示,粗虛線框括起的部分為本系統的硬件組成,其中,細虛線框括起的部分為系統的擴展設備。
使用的硬件:
CPCI總線主控板:GE公司,Intel Core 2多處理器1.66 GHz and 2.0 GHz;
PMC總線數據采集卡:General Standards公司,18 bit,32通道,差分,1.0 MSPS;
CPCI總線多DSP信號處理板:BittWare公司,8片ADSP-TS201 TigerSHARC DSPs;
PMC總線反射內存網卡:GE公司,174 MB/s 采樣率。

圖1 系統原理圖
系統實物圖如圖2所示:

圖2 系統照片
本系統以NI公司的LabVIEW作為軟件平臺,所有硬件設備包括主控板、數據采集卡、數字信號處理板、反射內存網卡,都統一由LabVIEW控制,完成信號采集、信號處理、板卡間的通信、結果顯示、數據保存、網絡通信等功能。
LabVIEW是美國國家儀器公司開發的圖形化開發環境,同時它也是一種編程語言——G語言。它采用了比傳統的文本編程語言更高效的圖形化編程方式,主要特點如下:
(1) 提供了大量的用于顯示和控制的圖形控件,只須簡單編程即可快速實現數據可視化和數據分析;
(2) 提供了大量常用的信號處理函數;
(3) 提供了與動態鏈接庫(DLL)的接口。這樣就可以用LabVIEW控制那些僅提供C語言驅動函數的非NI公司定制的硬件設備;
(4) 能直接與大多數平臺或設備接口,如串口、網絡通信接口、Matlab等。
基于上述特點,使用LabVIEW作為系統軟件平臺,將會顯著提高系統開發效率和試驗效率。
在LabVIEW下控制硬件,對于NI公司自己生產的板卡,可以在LabVIEW下直接調用該公司提供的驅動函數;而對于非NI公司的板卡,廠商通常不提供這種函數,需要將其提供的C語言驅動函數轉化為動態鏈接庫(DLL),再由LabVIEW調用。以下以一個C語言的加法函數為例,介紹如何在Visual C++中生成動態鏈接庫文件,及如何在LabVIEW中調用動態鏈接庫中的函數。
2.2.1 生成動態鏈接庫
假設已經有了一個實現兩個浮點數相加的C語言函數,文件名add.c,程序如圖3所示:

圖3 C語言表達的add函數
打開VC,新建一個“Win32 Dynamic-Link Library”工程,命名為“add”,把add.c添加到工程中。
在函數體第一行添加關鍵字:
“_declspec(dllexport)”:
編譯生成動態鏈接庫“add.dll”,如圖4所示。

圖4 添加關鍵字后的add函數
2.2.2 調用動態鏈接庫
以LabVIEW8.2為例,在函數模板中選擇“Connectivity”中的“Libraries&Executables”,再選擇“Call Library Function Node”,將其放在框圖窗口中,見圖5、6。

圖5 框圖窗口中的“Call Library Function Node”界面

圖6 “Call Library Function Node”的顯示框
雙擊“Call Library Function Node”,在“Function”中的“Library name and path”中把動態鏈接庫文件添加進來,詳見圖7、8。

圖7 “Call Library Function Node”配置窗口

圖8 添加動態鏈接庫文件
在“Function name”中選擇要調用的函數,這里的動態鏈接庫文件中只有“add”一個函數,實際中可能不止一個,見圖9。

圖9 添加“add”函數
選擇“Parameters”,為“Call Library Function Node”添加函數參數,見圖10。
首先添加“add”函數的輸入參數a。單擊“+”號,在右邊的“Current parameter”區域做如下設置:

圖10 函數參數配置窗口
“Name”:添加參數名稱,這里是“a”;
“Type”:選擇“Numeric”,表示數值型;
“Data Type”:選擇“4-byte Single”,表示單精度浮點數;
“Pass”:這里參數不是指針,選擇“Value”,如果是指針,比如參數c,則選擇“Pointer to value”,見圖11。

圖11 配置函數參數“a”
參數b和c的添加與上面類似,所有參數添加完后,單擊“OK”。
在LabVIEW的框圖窗口中為“Call Library Function Node”添加輸入輸出控件,如圖12所示。

圖12 添加輸入輸出控件
在前面板的輸入控件a和b中分別輸入1和2,運行程序,輸出控件c會顯示3,如圖13所示。說明動態鏈接庫文件添加成功了。

圖13 前面板窗口
實際的C語言驅動函數的參數可能會有數組或結構體等不同的數據類型,相應的C語言函數體中函數參數的數據類型及在LabVIEW中對“Call Library Function Node”的參數配置方法會有所不同,具體可參考LabVIEW安裝目錄下的examples dlldata passing文件夾下的“Call Native Code.llb”和“CLF_Example.dsw”,里面涉及所有數據類型。
本系統的軟件采用多線程編程技術,創建了3個獨立的線程:數據采集線程、數據接收與顯示線程、DSP處理線程(雖然它屬于DSP內部運行的程序,但由于它與另外兩個線程獨立并行執行,這里也把它稱為“線程”)。在程序運行過程中,他們并行執行,保證了系統的實時性。線程的流程圖如圖14所示。

圖14 程序流程圖
LabVIEW的部分框圖程序如圖15、16所示。軟件主界面如圖17、18所示。

圖15 LabVIEW框圖程序1

圖16 LabVIEW框圖程序2
本系統有兩個擴展功能:DA輸出和Matlab并行處理,見圖1中的細虛線部分。
如果實驗需要把信號處理后的結果通過DA卡轉換為模擬信號發射出去,可以在系統中添加一塊DA卡,見圖1細虛線框“1”。然后按照前面介紹的添加動態鏈接庫的方法對DA卡進行控制。
目前,較為復雜的并行信號處理程序大多數是在多片DSP上運行,程序的開發步驟分為:設計信號處理算法、編寫Matlab程序、將Matlab程序轉換成DSP C語言并行程序。本系統的信號處理部分就是采用上述方法。該方法的缺點是需要把Matlab程序轉化為C程序移植到多片DSP中。如果程序較復雜,工作量很大。

圖17 軟件主界面1

圖18 軟件主界面2
下面介紹一種新的并行信號處理的實現方法,該方法的硬件平臺不是基于DSP,而是多核計算機。較新版本的Matlab如Matlab2009b,支持安裝Parallel Computing Toolbox,即并行計算工具箱。使用該工具箱,可以在多核計算機上直接開發基于Matlab的并行程序,其原理是將順序執行的程序拆分并分配到不同的CPU核上,使這些拆分后的程序片段在各個CPU核上并行運行,如果CPU核足夠多,就可以滿足程序的實時性要求。該方法的優點是用Matlab直接編寫并行程序,省去了向C語言移植的中間環節,可以極大地提高程序開發效率,缺點是需要單獨配置若干多核計算機,攜帶不夠方便。該方法可以作為本系統實現并行信號處理的另一種選擇,見圖1中細虛線框“2”。
本文提出了一種新的針對實時信號采集與處理系統的系統集成方法,即基于LabVIEW平臺,把不同廠商(非NI公司)的硬件板卡整合到LabVIEW平臺上、在LabVIEW統一控制下生成動態鏈接庫。此外,還介紹了一種實現并行處理程序的新方法:在多核計算機上開發基于Matlab的并行程序,該方法可以極大提高并行處理程序的開發效率。
在某型水聲裝備的湖上靜態半實物仿真試驗中,本文所介紹的系統作為核心分系統,與其他分系統配合,成功實現了對該裝備各項性能指標的測試和效果的評估。
[1] 阮奇幀. 一個NI工程師的十年編程經驗[M]. 北京: 北京航空航天大學出版社, 2009: 115-165.
RUAN Qizhen. Ten-year coding experience of a NI engineer[M]. Beijing: Beijing Aviation and Aerospace University Press, 2009: 115-165.
[2] 江建軍, 劉繼光. LabVIEW 程序設計教程[M]. 北京: 電子工業出版社, 2008: 207-212.
JIANG Jianjun, LIU Jiguang. The course of LabVIEW programming design[M]. Beijing: Electronic Industry Press, 2008: 207-212.
A real-time signal acquisition and processing system based on the platform of LabVIEW
GUO Tian-yu, DAI Zhong-hua, ZHANG Zhi-tao, FAN Xin-gang
(Shanghai Marine Electronic Equipment Research Institute, Shanghai 201108, China)
Compared with traditional systems which are based on Visual C++ or VxWorks, the real-time signal acquisition and processing system based on the platform of LabVIEW has many advantages in easy developing and modifying software, quick realizing data visualization and easy connecting with general-purpose platforms or equipments. This system can make the scientific researchers focus their energies on experiments rather than programming. A practical real-time signal acquisition and processing system based on the platform of LabVIEW is introduced in this paper. The hardware constitution and the software designing method about this system are firstly described, and then the method to generate a dynamic link library(DLL) is explained, which is used to integrate hardware cards from different manufacturers onto LabVIEW. This system has been successfully used in the experiment to evaluate the effectiveness of a certain kind of underwater acoustic equipment.
LabVIEW platform; real-time acquisition and processing; Dynamic Link Library(DLL)
TB556
A
1000-3630(2014)-06-0548-06
10.3969/j.issn1000-3630.2014.06.014
2013-08-13;
2013-11-04
郭天宇(1979-), 男, 黑龍江人, 碩士研究生, 研究方向為水聲對抗仿真。
郭天宇, E-mail: 493984463@qq.com