EsDAMPC-ZC1应用——IoT监测控制系统(二)

ZLG致远电子 2022-09-21 11:33

嵌入式智能物联网设备,不仅要采集上报数据,还应该具备远程控制、边缘计算、自动响应事件等能力,达到智能化、快响应等效果。

  简介

物联网监测控制系统, 不仅需要监测数据,将数据上报至物联网平台,还需要具备接收远程控制请求的能力。同时,智能化控制系统,还需要具备边缘计算能力,能够响应现场事件,并及时做出处理。
本文将基于 EsDA MPC-ZC1 应用——IoT 监测控制系统(一) ,继续扩展 远程控制 和 智能化控制 业务。


  业务扩展
本项目通过控制风机转动,带动空气流动,从而达到降温的效果,这也是最常用的降温方案。常见于设备机柜、厂房等场景。
一、硬件连接
在原有的电路基础上,增加了一个风机驱动电路,如下图所示。

实物连接图如下。

二、风机基础控制

风机的控制根据所选风机的类型,有多种方式,如直接DO开关、RS485通信控制等。此处选用DO输出,直接控制风机开关。

1. 节点介绍
1.1 gpio_out
gpio_out 节点,提供了 GPIO 输出节点,可以根据需求输出对应电平信号。
1.1.1 属性

  • 名称(name): 节点名称,用于索引查找本节点;

  • 显示名称(displayName): 用于画布上显示的名称;

  • GPIO序号(gpio_id):GPIO引脚ID;

  • 模式(mode):GPIO输出模式(推挽、开漏…);

  • 初始状态(init_stat): 引脚初始输出状态。

1.1.2输入

  • msg.payload: 指定输出状态,0:低电平,1:高电平。
2. 控制测试

通过简单的脚本控制 gpio_out 节点驱动外部风机。

2.1 添加节点

在已有的流图中添加 timer、fscript、gpio_out 节点到画布中。

2.2 配置节点
timer 配置如下,1s 周期输出。
fscript 配置如下,保持输出高电平。
gpio_out 配置如下。
  • GPIO序号(gpio_id):P4.9;
  • 模式(mode):push pull(推挽输出);
  • 初始状态(init_stat):low(初始低电平)。
2.3 下载流图
可以看到风扇已经被驱动起来。

3. 风机智能控制

风机智能化控制,主要实现两个基础功能:
  • 根据高温信号,自动启动进行降温;
  • 支持手动启动。
3.1 节点介绍
为了降低CPU的损耗,提高实时性,使用 complete 节点来取代原先的 timer。该节点用于监控指定的若干节点,当被监控的节点执行完成后,会触发 complete 节点执行。
3.1.1 属性
  • 名称(name): 节点名称,用于索引查找本节点;

  • 显示名称(displayName): 用于画布上显示的名称;

  • 监控节点(monitored_nodes): 指定需要监控的节点名称(json格式)。

3.1.2 输出

仅触发向下一节点执行,并不会传递任何数据。

3.2 流图测试

3.2.1 调整异常监测模块
为了更好的引用异常监测模块的高低温异常判定结果,给该模块脚本添加连个全局标志变量。
3.2.1.1 初始阶段
添加高低温异常全局标志 global.high_temp_anomaly、global.low_temp_anomaly,如下所示。

/* 初始化高温预警环境变量 */
global.high_temp = 30
/* 初始化低温预警环境变量 */
global.low_temp = 15

/* 高温异常信号 */
global.high_temp_anomaly = false
/* 低温异常信号 */

global.low_temp_anomaly = false

3.2.1.2 运行阶段

增加对高低温异常标志的处理,如下所示。

/* 实际温度与高温预警温度温差 */
temp_diff = msg.temperature - global.high_temp

/* 温度超过高温预警值,标记高温异常 */
if (temp_diff >= 0.3) {
    global.high_temp_anomaly = true
} else if (temp_diff <= -0.3) {
    global.high_temp_anomaly = false
}

/* 实际温度与低温预警温度温差 */
temp_diff = msg.temperature - global.low_temp

/* 温度低于低温预警值,标记低温异常 */
if (temp_diff <= -0.3) {
    global.low_temp_anomaly = true
} else if (temp_diff >= 0.3) {
    global.low_temp_anomaly = false
}

/* 输出报警信号 */
if (global.high_temp_anomaly || global.low_temp_anomaly) {
    output.payload = 1
} else {
    output.payload = 0

}

* 其中 ±0.3 的温差幅度,是为了扩大判定边界,起到软件滤波的效果,避免边缘状态引起频繁开关的情况。

3.2.2 完善风机控制逻辑
为了后续更好地接收远程控制请求,需要将风机控制模块的业务逻辑进一步完善。

