DTU脚本编程_本地采集脚本指令详解

前言:
通过配置 dtu 的脚本指令实现 dtu 定时自动采集,用户只需知道外接仪表、无需再单独 增加控制器 传感器的采集流程,然后通过编写脚本指令即可让 dtu 按照用户的流程自动采集、上传数 据。脚本实现了基本的开关控制、延时控制、指令下发、循环控制、上报控制、插入自定义 报文头、是否接收仪表应答、波特率改变等功能,能满足大部分仪表的采集需求。
此文档定义的脚本指令主要是为了实现 dtu 自动采集功能,在某种情况下,用户可能 需要数据中心远程控制采集或者干预一些开关动作,众山 dtu 也支持用户的数据中心通过 shell:+脚本的形式发送给 dtu,dtu 收到此数据会临时执行一次数据中心下发的脚本来实 现远程采集和控制。如数据中心下发:shell:@w1=1@c=0102@w1=0 dtu 收到 shell:开 始的数据不会透传给 dtu 串口,而是执行一次脚本。--本文针对众山科技dtu脚本指令详解。
一、脚本格式: 
@cmd=value 
@:脚本头,每一条脚本指令都使用@开始。
 cmd:指令,为 1 或多个字符、数字组成的字符串,不区分大小写,下面详解每一条脚 本指令的含义。
 value:指令动作,指定指令需要执行的值。
二、脚本指令详解: 
e: echo 回显,此脚本指令控制 c 脚本指令下发给仪表的采集命令是否需要同时上报 
       给中心,value 为 1 表示需要回显,value 为 0 表示不回显。不使用此指令时默认为
      不回显。此指令为整个脚本全局生效指令,直到脚本结束。如果有些采集指令需要
       回显有些不需要回显只需要在相应的采集指令前加入此指令做相应的控制即可。
示例:
       @e=1 回显采集命令
       @e=0 不回显采集命令
m:标记,此脚本指令无实际动作,用于产生一个标记,和 l 指令配合完成 loop 循环
       控制。value 为 1-3,支持 3 个标记,循环嵌套时需要使用不同的标记,非嵌套循环
         可以重复使用。
示例:
        @m=1 产生 m1 标记点 
        @m=2 产生 m2 标记点
l: 循环脚本,此脚本指令控制循环到标记点的次数,用于需要对仪表进行多次重复数 据
采集的场合,比如需要对仪表连续采集 3 次数据。value 为 x,y 的格式,x 表示标 记点,值
为 1-3 表示 m1~m3 标记点,y 为循环次数。3 个标记点允许实现 3 层循环 的嵌套,不嵌套
的循环无限制,可以重复使用标记点。脚本执行到 l 指令时立即跳转到指定的 m 标记点,
直到达到循环指定的次数后,继续往后面执行。
示例:
        @l=1,3 表示跳转到 m1 标记,循环执行 3 次。 
        @l=2,2 表示跳转到 m2 标记,循环执行 2 次。
t: 数据上报中心控制,此脚本指令用于实现多次采集周期结束后一次性上报数据的 应用,比如
用户设置每 5 分钟采集一次数据,1 小时上报一次,就可以通过设置此 指令值为 12 来实现。
value 表示次数,默认为 1 次,即当次采集周期结束后立即上 报。此指令为整个脚本全局生效指
令,直到脚本结束,并且只允许出现一次此指令, 如果此脚本出现多次时,以最后一次的值为有
效。注意:此指令控制的上报次数以 一次脚本完全执行结束为一个周期,与 l 指令控制的循环执
行不产生影响。
示例:
@t=3 表示 3 个采集周期结束后才上报数据。
b: 波特率控制,此脚本指令用于外接多个不同波特率仪表或者仪表波特率与 dtu 串口 波特率不相
同时临时改变 dtu 的串口波特率。value 为波特率值,需要在发送采集 命令前通过此指令改变 dtu 
波特率与仪表波特率一致。当脚本执行结束,会自动 回到 dtu 默认的串口波特率。
示例:
        @b=38400
h: 数据头控制,此脚本指令用于在采集的仪表数据前加入用户自定义的数据头或用 户便于解析的
特征码等, 比如在进行多个仪表数据采集时加入分隔符便于区分不 同的仪表数据,value 为可见的
 hex 字符,比如 123 表示为 313233。此指令执行一 次立即失效,如果需要在不同的采集指令前插
入特征码需要分开加入此指令,特征 码可以相同也可以不同。
示例:
        @h=aa5501 
        @h=aa5502
