当前位置: 首页 > news >正文

单片机连接有人云上传数据

首先采用有人物联网的模块 ,连接有人云平台服务器 看云平台相关配置

配置连接设备在线后 添加设备

添加设备完成后 添加变量模板

变量模板的添加方式如下 :

本次采用的是标准的MODbus 协议

添加一个温度变量

温度变量如下显示

云平台 下发数据 采集

01 03 00 00 00 01 84 0A

丛机返回数据

01 03 02 00 07 f9 86

云平台 下发数据 采集

01 03 00 01 00 01 D5 CA

丛机返回数据

01 03 04 00 11 98 49

01 03 00 00 00 03 05 CB

丛机返回数据

01 03 02 00 11 78 48

01 03 04 00 22 00 33 1A 2C

01 03 06 00 55 00 66 00 77 8D 40

以下想采用 主动上报的方式 其拓展码 如下

标准Modbus RTU指令

 

寄存器单元(十进制)

功能码

作用

请求及响应格式

 

线圈寄存器

CoilStatus

(00001 - 09999)

1位 读写

0x01

读线圈

指示状态1 = ON,0 = OFF 示例:读取0x0001到0x000A单元的开关状态,现场状态为全开(即全1)

 

 

 

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

 

 

id

01

00

00

00

0A

crcl

crch

 

 

 

 

 

 

 

 

响应:

设备号

功能码

字节数

数据

CRC校验

 

 

 

 

 

 

 

 

 

 

id

01

02

FF

03

crcl

crch

 

 

 

 

 

 

 

0x05

写单个线圈

十六进制FF 00置状态为ON,十六进制00 00 置状态为OFF 示例:将0x00AD单元状态置为ON/OFF

 

 

 

请求:

设备号

功能码

寄存器起始地址

置为ON/OFF

CRC校验

 

 

 

 

 

 

 

 

 

id

05

00

AC

FF

00

crcl

crch

 

 

 

 

 

 

 

 

 

id

05

00

AC

00

00

crcl

crch

 

 

 

 

 

 

 

 

响应:

设备号

功能码

寄存器起始地址

置为ON/OFF

CRC校验

 

 

 

 

 

 

 

 

 

id

05

00

AC

FF

00

crcl

crch

 

 

 

 

 

 

 

 

 

id

05

00

AC

00

00

crcl

crch

 

 

 

 

 

 

0x0F

写多个线圈

示例:从0x0014开始写入10个状态值,数据内容为2个字节:十六进制CD 01(二进制 1100 1101 0000 0001)

 

 

 

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

字节数

数据

CRC校验

 

 

 

 

 

 

id

0F

00

13

00

0A

02

CD

01

crcl

crch

 

 

 

 

 

响应:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

 

 

id

0F

00

13

00

0A

crcl

crch

 

 

 

 

 

 

离散寄存器

InputStatus

(10001 - 19999)

1位 只读

0x02

读离散输入

示例:读取197—218的开关状态,204-197内容为0xAC(即二进制1010 1100),212-205内容为0xDB(即二进制1101 1011),218-213内容为0x35(即二进制0011 0101)

 

 

 

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

 

 

id

02

00

C4

00

16

crcl

crch

 

 

 

 

 

 

 

 

响应:

设备号

功能码

字节数

数据

CRC校验

 

 

 

 

 

 

 

 

 

id

02

03

AC

DB

35

crcl

crch

 

 

 

 

 

 

保持寄存器

Holding Register(40001 - 49999) 16位 读写

0x03

读保持寄存器

示例:读取寄存器108—110的值,108的内容为0x022B(即555),109的内容为0x0000(即0),110的内容为0x0064(即100)

 

 

 

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

 

 

id

03

00

6B

00

03

crcl

crch

 

 

 

 

 

 

 

 

响应:

设备号

功能码

字节数

数据

CRC校验

 

 

 

 

 

 

id

03

06

02

2B

00

00

00

64

crcl

crch

 

 

 

0x06

写单个寄存器

示例:将数据0x0003写入寄存器单元0x0002

 

 

 

请求:

设备号

功能码

寄存器起始地址

数据

CRC校验

 

 

 

 

 

 

 

 

 

id

06

00

01

00

03

crcl

crch

 

 

 

 

 

 

 

 

响应:

设备号

功能码

寄存器起始地址

数据

CRC校验

 

 

 

 

 

 

 

 

 

id

06

00

01

00

03

crcl

crch

 

 

 

 

 

 

0x10

写多个寄存器

示例:将数据0x000A和0x0102写入从0x0002开始的两个寄存器单元

 

 

 

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

字节数

数据

CRC校验

 

 

 

 

id

10

00

01

00

02

04

00

0A

01

02

crcl

crch

 

 

 

响应:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

 

 

id

10

00

01

00

02

crcl

crch

 

 

 

 

 

 

输入寄存器

Input Register(30001 - 39999) 16位 只读

0x04

读输入寄存器

示例:读取输入寄存器0x0009单元的值,现场数据为0x000A

 

 

 

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

 

 

id

04

00

08

00

01

crcl

crch

 

 

 

 

 

 

 

 

