Skip to content

Modbus

1. 上位机设置 modbus 主站参数

命令字: 0x7300

参数列表

参数名类型必填说明
masterStationobject主站参数,包含 RTU 参数和 TCP 参数
startAddressbool地址偏移;true 表示地址不变,false 表示地址自动-1

masterStation 参数

参数名类型必填说明
typestring主站类型;取值"TCP","RTU"
processNumberint需要设置的工艺号;范围[1,9]
RTUobjectRTU 参数
TCPobjectTCP 参数

RTU 参数

参数名类型必填说明
baudrateint波特率
checkBitstring校验位;取值"N","E","O"
dataBitint数据位;范围[5,8]
portint端口号
slaveIdint从站 ID;范围[0,65535]
stopBitint停止位;范围[0,1]

TCP 参数

参数名类型必填说明
IPstringIP 地址
endian_typeintFloat 大小端;0表示 AB CD,1表示 CD AB,2表示 BA DC,3表示 DC BA
portint端口号;范围[0,65535]

请求示例

json
{
  "masterStation": {
    "RTU": {
      "baudrate": 115200,
      "checkBit": "E",
      "dataBit": 5,
      "port": 2,
      "slaveId": 1,
      "stopBit": 1
    },
    "TCP": {
      "IP": "192.168.1.14",
      "endian_type": 1,
      "port": 503
    },
    "processNumber": 1,
    "type": "TCP"
  },
  "startAddress": false
}

2. 上位机查询 modbus 参数

命令字: 0x7301

参数列表

参数名类型必填说明
processNumberint需要查询的工艺号;范围[1,9]

请求示例

json
{
  "processNumber": 1
}

3. 控制器回复上位机 modbus 参数

命令字: 0x7302

参数列表

参数名类型必填说明
typestring主站类型;取值"TCP","RTU"
RTUobjectRTU 参数
TCPobjectTCP 参数
modbus_stateboolModbus 连接状态;true 表示已连接,false 表示未连接
response_time_outint读写响应时间;单位 ms
startAddressbool地址偏移;true 表示地址不变,false 表示地址自动-1

RTU 参数

参数名类型必填说明
baudrateint波特率
checkBitstring校验位;取值"N","E","O"
dataBitint数据位;范围[5,8]
portint端口号
slaveIdint从站 ID;范围[0,65535]
stopBitint停止位;范围[0,1]

TCP 参数

参数名类型必填说明
IPstringIP 地址
endian_typeintFloat 大小端;0表示 AB CD,1表示 CD AB,2表示 BA DC,3表示 DC BA
portint端口号;范围[0,65535]

响应示例

json
{
  "RTU": {
    "baudrate": 115200,
    "checkBit": "E",
    "dataBit": 5,
    "port": 2,
    "slaveId": 1,
    "stopBit": 1
  },
  "TCP": {
    "IP": "192.168.1.14",
    "endian_type": 1,
    "port": 503
  },
  "modbus_state": false,
  "response_time_out": 100,
  "startAddress": false,
  "type": "TCP"
}

4. 上位机查询 modbus 连接状态

命令字: 0x7303

请求示例

json
{}

5. 控制器回复上位机 modbus 连接状态

命令字: 0x7304

参数列表

参数名类型必填说明
ModbusConnectboolmodbus 连接状态;true 表示已连接,false 表示未连接

响应示例

json
{
  "ModbusConnect": false
}

6. 上位机设置 modbus 从站参数

命令字: 0x7305

参数列表

参数名类型必填说明
typestring通讯方式;取值"TCP","RTU"
RTUobjectRTU 参数
TCPobjectTCP 参数
master-slaveintmodbus 通讯的主从模式;0表示主站,1表示从站
scancycleint扫描周期;范围[8,1000]ms
stoprunint通讯断开时操作;0表示不停机,1表示停机

RTU 参数

参数名类型必填说明
baudrateint波特率
portint端口号
slaveIdint从站 ID;范围[0,65535]

TCP 参数

参数名类型必填说明
IPstringIP 地址(默认值)
endian_typeintFloat 大小端;0表示 AB CD,1表示 CD AB,2表示 BA DC,3表示 DC BA
portint端口号;范围[0,65535]

请求示例

json
{
  "RTU": {
    "baudrate": 115200,
    "port": 2,
    "slaveId": 1
  },
  "TCP": {
    "IP": "192.168.1.11",
    "endian_type": 0,
    "port": 502
  },
  "master-slave": 1,
  "scancycle": 100,
  "stoprun": 0,
  "type": "TCP"
}

7. 上位机查询 modbus 从站参数

命令字: 0x7306

请求示例

json
{}

8. 控制器回复上位机 modbus 从站参数

命令字: 0x7307

参数列表

