APP下载

基于VC++的串口通信实现方法

2018-09-07窦萌萌

信息记录材料 2018年10期
关键词:控件串口编程

窦萌萌

(鹤壁职业技术学院 河南 鹤壁 458030)

1 引言

这几年伴随时代的快速发展与社会经济的提升,我国有关控制系统的应用也越来越广、规模逐步扩大,这些系统所包含的功能模块也日益增多。由此可知,控制系统中各组成模块能够进行有效通信能够直接影响到该系统工作的协调性与安全稳定性。而控制系统各类通信方法中,串行通信是最安全可靠、最常应用的一种方式,其具备灵活性、操作简单、具有更快的代码执行速度等优点。

2 当前技术实现串口通信的普通过程

当前在项目实际设计中,获得串口通信的过程如图所示(图1:当前技术实现串口通信的普通过程),通常是以下几步:

图1 当前技术实现串口通信的普通过程

(1)由上图可知,首先我们需要根据有关协议初始化对应的设置,然后将串行口进一步打开(即:向Windows传达此串口需要该程序进行应用的指令),然后将此串口进行封锁,禁止其他程序来应用。

(2)对该串口设置相应的配置。

(3)借助该串口,在上面将有关数据信息进行往返传输,与此同时在实际传输的时候对各项设置进行校验。

(4)当该串口使用完毕后,确定对其不再有需求就将其关闭、进行串口释放,让其能够为其他程序提供应用服务。

3 基于VC++的串口通信3种常见实现方法

Microsoft Visual C++是一种很实用的开发平台,为各大用户人群提供了各种方法来有效控制其串口通信。这种开发平台不需要用户熟悉其实际硬件原理,具有较强的可移植性以及适应性。

3.1 借助MFC(微软基础类库)来进行编程从而达到串口通信目的

Win32系统进一步扩展了文件概念,从而使得文件、磁盘、设备以及相关管道都能够当作文件。因此我们可以借助MFC(Microsoft Foundation Classes)中的CFile类来操作有关串口。同时Win32系统里的I/O函数输入输出能够实现重叠式,从而进一步增强了时效性。正常情况下利用Microsoft Foundation Classes来实现串口通信的主要编程步骤为以下几步:

(1)在MainFrm.cpp中将相应的全局变量进行有效定义

HANDLEhCom;//该句柄用于将相关串口进行打开准备

(2)将串口正式打开

Windows通信从CreateFile()函数开始正式打开相应的串口,然后在CreateFile()处对此串口的对应属性与设备进行操作,同时反馈回某种句柄,其能够在之后的通信过程中被应用。

(3)将串口的各项参数设置进行初始化

在打开对应串口句柄函数之后,我们一般要初始化其各项参数设置,如:停止位数、流控协议、波特率等等。相对常见的函数设置为以下几种:

GetCommState(hCom,&dcb)://该函数能够设置此串口原本的参数;

Create://该函数能够将控件对象进行创建并有效初始化;

SetInBufferSize://该函数能够设置串口接收缓存区的最高范围;

SetOutBufferSize://该函数能够设置串口传输缓存区的最高范围;

SetInputLen://该函数能够对此串口接收区的信息长度进行设置;

SetPortOpen://该函数能够对串口进行打开以及关闭操作,若将其设置为TRUE即为打开指令,若将其设置为FALSE即为关闭指令。

(4)对串口的API函数进行读写操作

打开对应的串口之后,我们可以对此串口的API函数(Application Programming Interface)进行读写等操作。

(5)串口的API函数进行关闭

由于通信串口不属于共享资源,因此当串口被打开使用完毕后一定要记得将其进行关闭,若CreateFile()函数返回数据不是0,则意味着调用成功。

3.2 借助VB的MSComm有关控件来进行编程从而达到串口通信目的

MSComm控件,其英文全称为:Microsoft Communication Control。该控件是在Component Object Model的基础上开发出的一种事件驱动通信接口,这种控件主要用于串口通信编程,编程人员不用花费精力去掌握复杂的API函数,操作简便灵活,具有很好的稳定性与高效性。

(1)MSComm控件所具备的功能与运行原理

