0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

DTU腳本編程_本地采集腳本指令詳解

物聯(lián)網(wǎng)資訊 ? 2018-06-01 17:02 ? 次閱讀

前言:

通過配置 DTU 的腳本指令實現(xiàn) DTU 定時自動采集,用戶只需知道外接儀表、無需再單獨 增加控制器 傳感器的采集流程,然后通過編寫腳本指令即可讓 DTU 按照用戶的流程自動采集、上傳數(shù) 據(jù)。腳本實現(xiàn)了基本的開關控制、延時控制、指令下發(fā)、循環(huán)控制、上報控制、插入自定義 報文頭、是否接收儀表應答、波特率改變等功能,能滿足大部分儀表的采集需求。

此文檔定義的腳本指令主要是為了實現(xiàn) DTU 自動采集功能,在某種情況下,用戶可能 需要數(shù)據(jù)中心遠程控制采集或者干預一些開關動作,眾山 DTU 也支持用戶的數(shù)據(jù)中心通過 SHELL:+腳本的形式發(fā)送給 DTU,DTU 收到此數(shù)據(jù)會臨時執(zhí)行一次數(shù)據(jù)中心下發(fā)的腳本來實 現(xiàn)遠程采集和控制。如數(shù)據(jù)中心下發(fā):SHELL:@W1=1@C=0102@W1=0 DTU 收到 SHELL:開 始的數(shù)據(jù)不會透傳給 DTU 串口,而是執(zhí)行一次腳本。--本文針對眾山科技DTU腳本指令詳解。

image.png

一、腳本格式:

@cmd=value

@:腳本頭,每一條腳本指令都使用@開始。

cmd:指令,為 1 或多個字符、數(shù)字組成的字符串,不區(qū)分大小寫,下面詳解每一條腳 本指令的含義。

value:指令動作,指定指令需要執(zhí)行的值。


二、腳本指令詳解:

E: ECHO 回顯,此腳本指令控制 C 腳本指令下發(fā)給儀表的采集命令是否需要同時上報

給中心,value 為 1 表示需要回顯,value 為 0 表示不回顯。不使用此指令時默認為

不回顯。此指令為整個腳本全局生效指令,直到腳本結束。如果有些采集指令需要

回顯有些不需要回顯只需要在相應的采集指令前加入此指令做相應的控制即可。

示例:

@E=1 回顯采集命令

@E=0 不回顯采集命令

M:標記,此腳本指令無實際動作,用于產生一個標記,和 L 指令配合完成 LOOP 循環(huán)

控制。value 為 1-3,支持 3 個標記,循環(huán)嵌套時需要使用不同的標記,非嵌套循環(huán)

可以重復使用。

示例:

@M=1 產生 M1 標記點

@M=2 產生 M2 標記點

L: 循環(huán)腳本,此腳本指令控制循環(huán)到標記點的次數(shù),用于需要對儀表進行多次重復數(shù) 據(jù)

采集的場合,比如需要對儀表連續(xù)采集 3 次數(shù)據(jù)。value 為 x,y 的格式,x 表示標 記點,值

為 1-3 表示 M1~M3 標記點,y 為循環(huán)次數(shù)。3 個標記點允許實現(xiàn) 3 層循環(huán) 的嵌套,不嵌套

的循環(huán)無限制,可以重復使用標記點。腳本執(zhí)行到 L 指令時立即跳轉到指定的 M 標記點,

直到達到循環(huán)指定的次數(shù)后,繼續(xù)往后面執(zhí)行。

示例:

@L=1,3 表示跳轉到 M1 標記,循環(huán)執(zhí)行 3 次。

@L=2,2 表示跳轉到 M2 標記,循環(huán)執(zhí)行 2 次。

T: 數(shù)據(jù)上報中心控制,此腳本指令用于實現(xiàn)多次采集周期結束后一次性上報數(shù)據(jù)的 應用,比如

用戶設置每 5 分鐘采集一次數(shù)據(jù),1 小時上報一次,就可以通過設置此 指令值為 12 來實現(xiàn)。

value 表示次數(shù),默認為 1 次,即當次采集周期結束后立即上 報。此指令為整個腳本全局生效指

令,直到腳本結束,并且只允許出現(xiàn)一次此指令, 如果此腳本出現(xiàn)多次時,以最后一次的值為有

效。注意:此指令控制的上報次數(shù)以 一次腳本完全執(zhí)行結束為一個周期,與 L 指令控制的循環(huán)執(zhí)

