混合编程在钢坯号识别中的应用❋

2015-08-07 12:11尹玉振朱昌平钟余泽李旭斐
微处理机 2015年5期
关键词:钢坯自动识别调用

尹玉振,朱昌平,钟余泽,李旭斐

(河海大学常州市传感网与环境感知重点实验室江苏省输配电装备技术重点实验室,常州213022)

混合编程在钢坯号识别中的应用❋

尹玉振,朱昌平,钟余泽,李旭斐

(河海大学常州市传感网与环境感知重点实验室江苏省输配电装备技术重点实验室,常州213022)

针对当前钢厂钢坯号自动识别要求,利用MATLAB算法开发效率高和VS2010编写界面友好等特点,设计了一种钢坯号在线自动识别系统。为了防止系统存储、读取图片时发生冲突,减少MATLAB与VS2010的交互时间,提出一种基于MEX文件的混合编程方法,实现了MATLAB通过Windows消息响应机制向VS2010发送消息和VS2010通过Socket通信向MATLAB发送消息等功能,大大提高了系统的工作效率,同时也提高了钢坯号识别的正确率。

钢坯号;在线识别;混合编程;交互时间;Windows消息响应;Socket通信

1 引 言

随着钢铁工业及其信息化技术的迅速发展,对钢铁产品从生产到成品投放市场全过程的在线检测、产品质量跟踪以及永久性质量追溯的要求越来越高。钢铁厂生产钢坯的过程中,会在钢坯的一侧喷上特定的数字序列等符号以表示特定的批次,根据不同的批次规定不同的生产工序,但是生产过程中不可避免会发生装料错误,使得其他批次的钢坯混入生产线中,从而造成产品质量瑕疵[1]。目前一般通过人工方式校准钢坯号,但钢铁厂环境复杂,工作环境恶劣,工人在长时间工作后易疲劳,工作效率底,漏检误检多,难以满足现代化生产的需要,因此设计一种钢坯号在线自动识别系统尤为重要。

VS2010是Windows系统平台上较为有效的应用程序开发系统,具有开发程序文件小、界面友好、执行速度快、实时性好和容易维护等优点,已成为操作系统设备驱动程序和系统级平台类软件的最佳开发工具。VS2010开发的图像处理软件,C/C++语言中只包含基本的数学函数库,如果要实现图像处理中的复杂数值运算和图形图像显示时,需要编写大量代码[2],对一名非专业的程序员,这将耗费大量的时间和精力。而MATLAB目前已成为国际上公认的最优秀的数值计算和仿真分析软件,其具有符号计算、数字和文字统一处理、离线和在线计算等功能,具有较强的绘图、计算和可视化功能,具有很强的开放性等特点。但它本质上是一种解释性语言,在进行大规模数值计算时,执行效率较为低下,利用其进行应用程序开发存在局限性。利用MATLAB算法开发效率高和VS2010编写界面友好等特点,将MATLAB和VS2010结合起来,必将大大提高软件开发的效率,缩短开发周期。为了防止MATLAB在读取图片时相机正好存储图片冲突的发生,同时提高系统的实时性,减少MATLAB与VS2010的交互时间,下面提出一种基于MEX文件的混合编程方法。

2 MATLAB与VS2010混合编程

所设计的钢坯号在线自动识别系统框图如图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()函数定义格式

3 MATLAB与VS2010交互实现

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]。

4 钢坯号在线识别应用

将所提出的基于MEX文件的混合编程方法应用到所设计的钢坯号在线自动识别系统,系统现场安装如图3所示。考虑到钢坯温度高和采集视野等问题,主要设备和钢坯保持了一定距离。系统主要由光源、摄像头和工业控制计算机等部分组成。其中摄像头选用的是Manta系列相机,镜头前加有透明防护罩和冷却装置,以防止灰尘污染等问题。

图3 系统现场安装图

对系统正常工作时MATLAB向VS2010发送消息的交互时间进行测量,为了验证基于MEX文件混合编程交互的实时性,针对TXT文件交互方法进行了比较,具体实验测量数据如表2所示。通过测量发现采用混合编程方法MATLAB向VS2010发送相机暂停、读取图片和启动相机的时间主要由读取图片的时间决定,发送消息的时间几乎可以忽略不计,且较TXT文件交互方式相比实时性得到大大提高,同时也验证了基于MEX文件混合编程方法的可行性。

表2 MATLAB向VS2010发送消息

5 结束语

提出的基于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

猜你喜欢
钢坯自动识别调用
基于数据挖掘的船舶航迹自动识别系统
钢坯库行车作业的辅助驾驶的技术研发与应用
核电项目物项调用管理的应用研究
基于卫星遥感图像的收费站位置自动识别与校核
自动识别系统
基于系统调用的恶意软件检测技术研究
基于IEC61850的配网终端自动识别技术
利用RFC技术实现SAP系统接口通信
2012年9月钢坯分国别(地区)进口情况
2012年8月钢坯分国别(地区)进口情况