# 3. 高级功能案例

本章将介绍 AWStudio 开发的 AWFlow+AWTK 应用程序的高级案例,以此演示一些特有功能点,目前包括以下案例:

  • 基于 Modbus 的温湿度采集设备。
  • 基于 ZWS 云的数据传输。

# 3.1 基于Modbus的温湿度采集设备

# 3.1.1 案例介绍

本案例基于温湿度变送器(传感器)实现了温湿度采集应用。该传感器采用 RS485 接口与设备连接,并使用 ModbusRTU 协议进行数据通信。此处我们主要讲解在 AWStudio 中如何基于 ModbusRTU 协议通信,定时采集温湿度数据,帮助读者了解 AWFlow Designer 中 Modbus 相关节点的用法。

# 3.1.2 硬件设备

本案例中用到的硬件设备主要有 显控一体机温湿度变送器 ,它们的介绍详见下文:

1. 显控一体机

显控一体机主要用于运行 AWFlow+AWTK 低代码应用程序。在本案例中,它通过 RS485 接口与温度传感器连接,使用 ModbusRTU 协议进行通信,定时采集温湿度数据,设备如下图所示:

图3.1 显控一体机
图3.1 显控一体机

2. 温湿度变送器

温湿度变送器(传感器)主要用于测量外部温度并通过 RS485 接口与显控一体机连接,使用 ModbusRTU 协议进行通信,显控一体机会定时从传感器上采集温湿度数据,传感器如下图所示:

图3.2 温湿度变送器
图3.2 温湿度变送器

# 3.1.3 基于Modbus实现数据采集

为了方便演示,这里定时每一秒采集一次温湿度变送器的数据并将其显示到界面上,首先在工作区中双击打开 AWFlow 项目,进入 AWFlow Designer 后,新建一张流图。

步骤一:将"节点列表"中"th_transmitter_in"类型的节点拖拽到流图编辑区,设置如下:

  • 设置"从机ID"属性为 1 ,此处为温湿度变送器的ID,可根据实际情况填写。
  • 设置"温度寄存器地址"属性为 0 。
  • 设置"湿度寄存器地址"属性为 1 。此处两个寄存器地址由温湿度变送器决定。
  • 设置"输出周期"属性为 1000 ,每 1 秒输出一次读取数据。
  • 点击"modbus配置参数"属性右边的编辑按钮,进入"modbus_master_rtu"节点的编辑。

此处使用的节点为该温湿度变送器专用,如果为其他设备,请使用"modbus_master_in"节点与"modbus_data_in_convert"节点搭配实现modbus通信。

图3.3 配置th_transmitter_in
图3.3 配置th_transmitter_in
  • 设置通信串口"端口"属性为"/dev/ttyZMP1",这里填写的是设备与温湿度变送器连接后的串口驱动名称,读者请根据实际情况填写。
  • 设置"波特率"为 9600,由温湿度变送器的通信协议规则决定。
  • 设置"数据位"属性为"8bit",由温湿度变送器的通信协议规则决定。
  • 设置"校验位"属性为"none",由温湿度变送器的通信协议规则决定。
  • 设置"停止位"属性为"1bit",由温湿度变送器的通信协议规则决定。
图3.4 配置modbus参数
图3.4 配置modbus参数

步骤二:th_transmitter_in 节点会直接将处理好的温湿度数据传递到下个节点,接下来只需参考上一章的内容,使用锁存器(即"hold"节点)将采集到的温湿度值显示到界面上即可。

th_transmitter_in节点传递出来的温湿度数据分别为"msg.temperature"和"msg.humidity"

图3.5 使用锁存器保存温湿度
图3.5 使用锁存器保存温湿度

# 3.1.4 运行结果

FlowModbus-Demo 温湿度采集设备运行的效果如下图所示:

图3.6 运行效果
图3.6 运行效果

# 3.2 基于ZWS云的数据传输

# 3.2.1 案例介绍

本案例是通过 AWFlow Designer 软件模拟与 ZWS 云进行数据的收发,此处我们主要讲解如何使用 ZWS 云管理设备,并通过 AWFlow Designer 实现与 ZWS 云进行数据交流,帮助读者了解 AWFlow Designer 中 ZWS 云相关节点的用法。

# 3.2.2 流图数据上传到云端(ZWS云)

将设备采集到的数据上传到云端是物联网应用场景中常见的需求,下面我们以 ZWS云 (opens new window) 为例,介绍如何把 AWFlow 流图上的温度数据上传到云端。

