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

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:l_chuanfei
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:简单分析Windows 下串口通信方式, 详细介绍了使用 串口通讯库PComm实现特殊波特率的方法。
  关键词:串口;特殊波特率;PComm库
  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2009)15-3871-03
  
  Realization of SpecialBaudRateBased on VC++
  LIU Kui
  (Zhejiang Textile and Fashion College, Ningbo 315211,China)
  Abstract: The communication of serial interface has been analysed simply,and the paper introduces how to realize specialbaudrateby using thePComm communicationLibrary.
  Key words: serial interface ; special baud rate; PComm Library
  
  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 中共提供了九种串口通信时间, 请参见MSDN 帮助文件 。
  4) 关闭串口。串口是非共享资源,所以打开串口后,一定要关闭串口。关闭串口函数的原型:BOOL CloseHandle(HANDLE hObject);其中hObject参数为CreateFile()返回的端口句柄。返回值非0,则调用成功。
  2.2采用MScomm控件编程
  Microsoft Communications Control(简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体地说,它提供了两种处理通信问题的方法:1) 事件驱动(Event-driven)方法:主要是在comEvReceive(接收到数据)事件发生时响应并获取缓冲区的数据;2)查询法:每当应用程序执行完某一串行口操作后,应不断检查MSComm控件的CommEvent属性以检查执行结果或者检查某一事件是否发生。
  VC集成开发环境下对该控件编程的步骤:
  1)在当前的Workspace中插入MSComm控件
  在VC环境下,创建基于对话框的MFC应用程序,在设置项目选项时必须选上ActiveX Controls,其他的按照缺省设置。然后进行以下步骤:Project菜单→Add to Project→Components and Controls→Registered ActiveX Controls→选择Components: Microsoft Communications Control,version 6.0插入到当前的Workspace中。
  结果添加了类CMSComm(对应相应文件mscomm.h和mscomm.cpp也自动加入工程)。
  2)在MainFrm.h中加入MSComm控件
  protected:
  CMSComm m_ComPort;
  在Mainfrm.cpp::OnCreate()中加入:
  DWORD style=WS_VISIBLE|WS_CHILD;
  if(!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)){
  TRACE0(“Failed to create OLE Communications Control\n”);
  return-1;//创建失败}
  3)初始化串口
  4)捕捉串口事件
  MSComm控件可以采用轮询或事件驱动的两种方法从端口获取数据。比较常用的是事件驱动方法:有事件(接收到数据)时通知程序。在程序中需要捕获并处理这些通讯事件。
  5)读写串口
  2.3 利用VC++库标准通信函数实现串口编程
  利用VC进行异步通信编程,其实是对串口内部寄存器的读出或写入操作。VC可利用VC++类库中提供的标准通信函数_inp()、_outp()函数对其进行编程。
  通过计算机串口进行串行通信之前,必须根据设备的有关通信参数,约定双方的通信方式,包括波特率的设置、奇偶位校验及停止位的设立,确定数据传输帧格式和UART操作方式,逐个对线路控制寄存器、波特率因子寄存器等寄存器写入操作,可以利用VC运行库提供的通信函数_inp(),_outp()来实现串口通信。
  
  3 串口特殊波特率的实现方法
  
  许多工业设备以串行方式传送数据,但传输速率往往使用计算机上不支持的76800bpps,尤其是国外进口设备。决定计算机串口的通信速率是晶振频率,这决定了本质上是通过改变波特率因子来确定传输速率的标准串口是不支持76800bps速率的。
  这一问题可以通過使用USB转串口的接口解决,目前许多这类接口都提供比标准串口多的传输速率,其中包含76800bps的速率。在此基础上,利用USB转串口的设备结合所提供的库函数PComm.lib,编程实现特殊波特率的方法。
  1)程序开发环境设置:
  将PComm.lib添加到链接库列表中,如图1,确保PComm.h 和PComm.lib 文件在搜索路径中,如图2、图3。
  添加PComm.h文件到程序头部:
  #include // PComm.h 文件需要Windows.h文件
  #include “PComm.h”
  2)采用PComm.lib进行串口通信的典型步骤:
  首先调用控制函数(打开、速率设置、校验方式等),然后调用输入、输出函数进行通信,调用串口状态查询函数(如果需要),关闭串口。典型示例如下:
  port = 2; //串口2
  ret = sio_open (port);// 打开
  if (ret == 0) {//成功打开
   sio_ioctl (port, B19200, P_NONE | BIT_8 | STOP_1 );// 速率、校验方式、位数等设置
  sio_write (port, "ABCDE", 5);//输出
  sio_read (port, ibuf, length);//输入
  }
  sio_close (port);//关闭
  3)主要库函数功能:
  串口控制函数:功能包括串口的打开、关闭、传输参数的设置等,主要函数有sio_open()、sio_close ()、sio_ioctl()sio_baud ( )。其中可以通过sio_ioctl()设置速率、校验方式、位数等,要使用特殊波特率则可以通过sio_baud ( )设置串口的实际波特率,例如设置串口2的波特率为76800可以用sio_baud (2,76800L),如果串口不支持该波特率,则会选择最接近的波特率来工作。
  串口读写控制函数:功能包括串口读写、超时设置等,主要函数有sio_read()、sio_SetReadTimeouts()、sio_write()、sio_SetWriteTimeouts ()等。
  串口状态查询函数:功能包括输入输出队列、串口参数等,主要函数有sio_iqueue ()、sio_oqueue () sio_getmode ()等。
  串口中断事件服务函数:当收到特定字符或收到设定的字符数时,触发相应的例程,主要函数有sio_term_irq()、 sio_cnt_irq()等。
  
  4 结束语
  
  PComm串行通信库函数完全兼容Microsoft Win32 API。它完全适合Win32环境下所有类型的串口,使用它提供的函数可以很容易实现多线程,结合目前常用的USB转串口的接口,可以实现较标准串口更多的传输速率,为开发工业环境下需要特殊速率的串行通信程序提供非常方便的途径。
