关于设备连接有人云的使用及modbus rtu协议,服务器端TCP调试设置

本文主要是介绍关于设备连接有人云的使用及modbus rtu协议,服务器端TCP调试设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有人云调试

  • 调试过程
  • 问题
    • 1. 关于modbus rtu协议,实质上有三种
      • modbus基本原理
      • modbus 格式
    • 2. 关于modbus crc16通信校验
    • 3. 关于在ubuntu阿里云服务器端,监听网络数据之调试mNetAssist
    • 4. 使用有人FAE传给的设置软件问题???

之前的一个项目,再拿出来回顾下。

调试过程

  1. 先 要在有人云,用手机号注册一个服务账号,官网显示目前只支持手机号注册。

  2. 再添加一个网关,一般的设备而言,选择不添加SN方式。设置好后,会自动生成一个账号和密码在这里插入图片描述
    这个是要配置到设备的GM5端的。

  3. 添加设备
    点击【设备管理】—【设备列表】—【添加设备】,其他的设置都是比较简单的,详细可以参考官方文档。这里重点说下,关联设备模板,这个也是自己不是很理解的点。 --> 此步官方文档说是为设备配置变量,添加点表。其表述如下:设备模板,它具备批量管理设备的通讯协议、采集方式、变量(点表)采集规则的能力。这里主要指的是modbusRTU标准的协议。所以得对这个协议了解下,详见问题部分。
    这里要注意,设置 寄存器时的问题,和组态软件是一样的,都要将要设置的值+1。也就是实际协议用到值是减1,如读寄存器功能码为03,但要设置成04 ,起始地址为00,就要设置成01。

  4. 设置GM5模块,通过程序来实现的话,主要就是设置这些选项