1. 在ZWS云上添加设备

为方便后续演示将上文2.1章节中随机生成的温度值上传至ZWS云,我们需要登录ZWS云并在上面添加一台云设备,步骤如下:

步骤一:登录 ZWS云 (opens new window) 后,在左侧的菜单栏中选择【设备管理】->【设备类型】,在"设备类型"页面点击"添加类型"。

步骤二:在弹出的"添加设备类型"对话框中,将"类型模板"设置为"invert";将"类型名称"设置为"temp_iot",点击"确认"按钮。

步骤三:添加成功后,可以在设备类型列表中看见"temp_iot"类型,如下图所示:

图3.7 添加设备类型
图3.7 添加设备类型

步骤四:点击"temp_iot"类型"操作"列中的编辑按钮,进入设备类型的详情页面,选择"数据点配置"页面,可以看到设备类型本身自带的默认数据点,我们后续将使用自带的"逆变器温度(temperature)"演示数据上传。

如果需要上传其他数据,可以自行添加数据点,比如"室内温度(indoor_temperature)"和"设定温度(setting_temperature)"等,如下图所示:

图3.8 配置设备类型的数据点
图3.8 配置设备类型的数据点

步骤五:在页面的左侧的主菜单中,切换到【设备管理】->【设备列表】,点击"设备列表"页面中的"添加设备"按钮,然后在"添加设备"页面中,设置以下信息:

  • 将"设备类型"设置为"temp_iot";
  • 将"设备名称"设置为"温度采集终端";
  • 将"设备ID"设置为"temp_iot_0";
  • 选择系统生成秘钥。

步骤六:点击下方的"保存"按钮,设备添加完毕。此时返回"设备列表"页面即可看见刚才添加的设备并显示离线状态,其中"设备秘钥"会在后续上传数据时用到,如下图所示:

图3.9 成功添加设备
图3.9 成功添加设备

完成以上ZWS云上的准备工作后,我们便可以开始编辑流图了,步骤详见下文。

2. 将数据上传到ZWS云

将数据上传到 ZWS 云需要用到 AWFlow 中的 zws_iot 节点和 zws_iot_data_out 节点,它们分别用于配置 ZWS 云以及上传指定数据。

此处依旧以实现一个空调控制器为例,假设需要把上文 2.1 章节中随机生成的温度值上传到 ZWS 云上,该温度值保存在 temp_iot_0 设备的 temperature 数据点中,实现步骤如下:

步骤一:参考上文 2.1.1 章节每秒钟随机生成一个温度值,其中 random_number 节点生成的随机数的主题属性为 temperature。

步骤二:将"节点列表"中的"fscript"类型的节点拖到流图编辑区,该节点需要构建下一节点"zws_iot_data_out"所需的数据包,这里以"Key-Value"的形式上传数据,所需数据属性如下:

(1) msg.payload:需要上传的数据值,此处指随机生成的温度值,由前面的 random_number 节点提供。

(2) msg.key_name:需要上传的数据值名称,需要与 ZWS 云上的设备数据点名称一致,此处指上文在 temp_iot 设备中添加的数据点 temperature。

(3) msg.zwsPayloadType:该属性为 int 类型变量,表示上传数据的类型,此次设置为 2,表示 double 类型,更多类型详见"zws_iot_data_out"节点的帮助说明。

"fscript"节点生成上传所需数据包的代码如下:

/* msg.topic 为上一个节点传输过来的温度名称,即需要上传设备数据点名称 */
/* 例如:temperatuer、indoor_temperature、setting_temperature */
/* 此处将其赋值给 msg.key_name,下一节点会根据该名称将数据上传至云端指定设备数据点 */
msg.key_name = msg.topic;
/* 设置 msg.zwsPayloadType 为 2,表示上传的数据类型为 double */
msg.zwsPayloadType = 2;
图3.10 生成上传所需的数据包
图3.10 生成上传所需的数据包

步骤三:将"节点列表"中的"zws_iot_data_out"类型的节点拖到流图编辑区,设置如下:

  • 设置"设备配置"属性,如果没有添加过节点,则需要手动添加。
  • 设置"数据上报方式"属性为"Key-Value",通过该形式上传数据,提供 payload、key_name 和 zwsPayloadType 属性,详见上一步。
图3.11 将数据上传至ZWS云
图3.11 将数据上传至ZWS云

