关于设备连接有人云的使用及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:OFF

OK

>[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   //默认On

>[Rx<-][15:06:13][asc]

OK

>[Tx->][15:06:13][asc]
AT+UATEN=OFF    //默认on

>[Rx<-][15:06:13][asc]

OK

>[Tx->][15:06:13][asc]
AT+CACHEN=OFF   //默认On

>[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 0A

crc16 在线计算网址为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  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,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/408862.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web安全学习笔记【16】——信息打点(6)

信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等[1] #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-C…

特征选择|一种提升预测模型性能的方法(原理及其优化实现,Matlab)

文章来源于我的个人公众号&#xff1a;KAU的云实验台&#xff0c;主要更新智能优化算法的原理、应用、改进 如今&#xff0c;生成的数据集呈指数级增长&#xff0c;这将产生具有大量特征和样本的数据集&#xff0c;而显然&#xff0c;某些特征是不相关/冗余的&#xff0c;它们…

奇异递归模板模式应用6-类模板enable_shared_from_this

异步编程中存在一种场景&#xff0c;需要在类中将该类的对象注册到某个回调类或函数中&#xff0c;不能简单地将this传递给回调类中&#xff0c;很可能因为回调时该对象不存在而导致野指针访问&#xff08;也有可能在析构函数解注册时被回调&#xff0c;造成对象不完整&#xf…

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…

IT廉连看——C语言——函数

IT廉连看——C语言——函数 一、函数是什么&#xff1f; 数学中我们常见到函数的概念。但是你了解C语言中的函数吗&#xff1f; 维基百科中对函数的定义&#xff1a;子程序 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, …

【Java】java异常处理机制(实验五)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、理解java的异常处理机制 2、掌握try catch结构和thow和thows关键字的用法 二、实验内容 1、编写一个程序&#xff0c;输入某个班某门课程成绩&#xff0c;统计及格人数、不及格人数及课程平均分。设计一个异…

H12-821_59

59.R1、R2、R3、R4运行IS-IS,它们接口的DIS Priority如图所示,假如设备同时启动,则()被选举为D1S.(请填写设备名称、例如R1) 答案&#xff1a;R4 注释&#xff1a; IS-IS中DIS的选举支持抢占。 假设题目说R4最后启动&#xff0c;问谁被选举为DIS&#xff0c;答案仍然是R4。

【嵌入式实践】【芝麻】【设计篇-1】从0到1给电动车添加指纹锁:项目设计思路

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

NVIDIA Workbench 安装使用图文教程

NVIDIA Workbench 安装使用教程 文章目录 NVIDIA Workbench 安装使用教程1.安装1.1 下载软件1.2 安装软件 2.使用NVIDIA Workbench2.1 创建一个新项目 3.额外提示3.1 当我们没有停止直接关闭或者直接重启电脑后, 再打开我们已经创立的项目的时候可能会出现创建失败等错误信息.3…

Java核心-核心类与API(3)

话接上回&#xff0c;继续核心类与API的学习&#xff0c;这次介绍一下枚举类以及与系统、交互有关的类&#xff0c;需要了解并能使用即可。 一、枚举类 1、概述 枚举也称穷举&#xff0c;简单理解就是把所有可能一一列举出来&#xff08;穷尽所有可能&#xff09;。枚举是一…

申请攻读博士学位研究生相关模板资料(包括专家推荐信、学术简历、研究计划及范文、回复导师邮件)

申请攻读博士学位研究生相关模板资料&#xff08;包括专家推荐信、学术简历、研究计划及范文、回复导师邮件&#xff09; 博士是对攻读博士学位的研究生的称呼&#xff0c;同样也可用来称呼已获得博士学位的人员。 主要通过拥有博士点的普通高等学校和拥有博士研究生培养资格…

[SUCTF 2019]EasySQL1 题目分析与详解

一、题目介绍 1、题目来源&#xff1a; BUUCTF网站&#xff0c;网址&#xff1a;https://buuoj.cn/challenges 2、题目描述&#xff1a; 通过以上信息&#xff0c;拿到flag。 二、解题思路 首先打开靶机&#xff0c;尝试输入1查看回显&#xff0c;回显如图所示&#xff1a;…

图像读取裁剪与人脸识别

图像读取 Image read ⇒ \Rightarrow ⇒ torchvision.datasets from torchvision import datasets dataset datasets.ImageFolder(data_dir, transformtransforms.Resize((512, 512)))Return value illustration dataset[0][0]是PIL.Image objects&#xff0c;这利用IPyth…

数据结构-列表LinkedList

一,链表的简单的认识. 数组,栈,队列是线性数据结构,但都算不上是动态数据结构,底层都是依托静态数组,但是链表是确实真正意义上的动态数组. 为什么要学习链表? 1,链表时最简单的动态数据结构 2,掌握链表有助于学习更复杂的数据结构,例如,二叉树,trie. 3,学习链表有助于更深入…

LeetCode 1038.从二叉搜索树到更大和树

给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c; 二叉搜索树 满足下列约束条件&#xff1a; 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左…

js逆向-2

#md5加密&#xff0c;某宝案例演示。 #免责声明:本文仅供学习使用&#xff0c;请勿用于其他违法行为(╥ω╥)

软件性能测试和功能测试有何联系和区别?第三方软件检测机构简析

软件性能测试和功能测试是软件开发过程中非常重要的两个环节。从根本上说&#xff0c;它们都是为了保证软件质量和可靠性&#xff0c;但它们的目标和方法却有所不同。 软件性能测试是评估软件在特定负载下的性能表现&#xff0c;包括响应时间、吞吐量、并发能力等指标。它通过…

MySQL 学习记录 2

原文&#xff1a;https://blog.iyatt.com/?p13818 13 存储引擎 查看一下前面创建的一张表的创建语句&#xff0c;当时并没有显式指定引擎&#xff0c;MySQL 自动指定的 InnoDB&#xff0c;即默认引擎是这个。 创建表的时候要显式指定引擎可以参考这个语句 查看当前 MySQL …

如何正确使用Postman变量?又该如何灵活设置变量?

引言 Postman变量可以帮助你快速生成测试数据、模拟不同的场景和环境。 但是&#xff0c;如何正确使用Postman变量&#xff1f;又该如何灵活设置变量&#xff1f;这些问题不用担心&#xff0c;接着往下看吧&#xff01; 理解变量 为什么要使用变量&#xff1f; 如果在多个…

探索Java11新世界:JDK 11新特性详解

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …