简介
常见的串口服务器产品,在实现了数据透传业务的同时,会根据不同的应用场景扩展一些额外的辅助业务,如DI/DO、ADC采集等。
业务扩展
1. 命令格式
https://awtk.zlg.cn/pro/docs/awtk_docs/FScript/fscript.html
2.11 属性
名称(name): 节点名称,用于索引查找本节点;
显示名称(displayName): 用于画布上显示的名称;
加载时(Initialize): 节点加载时运行的脚本;
运行时(Function): 节点每次运行时的脚本;
销毁时(Finalize): 节点销毁时运行的脚。
2.2 log
名称(name): 节点名称,用于索引查找本节点;
显示名称(displayName): 用于画布上显示的名称;
控制台(log_to_console): 输出到系统控制台;
客户端(log_to_client): 输出到AWFlow Designer客户端。
2.2.2 输入
3. 流图实践
3.2 下载并在线运行
选择下载流图,并保持在线运行,这样可以通过AWFlow Designer 客户端接收到 log 节点的消息。
通过串口助手,发送数据。
可以通过 AWFlow Designer 的调试窗口观察到串口发送的数据。
3.3 添加命令解析脚本
/* MQTT和串口节点输出为pointer类型,转换为string */
rbuf = rbuffer_create(msg.payload, msg.payloadLength)
s_payload = rbuffer_read_string(rbuf)
/* 以 @ 分隔符,获取第一段字符串作为命令 */
msg.cmd = one_of(s_payload, 0, "@")
/* 以 @ 分隔符,获取第二段字符串作为参数 */
msg.arg = one_of(s_payload, 1, "@")
至此,实现了从字符串中解析出命令和参数的功能。
二、系统控制
1. LED控制业务
通过控制命令 msg.cmd 来指定所需要控制LED设备,msg.arg 转换为LED控制参数。
/* LED 控制命令作为设备名称,如 led_red@on */
output.device_name = msg.cmd
if (msg.arg == "on") {
/* 点亮LED */
output.payload = 1
} else if (msg.arg == "off") {
/* 熄灭LED */
output.payload = 0
} else {
/* 终止数据流 */
aborted = 1
}
1.3 下载验证
通过串口助手,发送控制命令。
可以看到,板载的 LED 已经能够正确响应串口的控制命令。
*注意:控制命令为字符串类型,所以命令需包含字符结束符 '\0’。
系统控制小节中,在完成LED控制的同时,可以观察到,MQTT服务器同样接收到了控制命令,但这并非所期望的效果。
为了解决这个问题,需要实现数据分发功能,对数据进行选择。可以通过 aswitch 节点实现数据流的流向选择。
1.1 aswitch
名称(name): 节点名称,用于索引查找本节点;
显示名称(displayName): 用于画布上显示的名称;
检查全部(check_all): 检查所有条件;
规则表达式(rules): 数据分发依据的逻辑表达式;
输出数量(outputs): 数据分发路径数量。
2. 分发规则
禁止检查所有条件,即当遇到条件满足时,则不继续检查;
msg.cmd == "led_red"
msg.cmd == "led_green"
msg.cmd == "led_blue"
msg.payloadLength > 0
可以看到,在最后一条规则中,通过 msg.payloadLength 来匹配透传数据。
2.2 接入数据分发节点
2.3 下载验证
通过串口助手,分别发送控制命令和透传数据。
四、远程控制
前面完成了 数据解析 、系统控制、数据分发 等3大扩展业务模块,但是都是基于串口来实现,是否可以同时支持MQTT远程控制业务呢?
很显然,是可以的,而且通过复用前面的模块,可以很简单的实现远程控制功能。
1. 扩展数据分发条件
利用 msg.topic 属性来判断是否有来源于MQTT服务器的透传数据,将数据分发数量扩充到 5。
将MQTT下发的数据接入到 数据解析 模块,同时将串口输出连接到数据分发的MQTT透传输出口上,如下所示进行调整。
3. 下载验证
通过MQTTX,分别发布LED控制命令和透传数据。
可以看到,板载的 LED 已经能够正确响应串口的控制命令。
同时串口端,仅收到透传数据。
至此,完成了远程控制功能。
【版权声明】本文为ZLG开发者社区用户原创内容,未经授权不得转载。欢迎更多用户到社区交流互动、创作博文,一经采用,可获得百元京东E卡。
地址:https://developer.zlg.cn(长按复制到PC端打开)