基于VC++的特殊波特率的实现方法

减小字体 增大字体 作者:刘 葵  来源:www.zhonghualunwen.com  发布时间:2009-08-16 12:04:38

 关键词:串口;特殊波特率;PComm库
摘要:简单分析Windows 下串口通信方式, 详细介绍了使用 串口通讯库PComm实现特殊波特率的方法。

1 引言
  
  串口是计算机上一种非常通用的接口。大多数计算机包含一个基于RS232的串口。串口本质上是计算机的CPU和外部串行设备间的编码转换器。当数据从CPU经过串口发送出去时,字节数据被转换为串行的位。而在接收数据时,串行的位则被转换为字节数据。
  串口同时也是工业过程控制中仪器仪表设备通用的接口,可以用于获取远程采集设备的数据。目前在进行工业设备改造的过程中,通常是在Windows环境中进行应用程序开发,常常需要通过串口与工业设备通信。为了适应工业设备(尤其是国外进口设备)接口速率,这时对通信速率会有特殊要求,就不能使用计算机串口通常提供的速率(9600bps,19200bps,38400bps,57600bps,115200bps),而是76800bps。本文就Window环境下基于VC++开发串口通信程问题展开讨论,并介绍一种串口特殊波特率的实现方法。
  
  2Windows环境下基于VC++串口通信编程
  
  2.1采用Windows API 函数
  串口在Windows 中是作为文件来进行处理的, 不是直接对物理端口进行操作。对于串行通信, Windows 提供了相应的文件I/O 函数与通信函数, 通过了解这些函数的使用, 可以编制出符合不同需要的通信程序。与通信设备相关的结构有COMMCONFIG , COMMPROP, COMMTIMEOUTS, COMSTAT,DCB, MODEMDEVCAPS,MODEMSETTINGS 共七个, 与通信有关的Windows API 函数共有26 个, 详细说明可参考MSDN 帮助文件 。
  操作串行口一般遵从以下四个步骤:
  1) 打开串口。VC 中将串口作为文件操纵, 所以打开串口时, 也使用与打开文件相同的API 函数, 如下:
  HANDLE CreateFile( LPCTSTR lpFileName, //串口名称或设备路径
  DWORD dwDesiredAccess, // 存取方式, 读或写
  DWORD dwShareMode, //共享方式, 独占或共享
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, //安全描述符
  DWORD dwCreationDisposition, //创建方式
  DWORD dwFlagsAndAttributes, //文件属性
  HANDLE hTemplateFile // 参照模板
  ) ;
  但是dwDesiredAccess 必须为0, 因为串口是独占设备;dwCreationDisposition 必须为OPEN_EXISTING, 因为只有串口存在时才能被打开; dwCreationDisposition 一般为FILE_FLAG_OVERLAPPED, 表示串行口以异步方式工作。
  2) 设置串口工作参数。串口能够顺利通信必须保证通信参数设置正确, 这些通信参数包括波特率、数据长度、停止位、校验方式等, 所以在串口打开之后必须进行串口设置。设置串口属性的一般思路是先利用GetCommState()获得串口的设备控制块DCB, 修改必要的部分之后, 再利用SetCommState( ) 将修改后的属性信息写回DCB 中。
  3) 从串口读取或向串口写入数据。串口的读写主要通过两个文件读写API 函数来实现, 即ReadFile( ) 和WriteFile( )。但是由于串口的通信并不是绝对的稳定, 所以应该采用异步方式, 以防止通信故障使程序陷入无限等待中。串口的读写方式也有两种, 一种是简单的查询方式, 这种方式比较容易实现, 但是浪费了大量的CPU时间; 另一种是基于事件驱动的方式, Windows 中共提供了九种串口通信

[1] [2] [3]  下一页

Tags:

作者:刘 葵
  • 好的评价 如果您觉得此文章好,就请您
      100%(1)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论