3.2.2.1 初始阶段

声明一个 global.fan_control 全局控制标志,用于控制风机运转状态,总共包括以下3个状态:

  • on:手动启动风机;

  • off:手动关闭风机

  • auto:根据温度自动控制。

脚本如下:

global.fan_control = "auto"

3.2.2.2 运行阶段

根据 global.fan_control 的值,执行不同的风机控制逻辑。

if (global.fan_control == "on") {
    /* 手动启动 */
    msg.payload = 1
} else if (global.fan_control == "off") {
    /* 手动停止 */
    msg.payload = 0
} else {
    if (global.high_temp_anomaly == true) {
        /* 高温异常自动启动 */
        msg.payload = 1
    } else {
        /* 常温自动停止 */
        msg.payload = 0
    }

}

当控制标志不为 on 或 off 时,即为 auto 模式,此时,根据 global.high_temp_anomaly 高温异常标志来决定是否启动风机。

3.2.3 添加 complete 节点

配置如下,添加节点名称 abnormal_monitoring。

同时为异常监测节点添加一个节点名称 abnormal_monitoring。

3.2.4 下载流图

默认控制模式为 auto,并且默认高温预警温度为 30℃,通过外部热风机加热空气温度,观察运行情况。

可以看到当温度达到预警温度时,警报灯亮起,同时风扇也跟随启动进行降温。

4. 远程控制

上一期已经实现了数据上报至物联网云平台,本期为系统添加远程控制功能,其中包括3个控制命令:

  • 高温预警值配置(high_temp)
  • 低温预警值配置(low_temp)
  • 风机控制(fan_control)

4.1 云端添加命令

需要在物联网云平台(ZWS)添加所需控制命令,登录到:

https://www.zlgcloud.com
4.1.1 添加风机控制命令
打开设备类型页面。

点击编辑 iot_mpc_zc1 类型。

选择 设备控制设置 页面,并添加 fan_control 风机控制命令,如下所示。

为风机控制命令添加参数,如下所示。

总共3个参数选项 on、off、auto,与风机控制脚本的控制标志一致。
4.1.2 添加高低温预警配置命令

同样的操作,继续添加高温、低温预警配置命令,如下所示。

添加高温预警命令

高温预警命令参数

添加低温预警命令

低温预警命令参数

4.1.3 所有新增命令如下

4.2 响应远程控制

要接收到远程云平台的控制命令,需要用到 zws_iot_data_in 节点。
4.2.1 添加节点
添加 zws_iot_data_in、to_json、log 到画布中,如下所示:
4.2.2 配置节点

为 zws_iot_data_in 绑定一个配置,选择 zws_iot,与 zws_iot_data_out 使用同一个配置。

4.2.3 运行测试
点击运行,验证接收功能。

4.2.4 下发命令
打开设备列表。
进入设备详情。
进入设备控制页面,并下发风机启动命令,如下所示。
点击发送,确保发送成功。
此时,可以看到接收到云端下发的命令和参数。

4.2.5 添加解析节点

添加一个新的 fscript 节点,用于解析云端命令。

4.2.6 添加解析脚本

添加脚本,解析云平台下发的命令,同时将脚本节点命名为 fan_control,后续可用于触发风机控制数据流。

if (msg.name == "high_temp") {
    global.high_temp = f32(msg.value)
} else if (msg.name == "low_temp") {
    global.low_temp = f32(msg.value)
} else if (msg.name == "fan_control") {
    global.fan_control = msg.value
} else {
    aborted = 1

}

脚本通过判断命令名称 msg.name,来解析下发的命令,同时通过 global 对象修改对应的全局变量。
同时为风机控制数据流的 complete 节点添加一个监测节点名称 fan_control,如下所示。

4.2.7 下载流图

云端下发风机启动命令,效果如下。

停止命令。

配置为自动模式。

外部施加热风,观察风机变化。

4.2.8 完成

至此,完成了远程控制、智能降温等业务。为了可以更加深入的体会 MPC-ZC1 和 EsDA 的应用开发,在下一期文章中,计划将风机更换为大功率的厂房风机设备,真正地应用到实际场景中。

整理本期流图如下。

ABOUT PRODUCT

相 关 产 品

MPC-ZC1卡片式工控主板

高集成小尺寸,设计精巧,拓展灵活

参考价格:109元

长按购买

【版权声明】本文为ZLG开发者社区用户原创内容,未经授权不得转载。欢迎更多用户到社区交流互动、创作博文,一经采用,可获得百元京东E卡。

地址:https://developer.zlg.cn(长按复制到PC端打开)


评论 (0)
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