行不產生影響。

示例:

@T=3 表示 3 個采集周期結束后才上報數(shù)據(jù)。

B: 波特率控制,此腳本指令用于外接多個不同波特率儀表或者儀表波特率與 DTU 串口 波特率不相

同時臨時改變 DTU 的串口波特率。value 為波特率值,需要在發(fā)送采集 命令前通過此指令改變 DTU

波特率與儀表波特率一致。當腳本執(zhí)行結束,會自動 回到 DTU 默認的串口波特率。

示例:

@B=38400

H: 數(shù)據(jù)頭控制,此腳本指令用于在采集的儀表數(shù)據(jù)前加入用戶自定義的數(shù)據(jù)頭或用 戶便于解析的

特征碼等, 比如在進行多個儀表數(shù)據(jù)采集時加入分隔符便于區(qū)分不 同的儀表數(shù)據(jù),value 為可見的

HEX 字符,比如 123 表示為 313233。此指令執(zhí)行一 次立即失效,如果需要在不同的采集指令前插

入特征碼需要分開加入此指令,特征 碼可以相同也可以不同。

示例:

@H=AA5501

@H=AA5502

C: 儀表下發(fā)命令,此腳本指令用于定義下發(fā)給儀表的采集命令內容,value 為可見的 HEX 字符,執(zhí)

行到此腳本 DTU 會通過串口把內容發(fā)送給儀表,同時如果回顯為開 DTU 會立即把此內容加入上報隊列。

示例:

下發(fā) Modbus 采集指令:01 03 00 01 00 01 12 34

腳本表示為:@C=0103000100011234

A: 接收儀表應答控制,此腳本指令用于控制 DTU 是否接收儀表的應答,value 為 1 表 示接收應答,

value 為 0 表示不接收應答。不使用此指令時默認為接收應答。此指 令為整個腳本全局生效指令,直到

腳本結束,如果有些采集指令需要接收應答有些 不需要接收應答只需在相應的采集命令前加入此指令做

相應的控制即可

示例:

@A=0 不接收后面的儀表應答數(shù)據(jù)

D: 延時控制,此腳本指令用于控制延時,DTU 發(fā)送采集命令后的延時控制或者等待 應答的延時控制。

value 為數(shù)字+單位的格式,單位有 S(秒)、M(分鐘)、H(小時),DTU 遇到此指令后等待相應的延時值再

繼續(xù)執(zhí)行腳本。

示例:

@D=10S (等待 10 秒)

@D=2M (等待 2 分鐘)

@D=1H (等待 1 小時)

S: 立即上報數(shù)據(jù)控制,此腳本指令用于控制 DTU 立即上報儀表數(shù)據(jù)。value 為 1 表 示立即上報,默認

情況下 DTU 執(zhí)行完 T 指令控制的采集次數(shù)后上報(T 默認為 1, 每次腳本執(zhí)行結束都上報),用戶在需

要分開上報多個儀表數(shù)據(jù)時或者 1 個儀表的 多條數(shù)據(jù)時,可以在發(fā)送采集命令后,DTU 已經(jīng)收到儀表應

答時插入@S=1 來立即 上報之前的數(shù)據(jù)。

示例:

@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:數(shù)字量 DI1 狀態(tài)上報,DI1 觸發(fā)控制,此腳本指令用于 DTU 采集 DI1 的狀態(tài)以及配 置 DI1 的狀態(tài)改變

時觸發(fā)采集腳本的執(zhí)行。 value 的值可為:?(報告狀態(tài))、 0 (下降沿觸發(fā)采集)、1(上升沿觸發(fā)采集)、2(下降沿和上升沿均觸發(fā)采集)、

其他(不觸發(fā)采集)。默認 DI1 不觸發(fā)采集。此指令可以出現(xiàn)多個,比如需要上報 DI1 狀態(tài)同時又需要配置 DI1 的觸發(fā)采集。如:配置 DI1 為下降沿觸發(fā)采集且同時 上報 DI1 狀態(tài),可配置腳本@I1=0@I1=?

示例:

@I1=? 采集 DI1 狀態(tài),小提示:可在前面插入 H 指令加入便于識別的頭。

@I1=0 DI1 下降沿觸發(fā)采集

@I1=1 DI1 上升沿觸發(fā)采集 @I1=2 DI1 上升沿和下降沿觸發(fā)采集

