尹玉振,朱昌平,鐘余澤,李旭斐
(河海大學常州市傳感網與環境感知重點實驗室江蘇省輸配電裝備技術重點實驗室,常州213022)
混合編程在鋼坯號識別中的應用?
尹玉振,朱昌平,鐘余澤,李旭斐
(河海大學常州市傳感網與環境感知重點實驗室江蘇省輸配電裝備技術重點實驗室,常州213022)
針對當前鋼廠鋼坯號自動識別要求,利用MATLAB算法開發效率高和VS2010編寫界面友好等特點,設計了一種鋼坯號在線自動識別系統。為了防止系統存儲、讀取圖片時發生沖突,減少MATLAB與VS2010的交互時間,提出一種基于MEX文件的混合編程方法,實現了MATLAB通過Windows消息響應機制向VS2010發送消息和VS2010通過Socket通信向MATLAB發送消息等功能,大大提高了系統的工作效率,同時也提高了鋼坯號識別的正確率。
鋼坯號;在線識別;混合編程;交互時間;Windows消息響應;Socket通信
隨著鋼鐵工業及其信息化技術的迅速發展,對鋼鐵產品從生產到成品投放市場全過程的在線檢測、產品質量跟蹤以及永久性質量追溯的要求越來越高。鋼鐵廠生產鋼坯的過程中,會在鋼坯的一側噴上特定的數字序列等符號以表示特定的批次,根據不同的批次規定不同的生產工序,但是生產過程中不可避免會發生裝料錯誤,使得其他批次的鋼坯混入生產線中,從而造成產品質量瑕疵[1]。目前一般通過人工方式校準鋼坯號,但鋼鐵廠環境復雜,工作環境惡劣,工人在長時間工作后易疲勞,工作效率底,漏檢誤檢多,難以滿足現代化生產的需要,因此設計一種鋼坯號在線自動識別系統尤為重要。
VS2010是Windows系統平臺上較為有效的應用程序開發系統,具有開發程序文件小、界面友好、執行速度快、實時性好和容易維護等優點,已成為操作系統設備驅動程序和系統級平臺類軟件的最佳開發工具。VS2010開發的圖像處理軟件,C/C++語言中只包含基本的數學函數庫,如果要實現圖像處理中的復雜數值運算和圖形圖像顯示時,需要編寫大量代碼[2],對一名非專業的程序員,這將耗費大量的時間和精力。而MATLAB目前已成為國際上公認的最優秀的數值計算和仿真分析軟件,其具有符號計算、數字和文字統一處理、離線和在線計算等功能,具有較強的繪圖、計算和可視化功能,具有很強的開放性等特點。但它本質上是一種解釋性語言,在進行大規模數值計算時,執行效率較為低下,利用其進行應用程序開發存在局限性。利用MATLAB算法開發效率高和VS2010編寫界面友好等特點,將MATLAB和VS2010結合起來,必將大大提高軟件開發的效率,縮短開發周期。為了防止MATLAB在讀取圖片時相機正好存儲圖片沖突的發生,同時提高系統的實時性,減少MATLAB與VS2010的交互時間,下面提出一種基于MEX文件的混合編程方法。
所設計的鋼坯號在線自動識別系統框圖如圖1所示,MATLAB向VS2010發送命令暫停相機進而讀取圖片,讀取完成后再發送開啟相機命令,即完成一次圖片的讀取。同時VS2010通過TCP通信協議向服務器發送請求命令,將接收到的標準鋼坯號發送給MATLAB供其與識別鋼坯號進行比對,最后MATLAB將比對結果反饋給VS2010。

圖1 鋼坯號在線自動識別系統框圖
鋼坯號在線自動識別系統在工作過程中相機存儲圖片和MATLAB讀取圖片時會發生沖突,阻斷系統的正常運行。為了防止MATLAB在讀取圖片時相機正好存儲圖片沖突的發生,同時為了提高系統的實時性,使用MATLAB下的MEX文件實現MATLAB對C++代碼的調用,減少MATLAB與VS2010的交互時間。MEX文件是對標準的C++文件進行編譯所得,其可以使用C++中所有的函數,使用MEX文件時,需要在C++文件中加入頭文件“mex.h”。一個MEX程序實際為一個DLL文件,它的輸出函數是mexFunction(),即為MATLAB與VS2010的接口函數,其格式如表1所示。
在MATLAB調用MEX文件過程中,mexFunction()函數會首先被執行,在此函數中,可以對輸入參數進行處理,并調用所需的C++函數,mexFunction()函數沒有返回值,執行完成后使用輸出參數返回給MATLAB[3-4]。通過MEX文件混合編程,可以實現MATLAB對C++語言的調用,減少MATLAB與VS2010的交互時間。

