夏玉洁
【摘要】 随着现代信息技术的发展以及计算机网络的广泛应用,计算机通信技术以及日趋成熟,串口通信是一种灵活方便可靠的通信方式。本文通过VC++软件的MSComm控件编程来控制PC与PC串口之间的数据传输加以说明,采用虚拟串口的方式在一台PC机上的不同串口之间传输数据。
【关键词】 串行通信 MSComm控件 多线程 虚拟串口 VC++
一、引言
串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换成串行的位。接收数据时,串行的位转换为字节数据。串行技术应用广泛,如远程监控,工业自动化和软件通信等多个领域。
二、串口通信的原理分析
2.1 基于WINDOWS的VC++串行通信编程
利用VC++编制串行通信程序有三种方法:
一是采用Win32应用程序编程接口(API)所提供的串口通信函数,用SDK思路编写;
二是用ActiveX通信工件MSComm开发串行通信程序;
三是采用C++的MFC思路,将Win32串口通信的API函数封装在一个类中实现通信。
2.2串行接口标准
串行通信线路连接数,要解决两个问题:
一是计算机与外设之间的物理接口标准,属于OSI中的物理层,包括RS-232、RS-422及RS-485标准等。
二是按接口标准设置计算机与外设之间串行通信的接口电路。
三、串口通信整体设计方案
3.1 面向对象的思想
面向对象的思想是把信息系统本身看作是一系列离散的对象的集合,这些对象包括数据结构,及数据结构的操作或行为。若对象之间由事件触发,引起互通消息实现互操作,设计出的软件是模块化的,可扩充和可移植的。
面向对象的程序设计以“对象”和“数据结构为中心,用“对象”表现事物,用“类”表示对象的抽象,用“消息传递”表现事物的相互联系,少用“方法”表现处理事物的过程。
3.2 VC下的32位串口应用程序
Windows32位下的串口应用程序用3种方法实现: MSComm控件;用API通信函数或者CSerialPort类。
3.2.1使用MSComm控件方法
VC++6.0提供的MSComm控件通过串口端口发送和接收数据,为程序提供串口通信功能。在当前对话框中插入MSComm控件,然后在ClassWizard中为创建的通信控件定义一个成员对象(CMSComm m_Com),通过该成员对象即可设置MSComm控件属性。
MSComm控件需要设置常用属性,即初始化串口,打开串口,读写串口。
3.2.2使用32位的API通信函数
在VC++6.0下,MFC应用程序线程用CWinThread对象表示。VC++把线程分成两种:用户界面线程和工作者线程。用户界面线程提供界面和用户交互,用于处理用户输入及其相应的各种事件和消息,工作线程处理程序的后台任务。在MainFrm.cpp中定义全局变量,然后在程序中创建一个串口,进行相应的串口参数设置,启动一个工作者线程,用来监视串口状态,看有无数据到达、通信有无错误;用户界面线程可专心进行数据处理、提供友好的用户界面,最后为工作者线程编写一个全局函数,主要完成数据接收工作。
3.3 图像传输设计方案
利用MATLAB软件将一幅图像转换成矩阵,然后用串口输出,从COM1输入图像矩阵并发送,在COM2端可以接受到该图像矩阵,通过MATLAB还原可以得到原图像。用虚拟串口软件VSPD模拟串口,同时添加一对虚拟串口是设定通过非MODE(三线制)串口连接线连接在一起的,像两个真实的物理串口可以进行通信,可节约成本,提高连接的可靠性。
四、结束语
实验表明,通过MSComm控件通过串口端口可以实现发送和接收图像数据,在传输过程中可实时进行更新显示,图像传输后将其保存为BMP格式文件,可以进行后续处理使用。
参 考 文 献
[1]李长林 高洁,Visual C++串口通信技术与典型实例,清华大学出版社,ISBN 7-302-12903-7,2006-05-01.
[2]陳淑珍,石波.基于Windows多线程环境下的串口通信[J].计算机工程与设计,2000-3.
[3]田敏 郑瑶 李江全.Visual C++数据采集与串口通信测控应用实践,人民邮电出版社.ISBN978-7-115-22611-2,2010-6.
[4]李现勇,Visual C++串口通信技术与工程实践(第二版).人民邮电出版社.ISBN7-115-12344-6/TP.4021,2004-7