关于Modbus TCP 编码及解码方式分析

news/2024/11/20 12:28:39/

一.Modbus TCP 基本概念

1.基本概念


①Coil和Register
  Modbus中定义的两种数据类型。Coil是位(bit)变量;Register是整型(Word,即16-bit)变量。
②Slave和Master与Server和Client
  同一种设备在不同领域的不同叫法。
  Slave: 工业自动化用语;响应请求;
  Master:工业自动化用语;发送请求;
  Server:IT用语;响应请求;
  Client:IT用语;发送请求;
  在Modbus中,Slave和Server意思相同,Master和Client意思相同。

2.Modbus数据模型


  Modbus中,数据可以分为两大类,分别为Coil和Register,每一种数据,根据读写方式的不同,又可细分为两种(只读,读写)。
  Modbus四种数据类型:
  Discretes Input    位变量    只读
  Coils          位变量    读写
  Input Registers    16-bit整型   只读
  Holding Registers     16-bit整型   读写
  通常,在Slave端中,定义四张表来实现四种数据。

3.Modbus地址范围对应表

设备地址     Modbus地址      描述                   功能   R/W
1~10000       address-1           Coils(Output)       0          R/W
10001~20000   address-10001    Discrete Inputs        01        R
30001~40000   address-30001    Input Registers        04        R
40001~50000   address-40001    Holding Registers     03        R/W

4.Modbus变量地址


映射地址             Function Code         地址类型          R/W          描述
0xxxx               01,05,15                 Coil                R/W          -
1xxxx               02                          离散输入          R              -
2xxxx               03,04,06,16            浮点寄存器       R/W          两个连续16-bit寄存器表示一个浮点数(IEEE754)
3xxxx               04                          输入寄存器       R              每个寄存器表示一个16-bit无符号整数(0~65535)
4xxxx               03,06,16                保持寄存器        R/W          -
5xxxx               03,04,06,16           ASCII字符         R/W          每个寄存器表示两个ASCII字符

二.Modbus TCP 大小端概念

国内设备基本上是A B C D顺序,国外设备基本上是B A D C顺序。低位优先字节交换。使用两个寄存器。
使用IEEE 754规范,如显示不正常可进行 字节顺序 交换位置即可。如下:

Float Big-endian     字节顺序:A B C D
Float Little-endian   字节顺序:D C B A
Float Big-endian byte swap      字节顺序:B A D C
Float Little-endian byte swap    字节顺序:C D A B

举个栗子:41  8C  E8  EE
字节顺序: A    B     C   D

A B C D


B A D C


A B C D


B A D C
    

三.Modbus TCP 中常用编码解码方式

    在本案例中,Proface 设备使用编码方式为 GB18030, 可以传输字符与汉字。

GB18030 与 Unicode

GB18030 和 Unicode 相当于两套单独的编码体系,它们都对世界上大部分字符进行编码,赋予每个字符一个唯一的编号,只不过对于同一个字符,GB18030 和 Unicode 对应的编号是不一样的, 比如:汉字 "中" 字的 GB18030 编码是 0xD6D0, 对应的 Unicode 码元是 0x4E2D, 从这一点上可以认为 GB18030 是一种 Unicode 的转换格式

注意:要表达 Unicode 的编码格式才真正算得上 Unicode 转换格式,所以严格意义上说 GB18030 并不是真正的 Unicode 转换格式

GB18030 既是字符集又是编码格式,也即字符在字符集中的编号以及存储是进行编码用的编号是完全相同的,而 Unicode 仅仅是字符集,它只规定了字符的唯一编号,它的存储是用其他的编码格式的,比如 UTF8、UTF16 等等

既然 GB18030 和 Unicode 都能表示世界上大部分字符,为什么要弄两套字符集呢,一套的话不更有利于信息的传播吗?

1、在 Unicode 出现之前,没有统一的字符编码,每个操作系统上都有自己的一套编码标准,像早期的 window 上需要安装字符集,才能支持中文,这里的字符集就是微软自定的标准,换个其他系统就会失效

