2.2 目前常用串口通信方式
在控制领域的研发中,PC 机与外围控制设备的通讯方式有多种,如串行通信口、并行通信口、一台网口(需要网卡支持)、USB 通信口或自制危机接口卡。而串口通信则是在数据通信速率部是很高的情况下,开发者所采用的最常见、最简单、最通用的通信方式。并且考虑到现在的PC 机标准配置都具备两个串口,因此利用串口资源来开发PC 机与外围控制设备之间的通信应该是最方便快捷的[18]。在目前常用的各种开发环境(如VB、VC 和Delphi 等)下实现串口通信的方式有很多种:
首先,最简便的方法是采用Microsofe 公司提供的ActiveX 控件实现串口通信,即MSComm 控件。实现串口通信的编程方法原理上比较简单,容易实现,但编程的灵活性稍差,且应用程序运行时必须同时拷入与通信控件相关的文件。
其次,使用Win32 的API 函数实现串口通信亦是很好的方法。利用 API 函数实现串口通信的编程方法功能强大 ,灵活性好 ,但原理上比较复杂 ,需要编程人员对串口的硬件工作原理有较深入的了解。
最后,可以利用VC运行时,库的标准通信函数实现串口通信。其编程原理简单,但其使用性和灵活性较差[19]。总之,各种串口通信的实现方式在使用条件、灵活性和复杂程度等方面各有优缺点,分别适合于各自不同的应用场合。而本文介绍一个结合了Win32 的API 函数和C++类的基本思想封装了一个串行通信类CSerialPort 类,通过一个实例介绍,我们发现这个自定义的串口通信类能够使得串口通信的实现更加灵活、方便。
2.2.1 利用OCX控件实现串口通信
在VC ++ 中利用OCX控件实现串口通信和VB 中实现串口通信的方法类似,在编程上相对比较简单,一般步骤如下:
1) 创建串口通信资源并配置串口
在VC 中利用OCX控件实现串口通信首先需要创建串口通信资源并在串口通信资源的属性(Properties) 一项中配置串口,串口通信的波特率、数据位数、停止位数、奇偶校验、发送缓冲区大小、接受缓冲区大小以及超时设置等均在此时进行配置。
2) 打开串口
在串口资源已创建并配置好后, 即可用SetPortOpen(TRUE) 函数将该串口打开,打开串口的常用程序如下:
CCMSCommCtrl m—commctrl ;
if ( !m—commctrl . GetPortOpen () )
m—commctrl . SetPortOpen (TRUE) ;else
MessageBox(″该串口不可用″) ;
3) 数据读写
利用OCX控件实现串口读写操作可采用查询或事件驱动方式进行, 如采用查询方式读取串口可先用GetInBufferCount ( ) 函数检查串口已接收的字节数, 然后用GetInput () 函数即可读取这些已接收的字节;利用OCX控件实现串口写操作时首先要将待发送的数据由ASCII 型字符串转换成UNICODE 型,然后用SetOutput 函数将数据从串口发送出去。如采用事件驱动方式读写串口,首先需设置接收或发送事件的触发条件,然后在串口事件响应函数中用GetInput 和SetOutput 函数进行相应的读写操作。
4) 关闭串口
利用OCX控件实现串口通信时关闭串口非常简单,只需将打开串口函数的参数由TRUE 改为FALSE 即可:m_commctrl . SetPortOpen (FALSE) ;
2.2.2利用API 函数实现串口通信
在32 位Windows 中可以使用Win32 通信API 函数实现对RS232 串行通信口的访问,Windows 95 和Windows 98 中对串口的打开、读取、写入和关闭所用的函数和对文件进行打开、读取、写入和关闭所用的函数相同, 以下对串口的操作在Windows 95 和Windows 98 中均可使用。
1) 打开串口
Win32 中用于打开串口的API 函数为CreateFile ,其原型为:
CreateFile ( szDevice , fdwAccess , fdwShareMode , lpsa , fdwCreate ,fdwAttrsAndFlags , hTemplateFile) ; 基于ATM-885 OEM水声通信模块水声通信软件设计(5):http://www.youerw.com/zidonghua/lunwen_9217.html