响应:

设备号

功能码

字节数

数据

CRC校验

 

 

 

 

 

 

 

 

 

 

id

04

02

00

0A

crcl

crch

 

 

 

 

 

 

 

有人扩展指令(本扩展指令非Modbus RTU标准,仅适用于设备与透传云网络通讯的规则)

 

为什么要做扩展指令

由于Modbus RTU协议适用于半双工的总线协议,只能一问一答,服务器做主机,接入设备做从机,可以实现主机主动采集和控制。

但由于网络通讯考虑流量、服务器并发量、网络延迟等原因,无法实现类似在总线中毫秒级的轮询读取,而网络通讯属于全双工,能够同时双向对话,故扩展指令提出支持从机状态主动上报的规则。

 

应用场景1

从机主动上报状态

如Modbus协议的环境控制器,服务器做主机10分钟轮询采集,但若前端人工主动控制,服务器必须等到下个轮询才能得知状态变化。

利用扩展指令可实现人工主动控制,从机主动上报当前的状态。

注:本协议仅适用于使用有人网络模块自主开发的产品,若在RS-485总线中使用,会造成总线混乱。

 

应用场景2

低功耗通讯上报格式

NB-IoT、Lora这类低功耗通讯方式,低功耗模式仅支持主动向服务器上报,上报后断电断网休眠,此时服务器无法做主机主动采集数据。

利用扩展指令格式主动上报数据解决上述问题,服务器按照Modbus协议解析,完成后面的数据存储、报警、推送等功能。

补充:NB-IoT在高功耗模式下也可支持云端主动下发查询指令。

 

寄存器单元(十进制)

功能码

作用

请求及响应格式

 

线圈寄存器

CoilStatus (00001 - 09999) 1位 读写

0x45

上报多个线圈

示例:从0x0014开始写入10个状态值,数据内容为2个字节:十六进制CD 01(二进制 1100 1101 0000 0001)

 

(格式与写多个线圈相同)

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

字节数

数据

CRC校验

 

 

 

 

id

45

00

13

00

0A

02

CD

01

crcl

crch

 

 

 

响应:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

id

45

00

13

00

0A

crcl

crch

 

 

 

 

 

 

离散寄存器

InputStatus(10001 - 19999) 1位 只读

0x42

上报多个离散寄存器

(格式与写多个线圈相同)

 

 

 

保持寄存器

Holding Register(40001 - 49999) 16位 读写

0x46

上报多个保持寄存器

示例:将数据0x000A和0x0102写入从0x0002开始的两个寄存器单元

 

(格式与写多个保持寄存器相同)

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

字节数

数据

CRC校验

 

 

id

46

00

01

00

02

04

00

0A

01

02

crcl

crch

 

响应:

设备号

功能码

寄存器起始地址

寄存器单元长度

CRC校验

 

 

 

 

 

 

 

id

46

00

01

00

02

crcl

crch

 

 

 

 

 

 

输入寄存器

Input Register(30001 - 39999) 16位 只读

0x44

上报多个输入寄存器

(格式与写多个保持寄存器相同)

 

 

 

注意和补充

 

协议解释:

1、数据、地址、长度等默认大端在前,但CRC校验是小端在前(低字节在前)crcl crch;

2、有人扩展协议仅适用于设备与透传云的网络通讯层;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

测试结果如下图所示:

http://www.lryc.cn/news/40338.html

相关文章:

  • 系统集成项目管理工程师:第18章项目风险管理学习笔记
  • 【笔试强训选择题】Day3.习题(错题)解析
  • 基于GPT-4的免费代码生成工具
  • Android开发的这一年里,Jetpack的Room源码是怎么狠狠奖励我的?
  • 推荐一款卸载软件的小工具-《UninstallToo》
  • 线程池——JUC随记8
  • SpringCloudAlibaba微服务调用组件-Feign
  • 高效学习方法论
  • C语言结构体(一篇学会)
  • 嵌入式软件开发之Linux下C编程
  • 普通Java工程师 VS 优秀架构师
  • Java:SpringBoot实现ApplicationEvent事件的监听和发布
  • 星戈瑞-Sulfo-Cyanine3 azide?磺酸基-Cy3-N3叠氮基水溶性染料
  • 十大经典排序算法(下)
  • 网络协议分析期末复习(四)
  • Matlab对图像和视频的简单处理(图像视频文件读取和输出,转灰度图,取指定帧的图像)
  • ArrayList源码分析
  • SpringBoot IOC、DI、@Autowired、@Resource、作用域
  • 链表相关oj题
  • 【Linux】操作系统(Operator System)
  • 机器学习自学笔记——感知机
  • C++ Primer第五版_第三章习题答案(21~30)
  • colmap+openmvs进行三维重建流程全记录
  • yolov8命令行运行参数详解
  • 分布式锁简介
  • 【嵌入式Linux学习笔记】Linux驱动开发
  • 2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛)(H题)(线段树)
  • Linux内核Thermal框架详解十三、Thermal Governor(3)
  • TikTok品牌出海创世纪(二)
  • iOS中SDK开发 -- cocoapods库创建