本文分析了在Windows环境下用VC++语言编写串行通信程序的技术。
1、概述
在工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道。由于串行通信结构简单、可靠性强、实现及使用成本低、通讯标准统一,因此在测控系统和工程中应用十分广泛。目前Windows在工业生产监控管理系统中已成为主流平台 ,Windows环境下的上、下位机之间的串行通信是设计与开发监控管理系统和集散控制系统的重要组成部分。
Microsoft公司的VC++6.0是一种高级编程语言,其基础类库 (MFC)封装了Win32API中的标准通信函数,可方便地支持串口通信。下面就结合实例介绍在Windows环境下,用VC++6.0编写串行通信程序的技术及方法。
2、串行通信工作方式
Windows系统为每个通信设备开辟了用户定义的输入/输出缓冲区,数据进出通信口均由系统后台来完成,应用程序只需完成对输入/输出缓冲区操作就可以了。实际过程是每接收一个字符就产生一个低级硬件中断,Windows系统中的串行驱动程序就取得了控制权,并将接收到的字符放入缓冲区,然后将控制权返还给正在运行的应用程序。如果输入缓冲区数据已满,串行驱动程序用当前定义的流控制机制通知发送方停止发送数据,而队列中的数据按先进先出 (FIFO)的次序处理。
在Windows中,串行通信有两种工作方式:查询方式和事件驱动方式。查询方式占用大量的CPU时间,效率较低,但是数据不易丢失;而Win32操作系统基于事件驱动 (也称为消息驱动)机制的内核,支持基于进程的协同式多任务和基于多线程的抢先式多任务。基于事件驱动的多线程应用程序实际上在其内部实现了多任务扩展,为代码赋予了并行执行的特性,可以使应用程序对CPU的利用率大大提高,从而提高系统的响应能力,加快信息处理速度,提高通信程序的实时性和增大数据吞吐量。
基于以上分析,以事件驱动方式实现Windows下的串行通信更具优势,它能完成较大数据量的实时通信,大大提高了通信的效率,故本程序采用此种方式进行串行通信,至于通信的可靠性可以通过软件设计来保证。