2、对于大部分中文字符来说,采用 GB18030 编码的话,只需两个字节,如果采用 UTF8 编码,就需要三个字节, 所以用 GB18030 存储和传输更节省空间

  

【转】彻底搞明白 GB2312、GBK 、GB18030和UTF-8-CSDN博客

编码解码网站:

编码列表 - 在线工具 (toolhelper.cn)

文本字符集编码查询 (lddgo.net)

三.解析案例

3.1源word array数组

[57789,64441,20302,8267,8224,8224,8224,8224,8224,8224,21315,17952,16716,18765,18254,21536,13111,22319,12082,22612]   

3.2 源word Aarry 对应中文描述

结果NOK      CS   FLAMING  TL73/W2/TX

注意中间有空格,空格对应十进制为8224

3.3 利用网络编码解码工具进行解析

字符是先编码成二进制,然后再调大小端, 以上是发送端编码,接收端为逆序解码

3.3 利用AI 工具帮忙解析

提示词“  kepserver 使用Modbus-tcp 协议,作为Master 端,收到数据为word array 数据类型,其中数组第一个word 十进制值为“57789”,根据application显示对比,确定“57789” 对应的就是汉字“结”,请根据以上对应关系,推断出编码方式和大小端使用方式,详细点谢谢!”

Claude+ 免费在线 - 无需登录 - 立即聊天! |
人工智能 (hix.ai)

其实,AI做黑盒分析还是很难,至少免费的AI工具不行,需要多多训练。


http://www.ppmy.cn/news/1439813.html

相关文章

python——处理excel的常用库

Python 处理 Excel 文件主要依赖于几个流行的第三方库,这些库提供了丰富的功能来读取、写入以及操作 Excel 文件。以下是几种常见的处理方式: pandas: 安装: pip install pandas openpyxl(或pip install pandas xlrd xlwt,取决于E…

利用EFK对日志进行采集

首先先安装EFK docker-compose.yml version: 3 #如果已经安装过elasticsearch可将elasticsearch下配置全部删除 services:elasticsearch:image: elasticsearch:7.14.0ports:- "9200:9200"environment:- discovery.typesingle-node- ES_JAVA_OPTS-Xmx256m -Xms256mk…

【算法基础实验】图论-构建加权无向图

构建加权无向图 理论基础 在图论中,加权无向图是一种每条边都分配了一个权重或成本的图形结构。这种类型的图在许多实际应用中都非常有用,如路由算法、网络流量设计、最小生成树和最短路径问题等。 加权无向图的基本特征 顶点和边: 顶点&…

小程序使用阿里巴巴矢量图标库

一、登录官网 www.iconfont.cn 二、在搜索框中搜索想要的图标,将鼠标移动到图标上会看到三个标记 可以使用下载,直接使用: 可以使用css文件使用: 首先点击购物车样式的选项,而后点击下图位置: 点击自己创…

docker使用,安装go和centos7

一、安装docker 二、使用docker 1、下载镜像centos docker pull centos:7.2.1511 2、查看容器 docker ps -a 3、创建容器,创建后 状态:CREATE docker create -it centos:7.2.1511 /bin/bash 4、启动容器 (先查看容器id启动 CONTAINER…

[华为OD] 给航天器一侧加装长方形或正方形的太阳能板 100

给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要先安装两个支 柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度 不同,太阳能板的安装面…

Springboot整合文心一言----非流式响应与流式响应(前后端)

所谓非流式响应就是直接等待百度把答案生成好之后直接返回给你,而后者这是一一种流的形式,百度一边生成答案,一边将答案进行返回,这样就是我们在使用ChatGPT中最常见的一种表现了,它回答问题的时候总是一个字一个字的出…

汇编语言(详解)

汇编语言安装指南 第一步:在github上下载汇编语言的安装包 网址:GitHub - HaiPenglai/bilibili_assembly: B站-汇编语言-pdf、代码、环境等资料B站-汇编语言-pdf、代码、环境等资料. Contribute to HaiPenglai/bilibili_assembly development by creat…