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

文章详细介绍了如何使用有人物联网模块连接有人云平台,配置设备并添加变量模板,特别是采用标准MODbus协议进行数据交互的过程。此外,文章提出了扩展指令以支持从机主动上报状态,解决了网络通讯中的延迟和低功耗设备的通讯问题,适用于NB-IoT和Lora等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

USR-C322 连接有人云Modbus RTU设备组态测试

 

一、说明

 

USR-C322 软件设计手册:【软件设计手册】USR-C322 软件设计手册 V2.8.0-济南有人物联网技术有限公司官网

本案例测试说明:用modbus slave软件模拟modbus rtu协议的串口设备;

数据流向:modbus slave软件----C322-----有人云(组态显示)

客户实际应用:modbus rtu设备---C322---有人云(组态显示)

二、有人云设置参数                                                              

具体步骤如下:

1、登录有人云(如果没有账号先申请通信证)

       

                       

2.在有人云上添加设备选择【SN不支持】添加,ID是系统自动生成的

 

3.模板更改名称,选择“Modbus” -  “ModbusRTU” - “云端采集”,点击“确认添加”。

 

 

4.添加从机,设置从机名称,串口号为1,从机地址是接在WIFI模块的串口上的终端设备的从机地址(如果不清楚,可以咨询终端设备的厂家)。

 

5.设置数据节点的名称,寄存器地址,数据格式,采集频率(最低只能是一分钟,);

寄存器地址填写规则:

格式为  功能码+寄存器地址(需要16进制转为10进制)+1

与组态软件的寄存器写法相同,填十进制寄存器地址,寄存器为起始地址+1。

如:

功能码03H或06H,起始地址0000H,则填:40001;

以这个为例,操作为只读就是功能码为03则就是4,寄存器地址16进制转换为10进制就是0000,然后+1

所以组态地址就是40001。

 

 

三、C322参数设置

1.下面设置C322,电脑连接C322的WiFi。

 

2.内置网页192.168.1.1的账号和密码都是admin,进入以后选择模式选择为sta模式,设置要连接的wifi名称、密码,点击保存;(先不要重启,等设置完所有的参数再重启设备)。

 

 

3. 进入到“透传参数”,串口参数设置为和您终端设备的串口参数一致。

4. 网络设置上设置为Tcp Client,透传云的域名为clouddata.usr.cn,透传云的端口为15000

附加功能,注册包选择透传云,填上透传云上新建立的设备id,和密码(如下图所示),点击保存并重启C322使配置参数生效。

 

 

5. 设置完所有的参数要重启C322设备,稍等一会,在有人云界面,您会看到设备已经上线。

 网络配置也可按照下图

您的网关SN为: 00002000263277000001; 通讯密码为: XXXXXXXXX;

云平台接入地址为: 263277.cnsh.iot-tcp.com; 端口号: 15000;

(后续您也可以在“查看”页面查看网关的通讯密码,也可以通过“网关管理-编辑网关”,查看和修改网关的通讯密码)

 

四、数据调试

 

1.打开modbus软件,点击连接。选择串口com13C322的串口用usb转232接到电脑上的),串口参数要和C322一致。

 

2.可以在联网设备--数据查看,看到采集的从机数据。

 

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

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

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

本次采用的是标准的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、有人扩展协议仅适用于设备与透传云的网络通讯层;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

测试结果如下图所示:

请求:

设备号

功能码

寄存器起始地址

寄存器单元长度

字节数

数据

CRC校验2

 

id

46

00

01

00

02

04

00

0A

01

02

crcl crch

01 46 00 06 00 03 06 00 04 00 03 00 04     XX XX  ( modbus rtc crc

[13:26:47.860]发→◇01 46 00 06 00 03 06 00 04 00 03 00 04 CE 54 □
[13:26:47.980]收←◆01 46 00 06 00 03 28 05 
寄存器起始 06
40006
寄存器单元长度
00 03\ 40007 40008 40009
数据
00 04 00 03 00 04
[13:21:17.883]发→◇01 46 00 07 00 02 04 00 04 00 05 D0 D5 
[13:21:18.156]收←◆01 46 00 07 00 02 B8 05 
寄存器起始 07
40007
寄存器单元长度
00 02\  40008 40009

改变单个寄存器值

[13:28:11.795]发→◇01 46 00 07 00 01 02 00 25 E3 2A □
[13:28:12.226]收←◆01 46 00 07 00 01 F8 04 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值