基于VB的串口通讯及其软件实现(3)

2012-08-26 22:29


  Pcomm函数库是由台湾Moxa公司为开发串口通信程序提供的一套函数库。通过对Windows API函数的进一步封装,提供50多个串口操作函数。覆盖了Windows操作系统下几乎所有异步通信的问题,可以简洁的开发多线程通讯程序。采用该库,通信的可靠性与使用MSComm32控件比较有了明显提高, 而相对直接使用Win32API函数编程则降低了程序开发难度, 缩短了程序开发周期。
  这种方式上述直接调用Windows API函数有相似之处,但也有明显的差异。API函数常采取的方法是在串口监视线程中设置串口通信事件掩码及重叠机制,允许程序在后台等待串口通信事件。通过WaitCommEvent检测特定的串行通信事件。而在Pcomm中,可以采用中断处理的方式,为各种事件指定相应的中断处理函数,如接收到一定数目的字符,接收到结束字符,接收到中止信号以及发送缓冲区为空等;同时还可以采用线程控制的方式,直接采用库中的sio_read()和sio_write()函数读写串口。
  Pcomm..DLL中的函数按功能分为6项:端口设置、数据发送与接收、串口状态检测、事件服务、文件传输、杂项。Pcomm..DLL中主要的函数介绍如下。[5]
  sio_open:打开端口;sio_close: 关闭端口。
  sio_ioctl:设置端口参数,如波特率等。
  sio_read:从端口接收数据;sio_write向端口发送数据。
  sio_iqueue:得到接收缓冲区中的数据长度。
  sio_oqueue:得到发送缓冲区中的数据长度。
  Pcomm在串口通信中的功能十分强大,但基于篇幅的考虑,在此不便赘述,读者可参考相关书籍或Pcomm自带的帮助文档。
  
  4串口通讯的错误及处理
  
  由于外界干扰或电压波动等原因,串口通讯可能会出现错误,如接受缓冲区溢出,奇偶校验错误等。为了处理这些错误,在Mscomm控件中就提供了一个OnComm事件,它可以捕获通信时发生的串口事件和错误信息,自动转入事件处理程序。在OnComm事件中,CommEvent属性是OnComm事件的指示,下面简单介绍几个重要的CommEvent属性值。
  ComEventBreak:表示收到一个中断信号;
  ComEventFrame:表示硬件检测到一个数据帧错误;
  ComEvenRxover:表示接收缓冲区溢出;
  ComEventTxFull:表示输出缓冲区已满;
  ComEvReceive:表示接手到了Rthreshold个字符;
  ComEvEOF:表示接受到了EOF字符(ASCII字符26)。
  编程时用SelectCase语句,根据不同的CommEvent属性值,去执行不同的处理程序。
  除了以上所述的通讯错误外,在串口通信时,如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态, 为避免这种情况发生, 必须设置串口读写操作的等待时间, 等待超时后,串口的读写操作将被主动放弃,这样即使数据传输突然中断程序也不会被挂起或阻塞。可以根据具体要求规定串口读写操作的最长时间值,即串口读写必须在这段时间内完成,否则提示串口操作失败。
  
  5串口通讯实例
  
  本实例是一个采集设备电流及功率的通讯程序,采集仪为横河WT230数字功率计,因为要采集的数据量不大,且工程结构简单,故采用Mscomm控件的形式进行串口读写操作。
  具体实现步骤如下:
  (1) 在窗体Form上添加两个重要的控件:Timer1和Mscomm1;
  (2) 在程序的Form_Load事件过程中添加如下代码:
  MSComm1.CommPort=1 ‘使用COM1端口
  MSComm1.Setting=“9600,o,8,1” ‘设置通信口参数,注意是奇校验,具体的校验方式要视具体的仪器而定
  MSComm1.InputMode=comInputModeBinary ‘设置接收模式为二进制形式,注意一般对于数据采集这类设备通信,都应该设置为二进制形式
  MSComm1.PortOpen=True ‘参数设置好后打开端口
  MSComm1.HandShaking=2-comRTS ‘设置为硬件流控制,可以有效避免数据丢失的情况发生

基于VB的串口通讯及其软件实现(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:怎样让灾备不惧“遥远”

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: