1、简介
Modbus TCP是一种应用于工业自动化领域的通信协议,它是Modbus协议的一个变种,采用TCP/IP协议进行数据传输。Modbus TCP使得Modbus协议可以通过以太网网络运行,允许设备之间在IP网络上交换数据。
在Modbus TCP协议中,通信通常由一个客户端(通常称为Master)和一个或多个服务器(Slave)进行。客户端发出请求,服务器响应这些请求。这些请求和响应包括读取或写入服务器中存储的数据。这些数据可以是输入/输出状态、保持寄存器、模拟输入等。
Modbus TCP常用于工业环境中,用于连接控制系统和现场设备,如传感器、执行器、变频器等。它特别适用于那些需要在设备之间进行快速、可靠通信的场景。
2、modbus TCP常用功能码
功能码 |
Hex表示 |
功能 |
备注 |
---|---|---|---|
1 |
0x01 |
读取线圈 |
可读写开关量 接受05、15写入 |
2 |
0x02 |
读取离散输入 |
只读开关量 |
3 |
0x03 |
读取保持寄存器 |
可读性模拟量 接受06、16写入 |
4 |
0x04 |
读取输入寄存器 |
只读模拟量 |
5 |
0x05 |
写入单线圈 |
0xFF00表示ON(True) 0x0000表示OFF(False) |
6 |
0x06 |
写入单个寄存器 |
只能操作1个寄存器(2字节) |
15 |
0x0F |
写入多个线圈 |
每个字节只能存储一个线圈的值 |
16 |
0x10 |
写入多个寄存器 |
操作的基本单位是字节 |
3、常用功能码及名词解释
线圈(Coils)
线圈在Modbus协议中可以类比为布尔类型的变量。每个线圈代表一个单一的二进制位,通常用于控制或指示某个功能的开/关状态。例如,在编程中,你可能会用一个布尔变量来控制一个循环是否继续执行或判断一个条件是否满足,类似地,在Modbus中,线圈可以用来控制一个电机的启停或检测某个开关是否被激活。
寄存器(Registers)
寄存器则可以类比为程序中的整数变量。在Modbus中,寄存器是16位的,这意味着它可以存储从0到65535的整数值。寄存器根据其用途可分为保持寄存器和输入寄存器:
- 保持寄存器(Holding Registers):这些寄存器可以读写,类似于普通的变量。它们可用于保存可更改的设置或中间计算结果。
- 输入寄存器(Input Registers):这些寄存器仅供读取,类似于常量或只读变量。它们常用于保存从设备如传感器获取的不可更改数据。
4、常用数据类型
英文描述 |
简易表示 |
转换过程 |
目标顺序 |
中文描述 |
go类型 |
占用字节 |
字节序 |
字节交换 |
---|---|---|---|---|---|---|---|---|
Signed |
int16 |
- |
有符号整数 |
int16 |
2 |
- |
- |
|
Unsigned |
uint16 |
- |
无符号整数 |
uint16 |
2 |
- |
- |
|
Float little-endian byte swap |
float32CDAB |
ABCD->DCBA->CDAB |
CDAB |
浮点数 |
float32 |
4 |
小端 |
√ |
Float big-endian |
float32ABCD |
ABCD |
ABCD |
浮点数 |
float32 |
4 |
大端 |
× |
Float little-endian |
float32DCBA |
ABCD->DCBA |
DCBA |
浮点数 |
float32 |
4 |
小端 |
× |
Float big-endian byte swap |
float32BADC |
ABCD->BADC |
BADC |
浮点数 |
float32 |
4 |
大端 |
√ |
32-bit Signed big-endian byte swap |
int32BADC |
ABCD->BADC |
BADC |
有符号整数 |
int32 |
4 |
大端 |
√ |
32-bit Unsigned big-endian |
uint32ABCD |
ABCD |
ABCD |
无符号整数 |
uint32 |
4 |
大端 |
× |
32-bit Unsigned little-endian byte swap |
uint32CDAB |
ABCD->DCBA-> |