其他文献
摘要:该文通过分析ASP的工作原理,来阐述目前针对AsP的网络安全性问题。通过一个具体的实例,讲解了如何利用ASP的漏洞攻击服务器的过程,并对常见的安全性问题进行了介绍和归纳。希望通过实例的方式,让广大读者了解其攻击原理,并引起注意,在运用ASP编写程序时,避免安全性问题的发生,保证网站的运行和用户数据的安全性,为营造一个安全和谐的网络世界贡一点力量。
期刊
摘要:音频采集和录制软件是多媒体技术中的一个重要组成部分。本文利用BodandDelphi开发平台,介绍了结合Mediaplayer控件定义声音文件过程,给出了实现录音程序设计的方法和步骤。
期刊
摘要:随着科学技术的高速发展,计算机在科研方面的应用已经日益广泛。如何更有效、更方便地组织好、管理好各种活动,一直是人们普遍关心的问题。而这一点正是计算机的强项。计算机在数据计算、统计方面有着无可比拟的优势:速度快、不易出错、利于管理、数据重复利用易于保存。所以利用计算机进行水电费查询及管理是大势所趋。而适用这种管理的软件是非常重要的。如果能够编写出一个高效、方便的水电费查询及管理系统软件,必然会
期刊
摘要:提出了一种基于VPN与OPC的多校区校园配电管理系统的网络构建方案。利用VPN技术解决了电力远程监控在公网中数据传输的全性问题,并采用OPC技术为现场设备与应用软件提供统一的接口规范,解决了电力通讯接口复杂、实施困难等问题,方案简单易行,且十分经济。
期刊
摘要:通过介绍当前高等教育考试方法改革现状,构建一种基于c/s模式的网络考试管理系统,分析了系统构成和工作原理。并比C/S模式和B/S模式的特点。讨论了Socket套接字通信机制。
期刊
摘要:该文介绍了微型飞行器在空中所拍摄的经压缩后的Mpeg4图像信号与飞控计算机下行遥测数据的混合编码技术。提出并实现了一种改进的基于扩展频谱的视频编码方案。该视频编码方案在不降低视频质量的基础上,能够抵抗多种干扰和攻击。具有良好的稳定性和鲁棒性。
期刊
摘要:将RgPCA算法应用于表情图像的特征提取。其核心思想:先用PCA处理表情图像,提取表情特征;然后,将此表情特征集作为一个粗糙集用FAI算法进行约简,从而实现表情特征选择。RgPcA算法继承了PCA在特征提取时的简洁,并充分考虑模式分类的要求。提高了特征选择的科学性。
期刊
摘要:该文主要讨论的是无刷直流电动机启动仿真。首先建立了无刷直流电动机的数学模型,然后详细讨论了无刷直流电动机的三相导通三相星形六状态下磁势随电流流向的改变而改变的情形并给出了启动过程的动态仿真。最后给出了仿真的结果。该文还讨论了电动机参数改变情况下的仿真结果的变化。
期刊
摘要:近年来,大型金融企业制定IT发展核心战略,实现业务数据集中处理,保证数据大集中系统稳健运行。本文给出了详细的银行、金融机构信用卡系统解决方案,依托IBM 大型机建立高效、灵活并实时响应的技术平台,为广大用户群体提供强有力的业务支持。  关键词:z/OS;大型主机;信用卡  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2009)15-3843-02    Credit
期刊
摘要:该文提出了一种基于DCT变换域的数字水印算法,主要思想是利用密钥分散将原始二值水印图像经Amold置乱加密后嵌入到原始图像中。并通过Madab实现了该算法。实验结果表明,该算法具有良好的不可感知性和鲁棒性,能有效抵抗裁剪、噪声等攻击。
期刊