关键词: 组态王 VB 单片机 通信 DDE
1、引言
近年来,单片机在众多领域中得到广泛应用。许多中小型企业考虑到投资利润和性能价格比,常常自行开发一些小型的单片机分布式系统作为下位机数据采集与监控系统,由普通PC机(或工控机)做上位机,单片机作为下位机,通过单片机和PC机通信,实现命令、数据的双向传送,从而实现对系统的有效监控。
最近,我们开发了一个污水处理自动控制系统,上位机采用PC机,系统监控采用组态王软件;下位机采用单片机,负责采集现场数据及发出控制命令。在生产车间,系统将各种采集数据存储在单片机中,并定期将单片机的数据采集和存储部分取出,并传送到装有组态王软件的上位机。技术人员通过查看数据、曲线、报表,并对这些数据进行详细分析,从而设置运行参数、发出控制命令,最终实现对整个系统的控制。
2、系统构成与特性
该系统中,上位PC机与单片机1:N链接通信,带有RS—485接口通信板的单片机直接挂在RS—485总线上,上位机通过RS—232C /RS—485转换器与总线相连,这样即构成一个独立的小型分布式监控系统,其它系统设备以类似方式与上位机链接。我们利用组态王软件包十分方便地构成了整个系统的监控画面,以动画方式显示控制设备的状态、报警、实时趋势曲线。
组态王能通过串行口与单片机通讯,访问单片机的相关寄存器,以获得单片机所控制设备的状态或修改寄存器的值。也可以组成网络进行数据交换,但需要客户机与服务器同时运行组态王软件。
2.1 组态王的DDE特性
组态王软件包由TouchMak和TouchViev两大部分组成。TouchMak为画面制作系统,所有界面设计,变量和动画连接的定义等均在TouchMak完成。TouchView则用于显示动画图形,负责数据库与服务程序数据交换,并把其变化用动画表示出来。
为了建立DDE连接,需要在TouchView的数据词典里建立一个DDE变量,并登记三个标识名。组态王运行系统的程序名是“view”,主题规定为“tagname”,项目是在定义DDE变量时定义的项目名称。
2.2 VB的DDE特性
在VB可视化编程工具中,DDE连接是通过设置控件的属性和方法来实现的,对于作为“顾客”的文本框、标签或图片框,要设置Linktopic、linkitem、linkmode三个属性,比如:
Control.linktopic=server应用程序名|主题名
Control.linkitem=项目名
Control.linkmode=num
其中control是文本框、标签或图片框控件名称,num可以是0、1、2、3中的一个分别代表关闭DDE、热连接、冷连接、通告连接。
组态王与VB的DDE连接是在TOUCHVIEW启动时自动完成的。
2.3 组态王与单片机通讯的数据流向
用VB编制的服务程序作为中间传递组态王与单片机之间的通讯数据,组态王中的控制命令按钮生效时,需将控制命令(如电机启动、停止等)下行传到单片机以实现远程控制。此时,组态王作为服务器向VB服务程序提供数据,需要在数据词典里定义一个DDE变量和一个供VB服务程序引用的项目名。
图1 系统数据采集与流动图
2.4 VB服务程序与MCS51的多机通讯
在VB通讯中,用通讯控件Mscomm实现服务程序与单片机的多机通讯。
在现场,为提高抗干扰和带负载能力以及增加通讯距离,采用RS-485总线的通讯方式,在微机端,用RS-232/RS-485转换器。
由于各单片机共享串行总线,为避免竞争,采用主从方式,微机服务程序主叫,单片机中断方式响应。主机首先发送地址帧,各单片机串行中断后,将接受的地址与自己的编码地址比较,不一致则不与理睬,相同则回送本机编号,主机接受到正确的回送编号后,发送相关命令,单片机根据命令作出相应的处理。
在现场调试过程中,总结出如下两点:
1. 由于现场对通讯的干扰,若通讯失败,系统采用重新发送,并统计次数,若失败次数超过指定次数,表明通讯失败。
2. 由于通讯服务程序为后台执行,主机在等待分机回答时,须将CPU控制权交出,以免影响组态王正常运行。
3、 通讯软件设计
在污水处理系统通讯设计中,用组态王软件包构成的监控画面中,有各外输泵电机的启/停控制,压力、流量、温度、液位、频率等数据显示,利用VB编制的服务程序vbservice.exe通过串行通讯从单片机得到压力等显示数据,通过DDE交换上传给监控画picl,在画面上进行动态显示,电机启/停等控制命令由监控画面通过DDE数据交换给服务程序,再下传给单片机以控制单片机的动作。具体介绍如下:
3.1 监控画面picl的污水压力变量设置:
进入组态王TouchMak,在picl监控画面的数据字典中定义变量:pressurel
pressurel表示1号通道的压力,定义为DDE模拟。其余各项设置为:
项目名:VB_pressure1_View
节点类型:驱动程序
节点名:node
服务程序名:vbservice1
话题名:Forml
数据交换形式:标准的windows项目交换
在picl监控画面上需显示pressurel值的地方输入文本符号“%%%%”、设置pressurel的动画连接方式为“模拟值输出”,就可以显示1号通道的水压力。
3.2 VB服务程序中的DDE设置
由于污水压力是picl监控画面作为客户向服务程序请求数据交换,因此作为服务器的服务程序的设置如下:
Sub Form_Load()
Linktopic=“forml”
Linkmode=1
End Sub
3.3 服务程序从各单片机接受数据
VB的MSCOMM控件初始化程序 摘要如下:
Mscomm1.Commport=1 ’ 选择COM1
Mscomm1.Settings=“9600,N,7,2” ’ 设置通信参数
Mscomm1.Inputlen=0 ’ 读入接收缓冲区全部字符
Mscomm1.OutbufferSize=256 ’ 设置发送缓冲区大小
Mscomm1.InbufferSize=256 ’ 设置接收缓冲区大小
Mscomm1.PortOpen=True ’打开COM1
‘接收数据主程序
Private sub Mscomm1_oncomm
Select case NUMBER
Case 1
In_buffer$=接收数据(NUMBER)
Call mission2
Case 2
In_buffer$=接收数据(NUMBER)
Call mission3
Case 3
In_buffer$=接收数据(NUMBER)
…
Call任务n
Receive Data=Inbuffer
Mscomm1.Receive=False
End Select
…
End Sub
此外, vbservice1.exe在初始化时,设置Rthreshold属性为1,接受缓冲区受到数据时触发Oncomm事件以便接受数据,然后对接受到的数据进行分析和处理。
在分析数据通讯的准确性时,我们发现,由于外界干扰或电压波动等原因,PC机和单片机之间的通讯可能会出现错误,如接收缓冲区溢出、网络端口超速等。这些都可能引起运行错误。为此,在程序中添加错误处理子程序。通过通讯控件的OnComm事件可以捕捉和处理错误,具体在通讯过程中所发生的通讯错误信息是CommEvent属性返回的。当CommEvent属性值发生改变时,表明有通讯错误,就会产生OnComm事件。同时,可以利用自动引发OnComm事件的特点在接收过程中加入状态显示码。这样可以监视通讯线路状态,得到单片机和主机及单片机和单片机之间的通讯进程。
4、结束语
本文在项目开发过程中形成,系统投入运行后,效果良好。基于组态王与单片机的通讯系统,具有较高的使用价值,值得在工业控制中推广。