基于软逻辑的田间闸门锁控制器设计

2023-02-01 14:33李桐满丁文捷韩小龙
宁夏工程技术 2023年4期
关键词:电磁锁合闸闸门

李桐满,丁文捷,韩小龙,洪 斌,郁 凯

(1.武汉烽火技术服务有限公司,湖北 武汉 430070;2.宁夏大学 机械工程学院,宁夏 银川 750021;3.宁夏水利科学研究院,宁夏 银川 750021)

基于STM32、树莓派、89C51 和自由开发的逻辑控制器经常出现程序“跑飞”“死锁”的情况,主要原因是程序逻辑结构和内存使用不规范,编写的C 程序其功能和数据逻辑验证往往存在不足,致使代码执行的逻辑可靠性出现问题[1]。而工业PLC 使用了限制性内存变量及逐行式扫描逻辑结构,因此其控制逻辑可靠、信号处理过程稳定[2]。

国际电工委员会在IEC 61131—3 标准中统一了软逻辑控制器的编程方法和规则,提出可以利用计算机或嵌入式控制器的软件和硬件资源来实现硬PLC 的功能,这种技术被称为软逻辑[3]。近几年,欧洲地区已有70%~80% 的工程师在使用基于IEC 61131—3 标准编制的工业编程软件[4]。国内很多学者也在利用该标准编制软件,如雷路路[5]设计了三菱FX 系列嵌入式PLC 系统,该系统以STM32 为控制核心,利用PLC 编程工具开发了代码,并且成功实现了嵌入式PLC 的通信。林江静[6]给出了符合IEC 61131—3 标准的由梯形图到C 语言的转换算法,转化后的程序下载控制器可实现嵌入式PLC 功能。因此,基于IEC 61131—3 标准开发具有端口轮询处理功能、逐行式扫描逻辑结构、异常监测机制、变量规范、程序逻辑结构和功能块稳定运行等特点的编程规范就显得极为重要了。编程规范可以满足工业领域对控制器提出的通用性强、可靠性高、运行速度快和控制功能完善等需求,从而实现其应用价值。

为了高效利用水资源,减少灌溉期巡查管理模式下管理人员的工作量,本文提出了一种便于农户自助使用的田间闸门锁控制器系统[7-8]。该控制器基于文中提出的软逻辑编程规范及北斗通信协议对田间闸开闸和合闸过程进行了硬件设计,并且能够实现对系统的远程控制。

1 软逻辑编程规范结构分析

1.1 端口轮询处理

轮询处理是IEC 61131—3 标准中规定的控制器管理输入输出接口的方式[9]。轮询是指CPU 主动发出询问,并且依序询问每一个输入输出接口需要的相关数据传输服务请求。当设备的标志位指示为“准备正常”状态时,CPU 会向该设备提供输入输出接口服务。

1.2 逐行式扫描逻辑结构

IEC 61131—3 标准要求CPU 设置一部分应用数据存储单元来存储应用程序执行期间输入/输出(I/O)映像的数据状态及定时器、计数器、条件设定值等信息,程序执行过程如图1 所示。由图1 可知,程序按顺序执行代码,但上一条指令是否成功执行不会影响下一条指令的执行。

图1 程序执行过程

1.3 异常监测机制

软逻辑编程需要使用看门狗功能块,用于监视程序执行过程中出现的异常情况。当系统受到外部干扰或程序进入死循环时会自动激活看门狗功能并中止当前任务和对应程序,然后重新启动系统[10]。

2 软逻辑编程规范开发

2.1 变量规范开发

变量规范开发主要包括两个步骤,具体如下。

(1)定义接口变量。接口变量包括输入口单元IO、输出口单元QO、位存储器单元M 变量、定时器接口变量及计数器接口变量。本文使用C 语言中的位域定义了字节中的位操作,同时采用了关键字volatile 指令,该指令不会因编译器的优化而被省略且程序执行时会直接读取变量值。此外,系统规定接口变量的输入输出状态分为有输入(“1”)和无输入(“0”)两种。输入存储器的4 种引用方法如表1所示。

