5.1.1 主控程序控制逻辑分析
根据系统的控制要求和组态王的特性,我们可以从主控程序和事件触发程序两条主线建立系统的控制逻辑。根据图4.2系统的总体架构上我们可以看出,在将16个内存开关量输出的过程中所做的操作是无差别输出,即是每次都做相同的操作,16个开关量的值同时被赋到了I/O变量上。其工作过程能用主程序的单循环来实现,不断地将当前的控制参数汇总、转换并传送给下位控制系统。
5.1.2 事件触发子程序控制逻辑分析
而在前端的操作显示界面上,显示屏的显示内容是由16个检测点的选择来实现的,选择不同的点对应不同被控设备的参数,选择相同的点根据对应被控设备的状态不同而具有不同的参数。也就是说,一个检测点的参数状态与一个被控设备的状态是相对应的,被控设备的状态的改变同样会改变对应测量点的参数。分析至此,可以发现,前端的显示程序可以套用事件触发子程序的模板。把监测点选择作为条件,满足触发条件时(即选择了相应的检测点),执行事件触发子程序。事件触发子程序根据内存中表征16路被控信号的16个开关量的值,给显示屏的容器赋相应的值,支持动态赋值。
5.2 代码实现
组态王的组态控制系统是由前端界面和后端程序所构成的,前端多以控件为主,搭载着内存变量,这些控件和内存变量将前后端程序综合起来。接下来将前面分析所得的控制逻辑用组态王的程序实现。
5.2.1 主控程序的代码实现
主程序的代码如图5-3所示:
图 5-3
变量说明:变量 类型 范围 备注
SW1~SW16SWT
SWOUT 内存开关量(离散)内存模拟量
I/O模拟量 0~1>65535
>65535 对应16路被控设备的状态
十进制数,用于汇总16路开关量的状态
用于输出汇总的16路开关量
程序简单短小,却是本系统的主心骨,实时控制下位控制系统中的16个被控设备。SW1~SW16挂载在前端界面的十优尔个开关上,实时接收来自用户的指令组合。前端空间配合后端程序,完成从人手操作的命令到ASCII码命令的生成发送。
5.2.2 事件触发子程序的代码实现
本系统有16个检测点,应该有16个事件触发子程序,这里举一个作为例子。当第一个检测点被按下时,执行第一个事件触发子程序。
代码如图 5-4~图5-6所示
图5-4 条件成立时
图5-5 条件存在时
图5-6 条件消失时
变量说明:
变量 类型 范围 备注
keySW1DIS_STRING
state 内存模拟量
内存开关量(离散)
内存字符串
内存模拟量 >655350~1-
>65535 事件触发条件
第一个被控设备的状态
搭载在显示屏上的容器
中间变量,用于动态显示
程序语言看起来并不是很直观,我们可以引用事件触发子程序的原理图,填上相对应的条件和子程序,便于直观了解,如图
图 5-76 操作界面设计
由前面的分析可知,该系统的指令来源都是来源于前端的操作界面。用户通过操作前端界面,指令由程序通过串口,到达下位系统,达到控制被控设备的目的。前端界面的设计直接关系到了用户对设备的操控的准确度和效率。在第5章中我们分析了该系统的控制逻辑结构,其中内存开关量的值是挂载在前端界面的16个开关上,因此前端界面上必须有16个按键开关(可复选)。同时在存在另外的16单选按键,用于选择要显示的点的参数。可以设计界面如图6-1所示。 基于组态软件的汽车故障设置检测系统设计(7):http://www.youerw.com/tongxin/lunwen_4078.html