c: 仪表下发命令,此脚本指令用于定义下发给仪表的采集命令内容,value 为可见的 hex 字符,执
行到此脚本 dtu 会通过串口把内容发送给仪表,同时如果回显为开 dtu 会立即把此内容加入上报队列。
示例:
        下发 modbus 采集指令:01 03 00 01 00 01 12 34 
        脚本表示为:@c=0103000100011234
a: 接收仪表应答控制,此脚本指令用于控制 dtu 是否接收仪表的应答,value 为 1 表 示接收应答,
value 为 0 表示不接收应答。不使用此指令时默认为接收应答。此指 令为整个脚本全局生效指令,直到
脚本结束,如果有些采集指令需要接收应答有些 不需要接收应答只需在相应的采集命令前加入此指令做
相应的控制即可
示例:
        @a=0 不接收后面的仪表应答数据
d: 延时控制,此脚本指令用于控制延时,dtu 发送采集命令后的延时控制或者等待 应答的延时控制。
value 为数字+单位的格式,单位有 s(秒)、m(分钟)、h(小时),dtu 遇到此指令后等待相应的延时值再
继续执行脚本。
示例:
        @d=10s (等待 10 秒) 
        @d=2m (等待 2 分钟) 
        @d=1h (等待 1 小时)
s: 立即上报数据控制,此脚本指令用于控制 dtu 立即上报仪表数据。value 为 1 表 示立即上报,默认
情况下 dtu 执行完 t 指令控制的采集次数后上报(t 默认为 1, 每次脚本执行结束都上报),用户在需
要分开上报多个仪表数据时或者 1 个仪表的 多条数据时,可以在发送采集命令后,dtu 已经收到仪表应
答时插入@s=1 来立即 上报之前的数据。
示例:
        @s=1 立即上报
w1:开关 1 控制,此脚本指令用于 dtu 控制外接仪表的电源。value 为 1表 示 开 , value 为 0 表示关。
示例:
        @w1=1 打开开关 1 
        @w1=0 关闭开关 1
注:需要硬件支持有开关控制的型号才支持此指令。
w2:开关 2 控制,此脚本指令用于 dtu 控制外接仪表的电源。value 为 1表 示 开 , value 为 0 表示关。
示例:
        @w2=1 打开开关 2 
        @w2=0 关闭开关 2
注:需要硬件支持有开关控制的型号才支持此指令。
w3:开关 3 控制,此脚本指令用于 dtu 控制外接仪表的电源。value 为 1表 示 开 , value 为 0 表示关。
示例:
        @w3=1 打开开关 3 
        @w3=0 关闭电开关 3
注:需要硬件支持有开关控制的型号才支持此指令。
i1:数字量 di1 状态上报,di1 触发控制,此脚本指令用于 dtu 采集 di1 的状态以及配 置 di1 的状态改变
时触发采集脚本的执行。 value 的值可为:?(报告状态)、 0 (下降沿触发采集)、1(上升沿触发采集)、2(下降沿和上升沿均触发采集)、
其他(不触发采集)。默认 di1 不触发采集。此指令可以出现多个,比如需要上报 di1 状态同时又需要配置 di1 的触发采集。如:配置 di1 为下降沿触发采集且同时 上报 di1 状态,可配置脚本@i1=0@i1=?
示例:
        @i1=? 采集 di1 状态,小提示:可在前面插入 h 指令加入便于识别的头。
        @i1=0 di1 下降沿触发采集 
        @i1=1 di1 上升沿触发采集 @i1=2 di1 上升沿和下降沿触发采集 
        @i1=其他 di1 不触发采集(默认,可省略),即使不触发采集也可在脚本 中插入
        @i1=?让 dtu 定时采集时报告 di1 的状态。
i2:数字量 di2 状态上报,di2 触发控制,此脚本指令用于 dtu 采集 di2 的状态以及配 置 di2 的状态改变时触发采集脚本的执行。 value 的值可为:?(报告状态)、 0 (下降沿触发采集)、1(上升沿触发采集)、2(下降沿和上升沿均触发采集)、 其他(不触发采集)。默认 di2 不触发采集。此指令可以出现多个,比如需要上报 di2 状态同时又需要配置 di2 的触发采集。如:配置 di2 为下降沿触发采集且同时 上报 di2 状态,可配置脚本@i2=0@i2=?
示例:
        @i2=? 采集 di2 状态,小提示:可在前面插入 h 指令加入便于识别的头。 
        @i2=0 di2 下降沿触发采集 @i2=1 di2 上升沿触发采集 
        @i2=2 di2 上升沿和下降沿触发采集 @i2=其他 di2 不触发采集(默认,可省略),即使不触发采集也可在脚本 中插入
        @i2=?让 dtu 定时采集时报告 di2 的状态。