#define AT_HEART                  "AT+HEARTEN=ON"
#define AT_HEARTP                 "AT+HEARTTP=COM"
#define AT_HEARTDT                "AT+HEARTDT=773467"//w4g
#define AT_HEARTTM                "AT+HEARTTM=30"   //heart set#define AT_REG                    "AT+REGEN=ON"
#define AT_REGTP			      "AT+REGTP=CLOUD"
#define AT_CLOUD				  "AT+CLOUD=00052025000000000001,ZLEc9aUg"完整的设置流程参考如下:
>[Tx->][15:06:07][asc]
+++
>[Rx<-][15:06:07][asc]
a
>[Tx->][15:06:07][asc]
a
>[Rx<-][15:06:07][asc]
+ok执行完毕
>[Tx->][15:06:10][asc]
AT+SAFEATEN?>[Rx<-][15:06:10][asc]+SAFEATEN:OFFOK>[Tx->][15:06:10][asc]
AT+WKMOD=NET>[Rx<-][15:06:10][asc]OK>[Tx->][15:06:10][asc]
AT+SOCKAEN=ON>[Rx<-][15:06:10][asc]OK>[Tx->][15:06:10][asc]
AT+SOCKA=TCP,52025.cnsh.iot-tcp.com,15000>[Rx<-][15:06:10][asc]OK>[Tx->][15:06:10][asc]
AT+SOCKASL=LONG>[Rx<-][15:06:10][asc]OK>[Tx->][15:06:10][asc]
AT+SHORTATM=10>[Rx<-][15:06:10][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKABKEN=OFF>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKBEN=OFF>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKBBKEN=OFF>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKCEN=OFF>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKCBKEN=OFF>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKDEN=OFF>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKDBKEN=OFF>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+SOCKRSTIM=5>[Warn][15:06:11]+CME ERROR:53>[Tx->][15:06:11][asc]
AT+SOCKRSNUM=60>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+HEARTEN=ON>[Rx<-][15:06:11][asc]OK>[Tx->][15:06:11][asc]
AT+HEARTTM=30>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+HEARTTP=COM>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+HEARTSORT=USER>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+HEARTDT=773467>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+REGEN=ON>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+REGSND=LINK>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+REGTP=CLOUD>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+CLOUD=00052025000000000001,12345678>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+UART=115200,8,1,NONE,NONE>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+UARTFT=50>[Rx<-][15:06:12][asc]OK>[Tx->][15:06:12][asc]
AT+UARTFL=1024>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+E=OFF>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+CMDPW=usr.cn#>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+STMSG=[USR-G771]>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+APN=CMNET,,>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+RSTIM=1800>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+NATEN=OFF>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+UATEN=OFF>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+CACHEN=OFF>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+SAFEATEN=OFF>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+NTPEN=OFF>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+NTPTM=1>[Rx<-][15:06:13][asc]OK>[Tx->][15:06:13][asc]
AT+NTPSVR=>[Warn][15:06:14]+CME ERROR:53>[Tx->][15:06:14][asc]
AT+S>[Rx<-][15:06:14][asc]OK云端发送的数据为:01 03 00 00 00 01 84 0Acrc16 在线计算网址为https://www.23bei.com/tool/59.html

问题

1. 关于modbus rtu协议,实质上有三种

Modbus RTU(Remote Terminal Unit 远程终端单元):这种方式常采用RS-485做为物理层,一般利用芯片的串口实现数据报文的收发,报文数据采用二进制数据进行通信。
Modbus ASCII :报文使用 ASCII 字符。ASCII 格式使用纵向冗余校验和。Modbus ASCII 报文由冒号 (“:”)开始 和换行符 (CR/LF) 结尾构成。
Modbus TCP,上面两种支持串口,而Modbus TCP是最近开发的协议扩展,允许Modbus协议通过TCP / IP网络传输。 通过网络进行通信的固有延迟和其他方面,需要对如何保持请求和响应彼此同步进行一些修改,并确保不从从设备接收错误数据。

与Modbus RTU相比,Modbus TCP在PDU的包装方式上有所不同。 包含PDU的TCP帧以2字节的MODBUS应用协议(MBAP)事务标识符开始,而不是从ID。 当TCP层处理该功能时,也不需要CRC执行错误检查。
参照人家的写的,多熟悉下。

modbus基本原理

由于要进行通信,所以要有传输数据的存储区,线圈,表示的是位,而寄存器,表示的占16个位,数据,也就是说表示的是最小单位,至于为什么叫这些名字,主要是modbus最初就是为了解决电线多了之后乱的问题。

存储区的范围:5位标准地址(也有扩展到6位的),Y XXXX//第一位表示哪个存储区,后面4位表示地址,表示类型的位,没有2,这个是规定好的。也没有0000这个地址,而是从0001开始
线圈寄存器(Coil Register)(输出线圈)bool、00001 - 09999、可读可写
离散输入寄存器(Discrete Input Register)(输入线圈)bool、10001 - 19999、只读
输入寄存器(Input Register)16位值、30001 - 39999、只读
保持寄存器(Holding Register)(输出寄存器)16位值、40001 - 49999、可读可写
存储区的概念仅是为了人与人之间交流,理解之用,实际协议使用的是后面的地址,因为前面根据功能码可以判断出读、写的类型

关于功能码编码问题:有两种类型数据 寄存器和线圈 + 两种操作 可读可写 + 写两种方式 一次是单个还是多个,也就是说总共有6种组合。读输出线圈 01 读输入线圈 02 读输出寄存器 03 读输入寄存器 04 写单个线圈 05 写单个寄存器06
写多个输出线圈 15 写多个输出寄存器 16(十进制表示)

modbus 格式

modbus主要采用主请求,从应答的方式,也就是主机要数据,其数据结构都是:

  1. 地址:1个字节 ,取值范围是0-247,如果是0,就是主站广播报文;如果是1-247,则有可能是主站请求或者从站应答。
  2. 功能码:1个字节,也就是报文命令,代表主站对从站的操作,读或者写
  3. 数据:0~ 252个字节,数据字段,主请求报文,从应答报文会有所差异。也就是说假设抓取总线报文,如何区分是主站请求还是从站应答,则需要通过数据字段进行区分了。
  4. CRC校验:2 个字节 采样CRC16,16位循环冗余校验。
    基本的读取通信流程: 主机发送,写其是一样的
      第1 字节ARD : 从机地址码(=001~254)
      第 2 字节03H : 读寄存器值功能码
      第3、4 字节 : 要读的寄存器开始地址
      第5、6 字节 : 要读的寄存器数量
      第7、8 字节 : 从字节1 到6 的CRC16 校验和
      从机应答:
      第1 字节ARD : 从机地址码(=001~254)
      第2 字节03H : 返回读功能码
      第3 字节 : 字节总数,字节计数
      第4~7 字节 : 寄存器数据
      第8、9 字节 : 从字节1 到7 的CRC16 校验和

2. 关于modbus crc16通信校验

在线计算crc16网址为:crc16校验

 /***********************CRC查表法校验*************************/// CRC 高位字节值表
unsigned char code auchCRCHi[260] = { 
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
0x80, 0x41, 

这篇关于关于设备连接有人云的使用及modbus rtu协议,服务器端TCP调试设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/740292

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W