@I1=其他 DI1 不觸發(fā)采集(默認,可省略),即使不觸發(fā)采集也可在腳本 中插入

@I1=?讓 DTU 定時采集時報告 DI1 的狀態(tài)。

I2:數(shù)字量 DI2 狀態(tài)上報,DI2 觸發(fā)控制,此腳本指令用于 DTU 采集 DI2 的狀態(tài)以及配 置 DI2 的狀態(tài)改變時觸發(fā)采集腳本的執(zhí)行。 value 的值可為:?(報告狀態(tài))、 0 (下降沿觸發(fā)采集)、1(上升沿觸發(fā)采集)、2(下降沿和上升沿均觸發(fā)采集)、 其他(不觸發(fā)采集)。默認 DI2 不觸發(fā)采集。此指令可以出現(xiàn)多個,比如需要上報 DI2 狀態(tài)同時又需要配置 DI2 的觸發(fā)采集。如:配置 DI2 為下降沿觸發(fā)采集且同時 上報 DI2 狀態(tài),可配置腳本@I2=0@I2=?

示例:

@I2=? 采集 DI2 狀態(tài),小提示:可在前面插入 H 指令加入便于識別的頭。

@I2=0 DI2 下降沿觸發(fā)采集 @I2=1 DI2 上升沿觸發(fā)采集

@I2=2 DI2 上升沿和下降沿觸發(fā)采集 @I2=其他 DI2 不觸發(fā)采集(默認,可省略),即使不觸發(fā)采集也可在腳本 中插入

@I2=?讓 DTU 定時采集時報告 DI2 的狀態(tài)。

三、應用案例 在眾山 DTU 的串口外接 2 個 RS485 接口的儀表,2 個儀表使用 W1 開關控制電源,打開 電源需要 10 秒時間讓儀表穩(wěn)定,儀表為標準的 Modbus 協(xié)議,Modbus 地址分別為 01 和 02。 每個儀表需要采集 2 個寄存器數(shù)據(jù),寄存器地址為 0000 和 0001,儀表 1 的 2 個寄存器采集 指令為: 0103000000010000 和 0103000100010000。儀表 2 的 2 個寄存器采集指令為: 0203000000010000 和 0203000100010000。一次采集需要連續(xù)采集 3 次數(shù)據(jù),CRC 校驗需用戶自己計算。儀表 1 的波特率為 4800,儀表 2 的波特率為 38400。 用戶需求為每 1 小時采集一次數(shù)據(jù),一次數(shù)據(jù)采集需要采集到 2 個儀表的 2 個寄存器數(shù) 據(jù),并且需要采集 3 次,上報的數(shù)據(jù)需要回顯采集命令,在每條數(shù)據(jù)前加入 AA55 以便于用 戶解析數(shù)據(jù),每條采集指令之間延時 3 秒,都需要接收儀表應答。

首先需要設置 DTU 的儀表自動采集周期參數(shù)為 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 小時上報一次數(shù)據(jù) @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 次采集周期結束才上報一次數(shù)據(jù),所以@T=3


3:每采集到 1 個儀表的 2 個寄存器數(shù)據(jù)時分開上報 @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 個數(shù)據(jù)后用@S=1 立即上報


4:每采集到 1 個儀表的 1 個寄存器數(shù)據(jù)時分開上報 @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 注:每采集一個數(shù)據(jù)后用@S=1 立即上報

四、腳本指令默認值 1、@E=0 默認為不回顯,用戶不需要上報采集指令時可省略此腳本 2、@T=1 默認為 1 個采集周期結束立即上報數(shù)據(jù),可省略 3、@A=1 默認為接收儀表的應答,可省略




聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    Linux從零到精通:最簡單的Shell腳本入門教程

    case語句 shell變量數(shù)組 shell腳本前言 |為什么學習shell編程 Shell腳本語言是實現(xiàn)Linux/UNIX系統(tǒng)
    的頭像 發(fā)表于 12-05 09:56 ?458次閱讀
    Linux從零到精通:最簡單的Shell<b class='flag-5'>腳本</b>入門教程

    微軟生成式AI腳本GenAIScript的安裝與配置

    GenAIScript 是一種結合了生成式人工智能(Generative AI,簡稱 GenAI)和腳本編寫能力的新型腳本語言。
    的頭像 發(fā)表于 11-07 09:13 ?235次閱讀
    微軟生成式AI<b class='flag-5'>腳本</b>GenAIScript的安裝與配置

    使用OpenSCAD腳本自動化電容式觸摸傳感器PCB設計

    電子發(fā)燒友網(wǎng)站提供《使用OpenSCAD腳本自動化電容式觸摸傳感器PCB設計.pdf》資料免費下載
    發(fā)表于 09-14 10:39 ?0次下載
    使用OpenSCAD<b class='flag-5'>腳本</b>自動化電容式觸摸傳感器PCB設計

    shell腳本執(zhí)行的三種方式及區(qū)別

    在Linux系統(tǒng)中,Shell腳本是一種非常實用的工具,用于自動化執(zhí)行一系列命令。Shell腳本可以大大提高工作效率,簡化復雜的任務。在這篇文章中,我們將介紹Shell腳本執(zhí)行的三種方式及其區(qū)別
    的頭像 發(fā)表于 08-30 15:24 ?1172次閱讀

    執(zhí)行shell腳本的方式包括什么

    執(zhí)行Shell腳本的方式有很多種,以下是一些常見的方法: 直接運行腳本文件 在命令行中,可以直接使用腳本文件的路徑來運行腳本。例如: ./script. sh 這種方式需要確保
    的頭像 發(fā)表于 08-30 15:17 ?344次閱讀

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之本地腳本的編寫和執(zhí)行

    !\"為腳本中編寫的命令代碼。2、執(zhí)行在執(zhí)行腳本時,腳本必須要有執(zhí)行權限,首先給腳本賦予可執(zhí)行權限:elf@ubuntu:~/work/example/scrip_test$ sud
    發(fā)表于 08-29 10:51

    shell腳本編寫之本地腳本的編寫和執(zhí)行

    用來指定使用的shell應用;echo "my first shell !"為腳本中編寫的命令代碼。2、執(zhí)行在執(zhí)行腳本時,腳本必須要有執(zhí)行權限,首先給腳本賦予可執(zhí)行
    發(fā)表于 08-28 09:36

    利用Python腳本登錄到交換機并創(chuàng)建VLAN

    本文將詳細介紹如何利用Python腳本登錄到交換機并創(chuàng)建VLAN。
    的頭像 發(fā)表于 08-12 17:59 ?586次閱讀

    DTU如何配置55AA指令?

    前提條件: DTU 已通過SIM卡撥號正常 1.電腦通過轉接頭連接到DTU的串口1 2.使用55AA生成軟件,生成55AA指令 輸入手機號碼,和短信內容. 3.電腦通過軟件模擬串口設備
    發(fā)表于 07-25 08:14

    abb機器人編程指令詳解中的call什么意思

    ABB機器人編程指令詳解中的“call”是一個非常重要的指令,它允許程序員在程序中調用另一個程序或子程序。 概述 在ABB機器人編程中,程序
    的頭像 發(fā)表于 06-17 09:47 ?1161次閱讀

    如何使用腳本清除WorkFlash?

    我試圖使用 .rc 腳本調用 detect.py 和 debug.py 刪除工作閃存。 但驗證步驟失敗了、 我閱讀了多文檔,并解除了對所有代碼閃存和工作閃存安全寄存器的封鎖。 但還是不行。 如何通過腳本文件清除工作閃存
    發(fā)表于 05-30 07:30

    在調試面板上有Clokwise和counter Clockwise的選項,是否有腳本指令,可設置驅動電機反轉?

    在調試面板上有 Clokwise 和 counter Clockwise 的選項。是否有腳本指令,可設置驅動電機反轉?
    發(fā)表于 05-24 07:42

    如何優(yōu)化HLS仿真腳本運行時間

    需求:由于自己目前一個 HLS 仿真腳本需要運行 1個多小時,先打算通過打印時間戳的方式找出最耗時的部分,然后想辦法優(yōu)化。
    的頭像 發(fā)表于 02-23 09:29 ?703次閱讀

    通過Python腳本實現(xiàn)WIFI密碼的自動猜解

    本文將記錄學習下如何通過 Python 腳本實現(xiàn) WIFI 密碼的自動猜解。
    的頭像 發(fā)表于 01-25 10:46 ?3476次閱讀
    通過Python<b class='flag-5'>腳本</b>實現(xiàn)WIFI密碼的自動猜解

    一個簡單的Shiro RCE檢測和利用腳本

    一個簡單的Shiro RCE檢測和利用腳本。
    的頭像 發(fā)表于 01-09 09:46 ?650次閱讀