硬件接口电路连线图如图4所示。
图4 硬件接口电路图
2.1 通信软件编制
2.1.1 上位机侧的软件编制
在Windows环境下,微机完全接管了各种硬件资源,不允许用户直接控制串行的中断管理。因此,如何在Windows环境下开发微机的底层资源,已成为当今工业控制软件的一大热点及难点[5]。本设计利用VC++的MSC omm控件进行计算机串口的通信管理。
在Windows环境下,实现串行通信一般有三种方法:汇编嵌入技术、MSComm控件、API函数。综合考虑三种软件的优缺点,选择在VC++6.0开发环境中选择MSComm控件实现串行通信。
创建一个基于基本对话框的应用程序框架OWEN,在对话框上添加MSComm控件,在Class Wizard中为新创建的通信控件定义成员对象(CMSComm m-Comport),通过该对象便可以对串口属性进行设置[5]。
串口初始化程序:
m-Comport.SetCommPort(1);∥选定用串口1
if(!m-Comport.GetPortOpen()) ∥如果串口1关闭,将其打开
m-Comport SetPortOpen(ture);
m-Comport.SetInputMode(1);∥设置从接收缓冲区读取数据的格式为二进制格式
m-Comport.SetSettings(“9600,n,8,1”);∥设置串口通信参数为波特率9600bit/s,无奇偶校验,8个数据位,1个停止位
m-Comport.SetRThreshold(1);∥每当接收缓冲区有大于一个字符时则激发一个OnComm()事件
m-Comport.SetInputLen(0);∥每次读取一个字符
m-Comport.GetInput();∥预先清空接收缓冲区
由于本设计中上下位机间的连接采用的是半双工方式,在上位机点击开始命令后,要求下位机把采集到的大量数据传来,为防止整个线路被下位机的传送工作占用而使停止命令无法传到下位机,采用对下位机进行周期性中断的措施,由上位机先接收后重发命令不断控制下位机的动作。设置一个Cstring型的全局变量m-send来代表开始和停止的不同标志。而在开始按钮响应函数中发送它的初始值(如“K”),而在停止按钮响应函数中给m-send赋另外的值表示停止即可在半双工的条件下顺利完成上下位机间的信息交流。
上位机软件编制步骤:
①创建一个基于对话框的应用程序OWEN;
②插入串口控件MSComm;
③编辑主对话框;
④在COWENDIg.h头文件中添加自定义公有变量、函数和宏定义指令;
⑤在COWENDLg类的OnInitDialog()函数中加入初始化代码;
⑥为“START”按钮添加消息响应函数woid COWENDIg::OnStart(),为“STOP”按钮添加消息响应函数void COWENDIg::OnStop();
⑦为其他控件添加消息响应函数;
⑧为MSComm控件添加OnComm事件响应函数void COWENDIg::OnOnCommMSComml(),在其中添加接收数据、调用数据还原、数据转换和数据处理算法函数代码。
⑨为OnComm事件响应函数中调用的数据还原、数据转换和数据处理算法函数添加代码。
2.1.2 PIC侧的通信程序设计
设计中要实现PIC与上位机通过RS-485接口进行通信,所以PIC的串行通信接口SCI被设置成与RS-485接口进行通信的半双工异步系统。在异步方式下,串行通信接口采用标准的不归零(MRZ)格式,1位起始位、8位数据位和1位停止位[6]。下位机中断服务程序如图5所示,发送子程序如图6所示。
图5 下位机中断服务程序
图6 发送子程序
2.2 通信结果
采用本文设计的通信方案,在多极电磁流量计的实际应用中,通信稳定可靠,对一定数量的控制要求(开始、停止命令)和数据传送进行了实验,在有效时间内数据准确到位,无误传,从而验证了该通信系统的可靠性。
3 结束语
本设计利用VC++6.0下的ActiveX控件MSComm实现了Windows环境下PC机与PIC的串行通信,从而实现了PC对多电极电磁流量计的远距离控制和数据传输,适用于环境恶劣的工业现场,达到了工业运用中开发Windows工控软件的实际要求。该方案实现简单、通信可靠、可移植性强。由于RS-485可带多个负载设备,只要对程序稍作须改即可实现1台PC监控多台多电极电磁流量计,实现多电极电磁流量计的分布式集散控制系统,有着广阔的应用前景。