Skip to content

自动读写外设

小机云的DTU可以向ModbusRTU和串口,发送指定数据。并处理数据上传到服务器保存

固件版本1.2.2以上才支持此功能

使用流程概述

  1. 新建自动读配置:在小机云网页端,进入您的物联网项目。在左边侧边栏里进入“设备配置”。点击”新建任务“。输入配置名称,任务类型”当前项目里的设备“,不指定软件版本,不指定硬件版本,点击”确定“。

  2. 配置自动配置参数:在任务列表里,找到您的配置任务,点击”编辑“,在弹出的对话框中切换到”自动读配置“,进行配置,配置好后点击”保存“。配置说明请看下面详情说明

  3. 推送配置:配置好后,可以加入到推送队列里,也可以手动推送到设备中去

    关于新建配置和推送配置,可以查看文章进行了解 设备配置

配置说明

  • 执行周期:间隔多长时间执行一次读数据,单位ms,0表示不执行,大于60000有效

指令配置

  • 通讯方式:指令读写数据的通讯方式,支持ModbusRTU和串口
  • 延迟:每次发送后的延迟,单位ms
  • noAck:该指令是否需要等待回复,如果不需要回复则不需要填写数据处理器

ModbusRTU

  • 设备地址:ModbusRTU设备的设备地址

  • 功能码:ModbusRTU设备的指令功能码

  • 内容:需要发送的内容,会拼接在设备地址和功能码后面

串口

  • 内容:串口需要发送的内容
  • 回复头:会拦截处理匹配到相应的回复头,并截取回复头到结尾的内容(结尾可以是\r,\n,\r\n)
  • 分隔符:是否使用分隔符对截取内容进行分隔

数据处理器:每个指令下面可以有多个数据处

  • 绑定字段:读出来的数据需要绑定到哪个字段

  • 字节:需要读出的数据中的哪个字节,默认从0开始。注意不要超出返回数据长度

  • 字节长度:从上面“字节”参数开始,在返回数据中截取多长。注意不要超出返回数据长度

  • 进制:结果需要转换的进制,支持2,8,10,16,s。s为字符串类型。ModbusRTU默认为10,串口默认为s

  • 计算:对结果进行的计算,/10表示结果除以10,以此类推支持+-*/

  • 小数位:结果需要保留的小数位

  • 无符:是否转换为无符整数(有正负),默认为无符整数(无正负)

  • 数据位:使用分隔符分隔后的第几位做为数据

注意:相同的设备地址和功能码会被判断成同一个传感器,导致数据混淆。相同的回复头也可能会出现混淆情况

使用案例

# 以一款ModbusRTU温度传感器为例

  • 通讯方式:ModbusRTU

  • 自动读配置:设备地址01,功能码03,寄存器0000,数值0001,绑定字段temperature,字节6,字节长4,进制10,计算/10,小数位2,无符

  • 执行自动读:小机云设备会向传感器发送ModbusRTU数据010300000001840A,其中840A为CRC。传感器返回:010302011179D8

  • 根据自动读配置,截取第6字节(从0开始)到第9字节,共4字节。截取结果0111。先换成成 10 进制为 273,再除 10 后就是我们所要的温度值,27.3 度。因为计算结果只有一位小数,最后只有保留一位小数。最后上到到平台存储的数据为temperature:27.3

  • 如果传感器返回010301FCD4D919,截取结果FCD4,因为是有符号,转换结果为-812,再除以10,最终结果为-81.2度

# 一个ModbusRTU传感器多个数据

如一个模拟量采集设备,有8个通道,读一次可以返回8个寄存器数据

自动读配置:设备地址01,功能码03,寄存器0000,数值0008

  • 绑定字段IN1,字节6,字节长4,进制16
  • 绑定字段IN2,字节10,字节长4,进制16
  • 绑定字段IN3,字节14,字节长4,进制16
  • IN4~IN8,以此类推

当执行自动读:小机云设备会向采集器发送ModbusRTU数据010300000008440C

返回数据:01 03 10 00 00 00 00 00 02 00 00 FF FF 00 02 00 03 00 00 26 2A

上传数据:

# 发送串口数据

  • 通讯方式:Serial
  • 内容:AT+IO=?
  • 回复头:+io:
  • 分隔符:,
  • 绑定字段1:IO0
  • 数据位:0
  • 绑定字段2:IO1
  • 数据位:1
  • 进制:10

当定时器执行时,向串口发送数据:AT+IO=?。串口返回:+io:1,0\r\n。 匹配到回复头+io:。截取回复头之后,\r\n之前的内容,使用”,“进行分隔,得到数组[1,0]。IO0使用第0位数据位,默认进制为s,即为字符串,IO1使用第1位数据位,进制10,上传结果