参数名类型必填说明
typestring通讯方式;取值"TCP","RTU"
RTUobjectRTU 参数
TCPobjectTCP 参数
enablebool连接使能
master-slaveintmodbus 通讯的主从模式;0表示主站,1表示从站
scancycleint扫描周期;范围[8,1000]ms
stoprunint通讯断开时操作;0表示不停机,1表示停机

RTU 参数

参数名类型必填说明
baudrateint波特率
portint端口号
slaveIdint从站 ID;范围[0,65535]

TCP 参数

参数名类型必填说明
IPstringIP 地址(默认值)
endian_typeintFloat 大小端;0表示 AB CD,1表示 CD AB,2表示 BA DC,3表示 DC BA
portint端口号;范围[0,65535]

响应示例

json
{
  "RTU": {
    "baudrate": 115200,
    "port": 2,
    "slaveId": 1
  },
  "TCP": {
    "IP": "192.168.1.11",
    "endian_type": 0,
    "port": 502
  },
  "enable": false,
  "master-slave": 1,
  "scancycle": 100,
  "stoprun": 0,
  "type": "TCP"
}

9. 上位机设置 modbus 从站连接使能

命令字: 0x7308

参数列表

参数名类型必填说明
enableboolmodbus 从站连接使能

请求示例

json
{
  "enable": true
}

10. 上位机设置 modbus 从站心跳检测使能

命令字: 0x7309

参数列表

参数名类型必填说明
checkheartbool心跳检测使能

请求示例

json
{
  "checkheart": true
}

11. 上位机查询 modbus 从站心跳检测使能

命令字: 0x703A

请求示例

json
{}

12. 控制器回复上位机 modbus 从站心跳检测使能

命令字: 0x703B

参数列表

参数名类型必填说明
checkheartbool心跳检测使能

响应示例

json
{
  "checkheart": true
}

13. 上位机设置 modbus 程序

命令字: 0x703C

参数列表

参数名类型必填说明
jobnamestring已选程序名称
programidint程序序号;范围[1,300]
robotint当前机器人号

请求示例

json
{
  "jobname": "AA",
  "programid": 1,
  "robot": 1
}

14. 上位机查询 modbus 程序

命令字: 0x703D

参数列表

参数名类型必填说明
numint查询数量;固定为10
robotint当前机器人号
startprogramidint查询序列起始程序序号;范围[1,30]

请求示例

json
{
  "num": 10,
  "robot": 1,
  "startprogramid": 1
}

15. 控制器回复上位机 modbus 程序

命令字: 0x703E

参数列表

参数名类型必填说明
jobnamelistarray程序名称列表;长度为10
robotint当前机器人号
startprogramidint序列起始程序序号;范围[1,30]
sumint可选程序总数

响应示例

json
{
  "jobnamelist": ["AA", "", "", "", "", "", "", "", "", ""],
  "robot": 1,
  "startprogramid": 1,
  "sum": 300
}

16. 上位机 Modbus 读线圈(功能码 01H)

命令字: 0x7310

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 1(01H)
addressint起始地址
quantityint读取数量;范围 [1, 2000]

请求示例

json
{
  "processNumber": 1,
  "functionCode": 1,
  "address": 0,
  "quantity": 10
}

17. 控制器回复 Modbus 读线圈(功能码 01H)

命令字: 0x7311

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 1(01H)
dataint[]读取到的线圈状态数组;值为 01
successbool读取是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 1,
  "data": [0, 1, 1, 0, 0, 1, 0, 1, 1, 0],
  "success": true
}

18. 上位机 Modbus 读输入状态(功能码 02H)

命令字: 0x7312

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 2(02H)
addressint起始地址
quantityint读取数量;范围 [1, 2000]

请求示例

json
{
  "processNumber": 1,
  "functionCode": 2,
  "address": 100,
  "quantity": 16
}

19. 控制器回复 Modbus 读输入状态(功能码 02H)

命令字: 0x7313

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 2(02H)
dataint[]读取到的输入状态数组;值为 01
successbool读取是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 2,
  "data": [1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1],
  "success": true
}

20. 上位机 Modbus 读保持寄存器(功能码 03H)

命令字: 0x7314

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 3(03H)
addressint起始地址
quantityint读取数量;范围 [1, 125]

请求示例

json
{
  "processNumber": 1,
  "functionCode": 3,
  "address": 200,
  "quantity": 5
}

21. 控制器回复 Modbus 读保持寄存器(功能码 03H)

命令字: 0x7315

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 3(03H)
dataint[]读取到的保持寄存器值数组;范围 [0, 65535]
successbool读取是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 3,
  "data": [1234, 5678, 910, 1112, 1314],
  "success": true
}

22. 上位机 Modbus 读输入寄存器(功能码 04H)

命令字: 0x7316

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 4(04H)
addressint起始地址
quantityint读取数量;范围 [1, 125]

请求示例

