前言:
通过配置DTU的脚本指令实现DTU定时自动采集,用户只需知道外接仪表、无需再单独增加控制器传感器的采集流程,然后通过编写脚本指令即可让DTU按照用户的流程自动采集、上传数据。脚本实现了基本的开关控制、延时控制、指令下发、循环控制、上报控制、插入自定义报文头、是否接收仪表应答、波特率改变等功能,能满足大部分仪表的采集需求。
此文档定义的脚本指令主要是为了实现DTU自动采集功能,在某种情况下,用户可能需要数据中心远程控制采集或者干预一些开关动作,众山DTU也支持用户的数据中心通过SHELL:+脚本的形式发送给DTU,DTU收到此数据会临时执行一次数据中心下发的脚本来实现远程采集和控制。如数据中心下发:SHELL:@W1=1@C=0102@W1=0DTU收到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采集指令:0103000100011234
脚本表示为:@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=0DI1下降沿触发采集
@I1=1DI1上升沿触发采集@I1=2DI1上升沿和下降沿触发采集
@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=0DI2下降沿触发采集@I2=1DI2上升沿触发采集
@I2=2DI2上升沿和下降沿触发采集@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=AA55@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=AA55@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默认为接收仪表的应答,可省略