0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

物联网资讯 2018-06-01 17:02 次阅读

前言:

通过配置 DTU 的脚本指令实现 DTU 定时自动采集,用户只需知道外接仪表、无需再单独 增加控制器 传感器的采集流程,然后通过编写脚本指令即可让 DTU 按照用户的流程自动采集、上传数 据。脚本实现了基本的开关控制、延时控制、指令下发、循环控制、上报控制、插入自定义 报文头、是否接收仪表应答、波特率改变等功能,能满足大部分仪表的采集需求。

此文档定义的脚本指令主要是为了实现 DTU 自动采集功能,在某种情况下,用户可能 需要数据中心远程控制采集或者干预一些开关动作,众山 DTU 也支持用户的数据中心通过 SHELL:+脚本的形式发送给 DTU,DTU 收到此数据会临时执行一次数据中心下发的脚本来实 现远程采集和控制。如数据中心下发:SHELL:@W1=1@C=0102@W1=0 DTU 收到 SHELL:开 始的数据不会透传给 DTU 串口,而是执行一次脚本。--本文针对众山科技DTU脚本指令详解。

image.png

一、脚本格式:

@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 默认为接收仪表的应答,可省略




声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    微软生成式AI脚本GenAIScript的安装与配置

    GenAIScript 是一种结合了生成式人工智能(Generative AI,简称 GenAI)和脚本编写能力的新型脚本语言。
    的头像 发表于 11-07 09:13 124次阅读
    微软生成式AI<b class='flag-5'>脚本</b>GenAIScript的安装与配置

    shell脚本执行的三种方式及区别

    在Linux系统中,Shell脚本是一种非常实用的工具,用于自动化执行一系列命令。Shell脚本可以大大提高工作效率,简化复杂的任务。在这篇文章中,我们将介绍Shell脚本执行的三种方式及其区别
    的头像 发表于 08-30 15:24 732次阅读

    执行shell脚本的方式包括什么

    执行Shell脚本的方式有很多种,以下是一些常见的方法: 直接运行脚本文件 在命令行中,可以直接使用脚本文件的路径来运行脚本。例如: ./script. sh 这种方式需要确保
    的头像 发表于 08-30 15:17 265次阅读

    shell脚本编写之本地脚本的编写和执行

    用来指定使用的shell应用;echo "my first shell !"为脚本中编写的命令代码。2、执行在执行脚本时,脚本必须要有执行权限,首先给脚本赋予可执行
    发表于 08-28 09:36

    一个简单的Shiro RCE检测和利用脚本

    一个简单的Shiro RCE检测和利用脚本
    的头像 发表于 01-09 09:46 585次阅读

    shell脚本调试技巧

    0、专业脚本的规范格式 函数1函数2main函数main$* 1、使用dos2unix命令转换来自windows下开发的脚本 dos2unix默认是没有安装的,可以yum 安装
    发表于 12-28 16:57

    Shell脚本检查工具ShellCheck介绍

    ShellCheck是一个用于bash/sh shell脚本的静态分析工具,可以辅助检查脚本语法错误,给出建议增强脚本健壮性。
    的头像 发表于 12-27 13:43 2004次阅读
    Shell<b class='flag-5'>脚本</b>检查工具ShellCheck介绍

    Oracle如何执行sql脚本文件

    Oracle是一种关系型数据库管理系统,可用于存储、查询和管理大量的数据。在Oracle中,可以通过执行SQL脚本文件来一次性地执行多个SQL语句或者批量处理数据。在下面的文章中,我将详细介绍
    的头像 发表于 12-06 10:51 6391次阅读

    100个Linux Shell脚本总结

    不知道大家有没有发现,会编写shell脚本的运维,工资不会低,并且他的工作会很轻松!今天浩道跟大家分享每一个Linux运维应知必会的100个shell脚本,虽然你工作中可能用不上,但是却不能
    的头像 发表于 12-05 09:28 1193次阅读

    脚本调试工具有哪些?脚本调试工具怎么用?

    脚本调试是软件开发过程中非常重要的一环,它能帮助开发者快速定位并解决代码中的错误。大多数编程语言都提供了各种各样的脚本调试工具,本文将介绍一些常见的脚本调试工具以及它们的基本使用方法。
    的头像 发表于 12-01 14:40 818次阅读

    【ELF 1开发板试用】+ python及脚本编程

    ,因此使用 Shell 脚本有利于提高工作效率和系统管理效率。 此外,shell 脚本语言具有简单直接、语法简单、不需要很高编程技巧的特点,快速完成设计目标。 以控制板载3个LED灯闪烁为例,可使用VI
    发表于 11-28 10:24

    js脚本怎么在浏览器中运行

    JavaScript脚本。 一、JavaScript简介 JavaScript是一种高级的、直译型的计算机编程语言,用于Web页面的交互式功能。它专门为浏览器设计,能够在浏览器中直接运行,而无需编译
    的头像 发表于 11-27 16:46 2706次阅读

    脚本错误scripterror怎么解决

    脚本错误”(Script Error)通常是在运行或尝试运行一段脚本或程序时出现的错误。这种错误可能源于许多不同的原因,包括语法错误、运行环境问题、依赖库缺失等。解决脚本错误需要针对具体错误进行
    的头像 发表于 11-26 14:46 7946次阅读

    ie浏览器限制运行脚本

    IE浏览器限制运行脚本是指在Internet Explorer浏览器中,存在一些限制和安全策略,以保护用户的电脑免受恶意脚本的攻击。这些限制有助于防止在浏览器中执行恶意代码,保护用户的隐私和电脑
    的头像 发表于 11-26 11:19 1434次阅读

    为什么要学习TTL脚本

    2.1 TTL背景 所谓 TTL, 其实是 Tera Term Language 的缩写, 也就是 Tera Term 的专用脚本语言. 那么 Tera Term(Wiki)是个什么东西呢? 其实
    的头像 发表于 11-24 16:00 1100次阅读
    为什么要学习TTL<b class='flag-5'>脚本</b>