表1 mexFunction()函數定義格式
MATLAB編譯器使用mex-setup指令可以將VS2010生成的.cpp文件編譯成MEX文件。在Windows中,MEX文件類型為mexw32,MATLAB就可以像調用M函數那樣調用MEX文件,每次修改mexFunction()所在的.cpp文件后,重新編譯生成解決方案前都需要在MATLAB工程下執行clear命令一次。基于MEX文件的混合編程為MATLAB和VS2010提供了交互工具,可以使MATLAB對Windows消息編程有良好的支持,本文通過Windows消息響應機制和Socket通信實現數據發送。
3.1 MATLAB向VS2010發送消息
因為Windows中的消息不只是硬件產生,也可由系統中的一個進程產生。當一個事件發生時,Windows先將輸入的消息放入系統消息隊列中,然后再將輸入的消息拷貝到相應的應用程序隊列中,應用程序中的消息循環從它的消息隊列中檢索每一個消息并發送到相應的窗口函數中。Windows消息中的WM_COPYDATA消息是所有消息中比較特別的一個,對于Windows消息,其原型如下:

由于time和pt由系統給出,因此,對于普通的Windows消息來說,可以用來傳遞信息的僅有wParam和lParam 2個32位信息。MATLAB端使用MEX文件調用基本的WinAPI函數,實現WM_COPYDATA消息的發送。接收方在數據復制完成前不返回,這樣發送方就不可能刪除和修改數據,發送函數的原型如下:
SendMessage(WM_COPYDATA,wParam,lParam)
其中wParam設置為包含數據的窗口句柄,lParam指向一個COPYDATASTRUCT結構,其定義為:

VS2010端在Windows窗口的默認消息處理函數中增加對WM_COPYDATA消息的響應。Windows在處理WM_COPYDATA消息時,會將發送消息進程中lpData所指向內存中的數據復制到目標進程的內存中,使得WM_COPYDATA消息可以在進程之間傳遞大量數據[4-5]。
3.2 VS2010向MATLAB發送消息
由于MATLAB所擁有的消息隊列是由MATLAB自行管理的,而且MATLAB并沒有提供可以管理、提取消息隊列中消息的函數,所以從MATLAB的消息隊列中得到所發送的WM_COPYDATA消息是無法實現的。為了滿足工程需要同時減少系統的復雜度,我們使MATLAB調用C++代碼編寫的服務器端MEX文件,實現VS2010通過Socket通信向MATLAB發送消息。
TCP網絡環境下的應用程序通過網絡應用編程界面(Socket,即套接字)實現,一個Socket對應于通信的一端,工作流程如圖2所示。