表1 输入存储器引用方法

(2)本地变量声明。本地变量分为局部存储器单元与全局存储器单元,其仅供程序内逻辑使用,不需要和外部串口及网络进行通信。

2.2 端口初始化配置

I/O 端口需要进行初始化逻辑定义,其端口配置如表2 所示。

2.3 程序逻辑结构设计

硬PLC 的编程语言中大量使用了if…else 等选择语句及for…while 等循环语句,并且有严格的使用规范,如for 语句的循环嵌套最多为8 层[11]。本文根据IEC 61131—3 标准制定了软逻辑编程语言的逻辑规范:if…else 条件判断语句可嵌套2 层,for 循环语句可嵌套2 层,while 主循环语句有且只有1个;条件判断式可使用接口变量和本地变量。

2.4 功能块函数编程设计

2.4.1 定时器功能块函数 系统设定定时器的定时值为pt,定时单位值为acc,则定时时间T=pt×acc,单位为ms。定时器设定情况见表3。

表3 定时器设定表

本文以定时器2 为例来说明定时器调用程序的流程(图2)。调用定时器2 时,首先打开定时器中断TIM2_Control(1);然后调用定时器封装函数,确定T[2].bits._0 的值;最后再执行后续的程序体。此外,定时器使用结束后要关闭定时器中断TIM2_Control(0),目的是减少定时器中断之间的串扰。

图2 定时器2调用程序流程图

2.4.2 计数器功能块函数 硬PLC 计数器是实现次数动作的计数器。编程规范规定计数器共有3 种类型,即加计数器、减计数器和加减计数器,计数值为pv,其规范如表4 所示。

表4 计数器规范

2.5 软逻辑规范实例化程序

以下为部分软逻辑规范实例化程序。

头文件#include “PLC.h”

全局变量声明;

程序单元(本地变量)

{本地变量声明;

设备初始化;

while(1)

{I_filter(1);//输入口扫描函数;

程序逻辑主体;

PLC_IO_Refresh();}}//调用输出刷新函数;

……

3 田间闸门锁控制系统

本文基于软逻辑规范设计了田间闸门锁控制系统。该系统通过北斗通信设备与服务器及用户终端相互配合[12],其组成示意图如图3 所示。

图3 田间闸门控制系统组成示意图

3.1 控制系统硬件设计

田间闸门锁控制系统硬件设计步骤:北斗通信模块将检测到的水量数据传输至服务器,服务器接收水量数据并储存;服务器通过北斗通信模块传送闸门操作指令,控制器操控第一霍尔传感器接收磁块靠近信号和超声波传感器距离减少信号来实现开闸操作,或者是控制器操控第二霍尔传感器接收磁块靠近信号和超声波传感器距离增加信号来实现合闸操作;电磁锁配合完成闸门开合,从而实现农户自助灌溉管理和灌溉过程中水量的精确统计。田间闸门锁控制器硬件连接示意图如图4 所示。

图4 控制器硬件连接示意图

3.2 控制系统流程设计

3.2.1 开合闸 开合闸流程图见图 5。由图5 可知:首先控制器接收开锁指令,控制电磁锁开锁;然后农户对水闸装置进行相应的操作;传感器配合电磁锁实现水闸装置的开闸或合闸动作,同时向服务器发送水量数据,包括瞬时流量、累计流量和当前水位,数据为IEEE—754 标准浮点数,即先将单精度浮点数据转换为16 进制数据报文,再发送至服务器。

图5 开合闸流程图

图6 关闭电磁锁流程图

图7 主循环程序流程图

图8 开闸应答程序流程图

3.2.2 打开电磁锁 控制器接收到服务器发送的开闸或合闸指令后,控制电磁锁的锁销从挂环中脱离,实现闸门动作。

3.2.3 关闭电磁锁 田间闸门锁控制器的感应距离L会随着闸门的升起和放下而发生变化。首先,控制器控制电磁锁打开,闸门在低位时的第一预设距离为140 mm

