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


  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 ‘设置为硬件流控制,可以有效避免数据丢失的情况发生
  (3) 程序开始后在一定情况设置Timer1.Enabled属性值为True 激活Timer1_Time事件,可以在固定的时间间隔下执行Timer1_Timer过程中的代码程序,完成数据采集。在Timer1_Timer过程中添加如下代码:
  MSComm1.Output = "COMMUNICATE:WAIT 1" + Chr(13) + Chr(10)
  MSComm1.Output = "MEASURE:NORMAL:VALUE?" + Chr(13) + Chr(10)
基于VB的串口通讯及其软件实现(3)相关推荐