MSComm控件能够有效运行串行数据信息的接收以及发送功能,其即包含WindowsAPI系统中所有串行通信的函数功能,还能够有效提供更全面的对象属性,从而满足各种用户人群的编程需要。MSComm控件能够有效屏蔽实际通信环节中的底层操作,有关用户只要做好简单设置、对相关事件属性进行监视,就能够有效的进行串口编程,从而与有关对象实现串行通信、信息交换,在这个过程中还能够科学监视可能存在的某些错误与事件。

(2)MSComm控件实现通信的2种常见方式

①MSComm控件借助事件驱动方式实现串口通信

事件驱动能够有效处理串行端口的有关交互作用,通常在事件驱动进行过程中根据其程序需要获得通知(如:处于Request ToSend或者CarrierDetect线上时程序存在某个字符发生变化),这种情况下可以借助MSComm控件中的OnComm事件有效处理其对应的通信事件。OnComm还能够科学检测其通信错误,在实际编程中利用OnComm事件有关函数能够实现所需的功能,这种方式具有较高可靠性与事实性,在日常工作中使用广泛。

②MSComm控件借助查询方式实现串口通信

这种方式具体是指:定时或者不定时的在实际用户程序中对MSComm控件中的有关CommEvent属性有没有出现变化,从而做出相应的措施。该方式本质还是属于事件驱动,只不过在某种环境下查询方式更简单快捷。如:当处理器相对空闲或有关应用程序相对偏小的情况下,更建议使用查询方式。该方式具有较强的可控性与稳定性,但需要注意的是其存在某种程度的时间间隔,当有关数据信息变化相对较快的时候,若对每个串口进行查询有可能会导致信息流失。同时该方式有时还会占用较多的系统资源,因此适用于应用程序短小且能够自保持的情况。

③借助Visual C++运行库函数从而达到串口通信目的

VC++其英文全称为:Microsoft Visual C++,借助其进行通信编程其实是写入以及读出Universal Asynchronous Receiver/Transmitter内部寄存器中有关内容的操作,在实际进行串行通信前,我们需要参考相关设备的各项参数,对双方的串口通信方式进行约定,如:设置停止位、奇偶位以及波特率。对数据信息的传输格式与Universal Asynchronous Receiver/Transmitter有关操作方式进行确定。借助Microsoft Visual C++有关通信函数outp()以及inp()实现通信目的。

其次,我们也可以借助第三方的通信类来进行串口通信的编写,这种方式具有很简洁的接口,最后编写出来的程序相对比较灵活,将其与Microsoft Visual C++进行结合会得到更高的运行效率。

4 结语

Microsoft Visual C++是一种很实用的开发平台,为各大用户人群提供了各种方法来有效控制其串口通信。这种开发平台不需要用户熟悉其实际硬件原理,具有较强的可移植性以及适应性。

本文基于VC++环境平台,介绍了利用当前主流技术实现串口通信的详细过程,同时向读者简单阐述了基于VC++的串口通信3种常见实现方法,如:借助MFC(微软基础类库)来进行编程是程序员使用最广泛的实现方式,可以对不同种类的外部设备实现串口通信,但对硬件要求较高;借助Visual C++运行库函数则正好跟MFC方法相反,前者实现串口通信原理相对容易,对硬件要求不高,但此消彼长,程序的灵活性和实用性会受到影响;而第3种实现方法,借助 VB的MSComm有关控件来进行编程实现串口通信也比较容易实现,不需要程序员过于关注硬件内部的实现原理,但与MFC实现方法相比,灵活性等方面也差强人意。

总之,在实际工作中要具体问题具体分析,结合实际需求,综合考虑程序的时间复杂度和空间复杂度等因素,有所取舍,适当选择,最终实现Win32系统的串口通信。

猜你喜欢

控件串口编程
编程,是一种态度
元征X-431实测:奔驰发动机编程
浅谈AB PLC串口跟RFID传感器的通讯应用
基于.net的用户定义验证控件的应用分析
编程小能手
纺织机上诞生的编程
关于.net控件数组的探讨
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
串口技术的实物调试和虚拟仿真联合教学模式