圖2 Socket工作流程
VS2010作為客戶端在創建工程時,利用APPWIZARD創建MFC EXE。選中Windows Socket項,這樣創建的項目就已經支持Socket,并默認初始化。如果要在已有的項目中添加Socket支持,須在stdefx.h文件中包含頭文件WINSOCK.H(#include winsock.h),并在應用程序類的成員函數:“::InitInstance()”中添加如下初始化套接字代碼:

VS2010客戶端與MATLAB服務器端都首先使用WSAStartup()函數來檢查處理機系統中是否裝有Windows Socket的實現庫,然后使用socket()函數來給網絡程序創建一個套接字。在VS2010客戶端創建好套接字之后,調用connect()函數提出一個與服務器建立連接的請求,在MATLAB服務器端套接字創建好后,通過bind()函數把一個套接字口與一個主機地址和端口聯系起來,然后調用listen()函數指示套接字進入監聽連接請求的狀態。服務器進入監聽狀態后,用accept()函數接收來自VS2010客戶端connect()函數發出的連接請求。最后VS2010客戶端和MATLAB服務器端都通過send()函數和recv()函數分別實現數據的發送和接收。一個套接字不再使用時一定要及時關閉,以釋放與其關聯的所有資源,即使用closesocket()函數[7-8]。
將所提出的基于MEX文件的混合編程方法應用到所設計的鋼坯號在線自動識別系統,系統現場安裝如圖3所示。考慮到鋼坯溫度高和采集視野等問題,主要設備和鋼坯保持了一定距離。系統主要由光源、攝像頭和工業控制計算機等部分組成。其中攝像頭選用的是Manta系列相機,鏡頭前加有透明防護罩和冷卻裝置,以防止灰塵污染等問題。

圖3 系統現場安裝圖
對系統正常工作時MATLAB向VS2010發送消息的交互時間進行測量,為了驗證基于MEX文件混合編程交互的實時性,針對TXT文件交互方法進行了比較,具體實驗測量數據如表2所示。通過測量發現采用混合編程方法MATLAB向VS2010發送相機暫停、讀取圖片和啟動相機的時間主要由讀取圖片的時間決定,發送消息的時間幾乎可以忽略不計,且較TXT文件交互方式相比實時性得到大大提高,同時也驗證了基于MEX文件混合編程方法的可行性。

表2 MATLAB向VS2010發送消息
提出的基于MEX文件的混合編程方法,有效利用兩種不同語言的優點進行混合編程。通過工程實際應用,驗證了MATLAB通過Windows消息響應機制向VS2010發送消息和VS2010通過Socket通信向MATLAB發送消息的可行性和有效性,使鋼坯號在線自動識別系統的工作效率得到大大提高。
[1] 吳迪,焦東升,張筱,等.基于SVM的鋼坯號自動識別算法[J].開發應用,2011,27(10):49-51.
WU Di,JIAO Dongsheng,ZHANG Xiao.The steel billet number automatic recognition based on SVM algorithm[J].Microcomputer Application,2011,27(10):49-51.
[2] 董建婷,王杰.VC++調用Matlab實現圖像處理的3種常用方法比較[J].現代電子技術,2012,35(16):46-49.
DONG Jianting,WANG Jie.Comparison of three image processing methods realized by VC++calling Matlab[J].Modern Electronics Technique,2012,35(16):46-49.
[3] 來爽,慕德俊.基于VC和MATLAB的PID仿真軟件實現[J].計算機工程與應用,2009,45(3):81-83.
LAIShang,MU Dejun.PID simulation software based VC and MATLAB[J].Computer Engineering and Applications,2009,45(3):81-83.
[4] 陶硯蘊,單鳴雷,徐萃華.MATLAB&VC++混合編程在HIFU聲場仿真中的應用[J].計算機工程與應用,2007,43(2):224-226.
TAO Yanyun,SHAN Minglei,XU Cuihua.Application of combined programming with MATLAB and VC++in HIFU sound-field simulation[J].Computer Engineering and Applications,2007,43(2):224-226.
[5] 陳少成.基于Windows消息的Matlab與C++實時通訊方法[J].工業控制計算機,2010,23(5):88-89.
CHEN Shaocheng.Real-Time Communication Between Matlab and C++Based on Windows Message[J].Industrial Control Computer,2010,23(5):88-89.
[6] Man QingMao.VC++and MATLAB-Based Interactive Filter Design[J].Applied Mechanics and Materials,2011,66:1972-1975.
[7] 張允剛,劉常春,劉偉,等.基于Socket和多線程的遠程監控系統[J].控制工程,2006,13(2):175-177.
ZHANG Yungang,LIU Changchun,LIU Wei.Remote Monitoring and Control System Based on Socket and Multithread[J].Control Engineering of China,2006,13(2):175-177.
[8] 鄭阿奇.Visual C++網絡編程教程(Visual Studio 2010平臺)[M].北京:電子工業出版社:75-80.
ZHENG Aqi.Visual C++Network Programming Tutorial(Visual Studio 2010 platform)[M].Electronic Industry Press:75-80.
Application of Hybrid Programm ing in Billet Number Recognition
Yin Yuzhen,Zhu Changping,Zhong Yuze,Li Xufei
(Changzhou Key Laboratory of Sensor Networks and Environmental Sensing,Jiangsu Key Laboratory of Power Transmission and Distribution Equipment Technology,Hohai University,Changzhou 213022,China)
According to the automation identification requirements of steel billet number in steelmill currently,a system,with high efficiency MATLAB development algorithm and VS2010 friendly writing user features,is designed for steel billetnumbers automatic identification.In order to prevent the conflict caused during system memory and picture reading and reduce the interaction time between MATLAB and VS2010,a hybrid programmingmethod based on MEX file is proposed to realize the functions ofmessage sending such as MATLAB to VS2010 byWindowsmessage responsemechanism and VS2010 to MATLAB by Socket communications.The efficiency of the system and the accuracy of the steel billet number online identification are greatly improved.
Steel billet number;On-line identification;Hybrid programming;Interaction time;Windowsmessage response;Socket communications
10.3969/j.issn.1002-2279.2015.05.013
TP391.7
B
1002-2279(2015)05-0050-04
國家自然科學基金項目(11274092、61401146);江蘇省自然科學基金(BK20130238)
尹玉振(1989-),男,山東聊城人,碩士研究生,主研方向:通信與信息系統。
朱昌平(1956-),男,湖北荊門人,教授,博士,博導,江蘇省教學名師,主要從事通信電路與聲學技術的研究。
2015-03-09