在本项目中,需要添加新的“zws_iot”节点,在“设备配置”一栏选择“添加新的zws_iot节点,然后点击右边的按钮,进入配置页面

  • 设置"是否连接zws平台"属性为"connected",即链接 ZWS 云。
  • 设置"设备类型"属性为"temp_iot",即 ZWS 云中添加的设备类型,它定义了设备的各种属性。
  • 设置"设备id"属性为"temp_iot_0",即 ZWS 云中添加的设备,ZWS 通过 设备类型+设备ID 识别一个唯一的设备。
  • 设置"设备密钥"属性为 ZWS 云中添加设备时自动生成的秘钥,在链接 ZWS 时会对该秘钥进行校验,确保设备链接是合法的,此处的秘钥为"4d4382d0-7d92-11ec-959e-c1c503b62d13"。

以上信息均需要读者根据实际情况填写,无需跟本文一致,配置完毕后,点击添加,并将"zws_iot_data_out"节点的“设备配置”属性修改为新添加的"zws_iot"节点

图3.12 配置ZWS云
图3.12 配置ZWS云

3. 运行效果

此处上传数据与 GUI 界面无关,可以直接使用 AWFlow Designer 中内置的模拟器来运行流图,如下图所示:

图3.13 模拟运行流图
图3.13 模拟运行流图

运行成功后,可以在 ZWS 云的设备列表中进入温度采集终端(设备ID:temp_iot_0)详情页面,如下图所示:

图3.14 查看设备详情
图3.14 查看设备详情

然后切换到实时数据页面,并选择"data数据",可以看到实时上传的 temperatuer 数据,如下图所示:

图3.15 查看实时数据
图3.15 查看实时数据

# 3.2.3 云端(ZWS云)发送命令到流图

ZWS云 (opens new window) 除了可以保存设备上传的数据外,还可以向设备发送命令,常用于远程控制。比如一个使用 AWFlow 技术实现的空调机,我们可以在云端远程开关空调。下面以ZWS云 (opens new window)为例,介绍如何从云端控制 AWFlow 流图运行。

1. 在ZWS云中发送命令

首先请参考上文 3.2.2 章节注册并登录 ZWS云 (opens new window),添加对应设备,此处仍然以 3.2.2 章节中添加的 temp_iot_0 设备为例,假设需要从 ZWS 云上发送温度值给设备,步骤如下:

步骤一:登录 ZWS云 (opens new window) 后,参考上一章节的内容,在 ZWS 云的设备列表中进入温度采集终端(设备ID:temp_iot_0)的详情页面。

步骤二:在设备详情页面中切换到"设备控制",设置如下:

  • 设置"设备命令"为"透传命令(raw)"。
  • 设置"编码格式"为"ascii"。

完成以上设置后,可以在"数据"编辑框中输入想要发送的数据,例如此处发送温度值"33",然后点击确定按钮即可发送,如下图所示:

图3.16 在ZWS云中发送命令
图3.16 在ZWS云中发送命令

2. 接收ZWS云发送的命令

在流图中接收 ZWS 云发送的命令需要用到 AWFlow 中的 zws_iot 节点和 zws_iot_data_in 节点它们分别用于配置 ZWS 云以及接收数据,实现步骤如下:

步骤一:打开 AWFlow Designer,将"节点列表"中的"zws_iot_data_in"类型的节点拖到流图编辑区,并该节点的"设备配置"属性设置为上一节所添加的“zws_iot”,如下图所示:

图3.17 zws_iot_data_in节点
图3.17 zws_iot_data_in节点

步骤二:将"节点列表"中的"log"类型的节点拖到流图编辑区,并与上一步骤中创建的"zws_iot_data_in"节点相连,用于在模拟运行流图时打印"zws_iot_data_in"节点收到的数据,如下图所示:

图3.18 log节点
图3.18 log节点

3. 运行效果

此处上传数据与 GUI 界面无关,可以直接使用 AWFlow Designer 中内置的模拟器来运行流图,方法详见 3.2.2 章节。

运行成功后,按照上文中的步骤,在 ZWS 云中给指定设备(此处为 temp_iot_0)发送温度值 33。此时,可以在 AWFlow Designer 的调试页面看到"zws_iot_data_in"节点收到的数据,如下图所示:

图3.19 接收ZWS云发送的命令
图3.19 接收ZWS云发送的命令

需要注意的是,由于 ZWS 云目前仅支持透传命令,因此"zws_iot_data_in"节点只能收到字符串类型的数据,在实际应用中,用户可借助"fscript"节点自行解析。