json
{
  "processNumber": 1,
  "functionCode": 4,
  "address": 300,
  "quantity": 8
}

23. 控制器回复 Modbus 读输入寄存器(功能码 04H)

命令字: 0x7317

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 4(04H)
dataint[]读取到的输入寄存器值数组;范围 [0, 65535]
successbool读取是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 4,
  "data": [100, 200, 300, 400, 500, 600, 700, 800],
  "success": true
}

24. 上位机 Modbus 写单个线圈(功能码 05H)

命令字: 0x7318

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 5(05H)
addressint线圈地址
valueint写入值;01

请求示例

json
{
  "processNumber": 1,
  "functionCode": 5,
  "address": 10,
  "value": 1
}

25. 控制器回复 Modbus 写单个线圈(功能码 05H)

命令字: 0x7319

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 5(05H)
successbool写入是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 5,
  "success": true
}

26. 上位机 Modbus 写单个保持寄存器(功能码 06H)

命令字: 0x731A

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 6(06H)
addressint寄存器地址
valueint写入值;范围 [0, 65535]

请求示例

json
{
  "processNumber": 1,
  "functionCode": 6,
  "address": 200,
  "value": 9999
}

27. 控制器回复 Modbus 写单个保持寄存器(功能码 06H)

命令字: 0x731B

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 6(06H)
successbool写入是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 6,
  "success": true
}

28. 上位机 Modbus 写多个线圈(功能码 0FH)

命令字: 0x731C

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 15(0FH)
addressint起始地址
dataint[]写入的线圈值数组;每个元素为 01

请求示例

json
{
  "processNumber": 1,
  "functionCode": 15,
  "address": 20,
  "data": [1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
}

29. 控制器回复 Modbus 写多个线圈(功能码 0FH)

命令字: 0x731D

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 15(0FH)
successbool写入是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 15,
  "success": true
}

30. 上位机 Modbus 写多个保持寄存器(功能码 10H)

命令字: 0x731E

参数列表

参数名类型必填说明
processNumberint工艺号,范围 [1, 9]
functionCodeint功能码,固定为 16(10H)
addressint起始地址
dataint[]写入的寄存器值数组;每个元素范围 [0, 65535]

请求示例

json
{
  "processNumber": 1,
  "functionCode": 16,
  "address": 200,
  "data": [100, 200, 300, 400, 500]
}

31. 控制器回复 Modbus 写多个保持寄存器(功能码 10H)

命令字: 0x731F

参数列表

参数名类型必填说明
processNumberint工艺号
functionCodeint功能码,固定为 16(10H)
successbool写入是否成功

响应示例

json
{
  "processNumber": 1,
  "functionCode": 16,
  "success": true
}

Modbus 功能码汇总

功能码名称命令字(请求)命令字(回复)说明
01H读线圈0x73100x7311读取从站线圈状态(位操作,读/写)
02H读输入状态0x73120x7313读取从站离散输入状态(位操作,只读)
03H读保持寄存器0x73140x7315读取从站保持寄存器(16 位操作,读/写)
04H读输入寄存器0x73160x7317读取从站输入寄存器(16 位操作,只读)
05H写单个线圈0x73180x7319写从站单个线圈状态
06H写单个保持寄存器0x731A0x731B写从站单个保持寄存器
0FH写多个线圈0x731C0x731D写从站多个线圈状态
10H写多个保持寄存器0x731E0x731F写从站多个保持寄存器

Modbus 通讯说明

主站操作流程

  1. 设置主站参数:通过 0x7300 设置 Modbus 主站参数(TCP/RTU 模式、端口、从站 ID 等)
  2. 建立连接:主站参数设置后,通讯自动建立(TCP 模式)或通过串口建立(RTU 模式)
  3. 查询状态:通过 0x7303 查询连接状态,通过 0x7304 获取回复
  4. 读写操作:使用功能码命令(0x7310-0x731F)进行读写操作
  5. 断开连接:TCP 模式下可关闭连接,RTU 模式下串口保持打开

从站操作流程

  1. 设置从站参数:通过 0x7305 设置从站参数
  2. 使能连接:通过 0x7308 使能从站连接
  3. 心跳检测:通过 0x7309 设置心跳使能

地址偏移说明

  • startAddressfalse 时,写入的地址会自动减 1(适用于多数 PLC,如西门子等起始地址为 1 的设备)
  • startAddresstrue 时,写入的地址保持不变(适用于起始地址为 0 的设备)

注意事项

  • 每次读写操作需确保 Modbus 连接已建立,否则操作将失败
  • 读取数量受 Modbus 协议限制:线圈/输入状态最多 2000 个,寄存器最多 125 个
  • 写多个线圈函数会自动将数据打包为 Modbus 协议格式发送
  • TCP 模式的 Float 大小端通过 endian_type 参数控制