4VisualC++5.0下对变频器进行串行通信控制
4.1Windows98的串行通信工作方式
在Windows98中,串行通信有两种工作方式:查询方式和事件驱动方式。两种工作方式各有优缺点,用户可根据实际需要选择其中的一种,下面分别介绍这两种工作方式。
4.2查询方式
对于从串口读取数据来说,查询是最为直接,易于理解的技术,但是查询会占用大量的CPU时间,效率较低,利用查询方式读取串口数据时通常要建立一个线程,建立线程使用CreateThread()函数,循环查询在线程里进行。
4.3事件驱动方式
事件驱动I/O方式是指线程通过监视通信资源中的一组事件来进行I/O操作,这种方式类似于MSDOS下的中断工作方式,效率高,可被监视的事件如表所示。
实际编程中,对串行口的读,写操作要建立两个工作线程。在读,写线程中通过SetCommMask()函数设置事件屏蔽来监视指定通信资源上的事件。指定一组事件后,线程可以使用WaitCommEvent()函数等待其中一个事件发生,在等待过程中,它将花费极少的CPU时间。注意:WaitCommEvent()函数和读写操作函数一样,可以同步或异步使用,这主要取决于在第三个参数中是否指定OVERLAPPED结构。如果指定为NULL,该函数就是同步的,必须等到SetCommMask()中指定的事件有一个发生时它才返口;如果指定了一个OVERLAPPED结构,该函数即工作在异步方式。
4.4变频器串口通信控制检测的软件编程
MicroMaster变频器回送的状态信息一帧为14个字节,为此程序编制上采用事件驱动的通信方式,串口每接收14个字符便激活一个事件,在消息处理函数中加入相应的处理代码,用来读取状态字ZSW和HIW各位的状态参数,并作出相应的处理,如显示,报警等。下面简要给出利用事件驱动I/O方式读出变频器回送状态字的程序源代码。假设串口COMM1已经按前面的方式打开。
变频器回送的状态信息利用Windows的消息处理函数进行处理。在消息处理事件中,将变频器回送的14个状态字一次全部读到VARIANT变量Parameter中,然后程序再从VARIANT类型数组变量Parameter中分别读取各状态字,在屏幕上显示,判断并报警。
5结论
在开发的实时数据采集与监控系统中,利用事件驱动方式的串行通信编程技术和MicroMaster变频器RS485的串行通信功能方便地实现了在Windows98环境下用单台PC机控制多台变频器驱动交流异步电动机的任务,并能实时检测各个变频器的运行状态。整个控制系统灵活方便,具有很大的实用性。