主线程接收到消息后即调用WriteToPort函数向串口发送命令,确认命令发送完毕后把“发送”事件标记为OFF,“接收”事件标记为ON.同样道理,监视线程监测到“接收”事件标记为ON时给主线程发送消息,主线程调用ReceiveChar(TSerialPort*port,COMSTATcomstat)函数接收PLC响应代码。分析结果在屏幕上显示。此时,监视线程把“发送”事件标记为ON,下一个循环到来时,监视线程向串口发送命令并接收PLC的响应代码。在该系统中,用PLC控制变频器,用计算机监控PLC.在一个循环内,监视线程首先检测有无鼠标点击指示灯,如有则首先发送代码到串口中,使PLC相应指示灯为ON;否则发送预定义代码到串口中,循环读取PLC各内存区数据,并在下一个循环内读取PLC响应码,分析后在屏幕上做相应显示。
由于监视线程一个循环内的代码很少且耗时较多的串口处理程序均采用同步处理方式,监视线程只需要向主线程发送消息,不等主线程响应就返回,因此循环周期极短,足以满足适时控制的要求。利用Windows的消息处理机制对响应结果进行分析。同时,串口监视线程继续监视串口,主线程继续接收用户输入并显示Windows分析结果。程序中同样要对计算机向PLC发送的命令代码进行校验,命令格式、校验规则及校验程序同第一种方法。主线程程序框图,监视线程程序框图如图4所示。3两种方法的对比分析在BCB中利用Windows封装的API函数开发串行通讯程序比较复杂,它有两个线程并列运行,可同时处理大量数据,其准确性高,适时性好,适用于对连续生产过程中对通讯响应要求严格、适时性强、数据量大的自动化工厂中。而在BCB中利用ACTIVEX控件开发的串行通讯程序只适用于小型离散控制系统中,开发成本较低。总结在计算机与PLC的通讯中,有3种方式可以采用,即:中断方式、查询方式和事件驱动方式。应用该电路系统已投入运行,经考核测试,工作稳定可靠。