4 程序开发

连接外部设备的I/O 端口分配表见表5。系统功能参数数据表见表 6。

表5 I/O端口分配表

表6 系统功能参数数据表

4.1 主循环程序

本文采用Keil MDK V5 软件进行了系统程序编制,主要涉及输入输出初始化PLC_IO_config()、RS 485_Init(19 200)、定时器初始化TIM_config_Init()、ADC 初始化Adc_Init()、超声波初始化Ultrasonic_Init()、看门狗初始化IWDG_Init(7,1 000)等函数。主循环程序流程图如图 7 所示。

相比传统程序,软逻辑程序只使用了1 个主循环while 结构,并且采用逐行循环扫描方式实现了输入接口扫描、程序体执行及输出接口刷新过程。此外,程序中的if 逻辑判断语句只嵌套了1 层。综上可知,程序设计中的变量规范且采用了看门狗监测程序,符合软逻辑编程规范。

4.2 开闸应答程序

开闸程序也采用了1 个主循环while 结构及逐行循环扫描方式,并且接口变量规范。其中,定时器4用来配合监测超声波距离值,并且看门狗监测程序等内容符合规范要求。开闸应答程序流程图如图 8所示。

5 系统测试

田间闸门锁控制器的测试工作主要包括以下几个部分。

(1)内存变量测试。程序编译后,内存变量所占存储空间为28 856 字节,未超出总内存。此外,程序中无动态内存变量申请,内存变量的使用符合内存管理规范。

(2)端口程序测试。测试中,Q00 端口输出高电平,固态继电器电路导通并控制电磁锁打开,实物见图9。此外,超声波传感器、霍尔传感器、液位传感器可以正常采集数据,并且以上传感器采集数据的逻辑判断过程符合程序逻辑结构设计流程。

图9 硬件连接实物图

(3)通信程序测试。经测试,RS485端口可以稳定接收与发送北斗报文数据。串口1监测传感器数据的界面如图10所示,其中左侧数据监测区用于检查闸门操作信息,右侧通信数据区用于检查服务器通信报文。

图10 串口1监测界面

(4)功能块测试。经过测试,采用超声波触发信号的定时器能够正常工作。测量距离数据见图10。

(5)程序可靠性测试。系统进行了168 h的串口测试(图10),串口共接收424 375 937条数据。本文通过查看数据记录,可知程序执行过程中没有触发异常监测机制,程序没有出现“跑飞”“卡死”等故障,即长时间运行测试达到了预期的可靠性目标。以上程序测试的主要结果如表7所示。

表7 程序测试结果

6 结论

本文给出了软逻辑编程规范,并且根据田间闸门锁控制器的控制要求,制定了利用北斗通信协议对开闸和合闸过程进行控制的硬件设计方案,制定了控制器的主循环程序和开闸应答程序,实现了远程控制电磁锁打开和关闭的操作。主要结论如下。

(1)定时器4 实现了超声波触发信号每隔20 µs重复开关1 次的操作。此外,程序可连续运行168 h,验证了编程模型逻辑、变量规范、端口初始化配置、程序逻辑结构、定时器功能块函数、异常监测机制和其他功能函数的可靠性。

(2)经项目组调整,库文件程序的正确率提高了20%,为C 程序库文件的便捷调用提供了依据,并且解决了由定时器触发中断时间短、模式选择多,传感器数据采集不到位,输出端口和开合闸指令设计不足等因素引发的运行稳定性及程序移植稳定性问题。

猜你喜欢
电磁锁合闸闸门
我终于会过地铁闸门了
基于FTA的电磁锁故障分析
负极刀闸电磁锁故障分析及处理
地铁安全门电磁锁的优化研究
基于DCS系统的厂用电设备防误配置策略
把住医保基金水池闸门
找准入口,打开思路的闸门
基于Hilbert变换的断路器选相合闸技术的研究
我国专家发现药物成瘾新机制,找到“闸门”开关
一次不合闸故障引发的电池组更新问题