三、应用案例 在众山 dtu 的串口外接 2 个 rs485 接口的仪表,2 个仪表使用 w1 开关控制电源,打开 电源需要 10 秒时间让仪表稳定,仪表为标准的 modbus 协议,modbus 地址分别为 01 和 02。 每个仪表需要采集 2 个寄存器数据,寄存器地址为 0000 和 0001,仪表 1 的 2 个寄存器采集 指令为: 0103000000010000 和 0103000100010000。仪表 2 的 2 个寄存器采集指令为: 0203000000010000 和 0203000100010000。一次采集需要连续采集 3 次数据,crc 校验需用户自己计算。仪表 1 的波特率为 4800,仪表 2 的波特率为 38400。 用户需求为每 1 小时采集一次数据,一次数据采集需要采集到 2 个仪表的 2 个寄存器数 据,并且需要采集 3 次,上报的数据需要回显采集命令,在每条数据前加入 aa55 以便于用 户解析数据,每条采集指令之间延时 3 秒,都需要接收仪表应答。
        首先需要设置 dtu 的仪表自动采集周期参数为 3600 秒。
        脚本设计如下,和默认值一致的脚本指令可省略
1:每次采集周期结束立即上报
@e=1@t=1@w1=1@d=10s@m=1@b=4800@h=aa55@c=0103000000010000@d=3s@h=aa5
5@c=0103000100010000@d=3s@b=38400@h=aa55@c=0203000000010000@d=3s@h=aa55 @c=0203000100010000@d=3s@l=1,3@w1=0 注:@t=1 可省略,默认即为 1 次采集周期结束立即上报。
2:每 3 小时上报一次数据 @e=1@t=3@w1=1@d=10s@m=1@b=4800@h=aa55@c=0103000000010000@d=3s@h=aa5 5@c=0103000100010000@d=3s@b=38400@h=aa55@c=0203000000010000@d=3s@h=aa55 @c=0203000100010000@d=3s@l=1,3@w1=0 注:3 次采集周期结束才上报一次数据,所以@t=3
3:每采集到 1 个仪表的 2 个寄存器数据时分开上报 @e=1@w1=1@d=10s@m=1@b=4800@h=aa55@c=0103000000010000@d=3s@h=aa55@c= 0103000100010000@d=3s@s=1@b=38400@h=aa55@c=0203000000010000@d=3s@h=aa55 @c=0203000100010000@d=3s@s=1@l=1,3@w1=0 注:采集完一个仪表的 2 个数据后用@s=1 立即上报
4:每采集到 1 个仪表的 1 个寄存器数据时分开上报 @e=1@w1=1@d=10s@m=1@b=4800@h=aa55@c=0103000000010000@d=3s@s=1@h=aa5 5@c=0103000100010000@d=3s@s=1@b=38400@h=aa55@c=0203000000010000@d=3s@s= 1@h=aa55@c=0203000100010000@d=3s@s=1@l=1,3@w1=0 注:每采集一个数据后用@s=1 立即上报
四、脚本指令默认值 1、@e=0 默认为不回显,用户不需要上报采集指令时可省略此脚本 2、@t=1 默认为 1 个采集周期结束立即上报数据,可省略 3、@a=1 默认为接收仪表的应答,可省略

小米10系列或于2月份亮相 并有望在Galaxy S20系列发布前亮相
华为荣耀畅玩7x发布会倒计时:千元全面屏手机又一猛将,怒怼小米5x、魅蓝note6
小体积压力传感器将推动物联网发展
脉冲弧焊电源的特点_脉冲弧焊电源的分类
【机器视觉】欢创播报:Meta发布新一代头显Quest Pro
DTU脚本编程_本地采集脚本指令详解
到底是一胎还是双胎?青岛雅典娜妇女儿童医院
安富利“中国芯•新发展”高峰论坛,7月11日齐聚上海
数字多用表基本量程的切换
小鹏超充实现100个城市终身免费充电服务
VR”暴风雨”将至 VR/AR+教育成为新热点
KYOCERA AVX 京瓷汽车用EV/HEV解决方案
探究塑料颗粒密度测试仪实验报告
韩国巨头三星在中国寻“破局”
华为云桌面带你开启云上办公
谷歌发布Lumiere人工智能文本视频生成器
安规电容出现膨胀的原因分析
ram和sram分别是什么
工信部:中国智能传感器最亟需突破的11大卡脖子技术(重点方向)
如何将ADC连接到8051单片机?