UF_ModbusTcp_Manual

注意

  • 协议遵循标准ModbusTCP协议

  • 所有数据按照⼤端格式传输, 如16位数据0x1234对应的2字节数据为0x12和0x34

  • 不同地址的寄存器的值意义不⼀样, 请参⻅附录说明

  • 访问的地址要在定义的范围(请参⻅附录说明)内,否则会得到异常响应

各种寄存器所⽀持的ModbusTCP功能码

线圈状态寄存器(1位)

  • 0x01: 读取多个寄存器的值,对应的ModbusTCP协议回复的数据的每⼀位表⽰1个寄存器的值

// ⽰例请求与响应/异常
// 请求: 从地址0x0000开始读取16个寄存器
00 01 00 00 00 06 01 01 00 00 00 10
// 响应: 读取到的 0xF7 0x00 的每⼀位对应1个寄存器的值(以实际获取到的为准)
00 01 00 00 00 05 01 01 02 F7 00
// 异常: XX为异常码
00 01 00 00 00 03 01 81 XX
  • 0x05: 写单个寄存器的值, 对应ModbusTCP协议中的数据只能是0xFF00或0x0000,分别对应 的寄存器值1和0

// ⽰例请求与响应/异常
// 请求: 向地址为0x0002的寄存器写⼊1 (0xFF00 表⽰写⼊1, 0x0000 表⽰写⼊0)
00 01 00 00 00 06 01 05 00 02 FF 00
// 响应
00 01 00 00 00 06 01 05 00 02 FF 00
// 异常: XX为异常码
00 01 00 00 00 03 01 85 XX
  • 0x0F: 写多个寄存器的值

// ⽰例请求与响应/异常
// 请求: 从地址0x0002开始写⼊3个寄存器的值, 0x07表⽰3个寄存器都写⼊1
00 01 00 00 00 08 01 0F 00 02 00 03 01 07
// 响应
00 01 00 00 00 06 01 0F 00 02 00 03
// 异常: XX为异常码
00 01 00 00 00 03 01 8F XX

离散输⼊状态寄存器(1位)

  • 0x02: 读多个寄存器的值

// ⽰例请求与响应/异常
// 请求: 从地址0x0000开始读取16个寄存器
00 01 00 00 00 06 01 02 00 00 00 10
// 响应: 读取到的 0xFF 0x00 的每⼀位对应1个寄存器的值(以实际获取到的为准)
00 01 00 00 00 05 01 02 02 FF 00
// 异常: XX为异常码
00 01 00 00 00 03 01 82 XX

保持寄存器(16位)

  • 0x03: 读多个寄存器的值

// ⽰例请求与响应/异常
// 请求: 从地址0x0003开始读取2个寄存器的值
00 01 00 00 00 06 01 03 00 03 00 02
// 响应: 读取到的2个寄存器的值分别为(00 05)和(00 06),(以实际获取到的为准)
00 01 00 00 00 07 01 03 04 00 05 00 06
// 异常: XX为异常码
00 01 00 00 00 03 01 83 XX
  • 0x06: 写单个寄存器的值

// ⽰例请求与响应/异常
// 请求: 向地址位0x0020的寄存器写⼊0x0006
00 01 00 00 00 06 01 06 00 20 00 06
// 响应
00 01 00 00 00 06 01 06 00 20 00 06
// 异常: XX为异常码
00 01 00 00 00 03 01 86 XX
  • 0x10: 写多个寄存器的值

// ⽰例请求与响应/异常
// 请求: 从地址0x0003开始写⼊2个寄存器的值
// 写⼊两个寄存器的值分别为(04 D2)和(0D 80), 对应的10进制为1234和3456
00 01 00 00 00 0B 01 10 00 03 00 02 04 04 D2 0D 80
// 响应
00 01 00 00 00 06 01 10 00 03 00 02
// 异常: XX为异常码
00 01 00 00 00 03 01 90 XX
  • 0x16: 以掩码的形式写单个寄存器的值

/// ⽰例请求与响应/异常
// 请求: 以掩码的形式写地址为0x0000的寄存器
// 与操作的掩码为(00 0F),或操作的掩码为(0F 00)
// 假定操作前寄存器值为val, 掩码过后的值为 (val & 0x000F) | (0x0F00 & ~0x000F)
00 04 00 00 00 08 01 16 00 00 00 0F 0F 00
// 响应
00 04 00 00 00 08 01 16 00 00 00 0F 0F 00
// 异常: XX为异常码
00 01 00 00 00 03 01 96 XX
  • 0x17: 写多个寄存器的值,并读多个寄存器的值

// ⽰例请求与响应/异常
// 请求: 从地址0x0020开始写⼊2个寄存器的值, 并从地址为0x0003开始读取2个寄存器的值
// 写⼊到2个寄存器的值分别为(00 06)和(00 04)
00 01 00 00 00 0F 01 17 00 03 00 02 00 20 00 02 04 00 06 00 04
// 响应: 读取到的2个寄存器的值分别为(04 D1)和(0D 7F),(以实际获取到的为准)
00 01 00 00 00 07 01 17 04 04 D1 0D 7F
// 异常: XX为异常码
00 01 00 00 00 03 01 97 XX

输⼊寄存器(16位)

  • 0x04: 读多个寄存器的值

// ⽰例请求与响应/异常
// 请求: 从地址0x0003开始获取2个寄存器的值
00 01 00 00 00 06 01 04 00 03 00 02
// 响应: 读取到的2个寄存器的值分别为(00 0E)和(00 13),(以实际获取到的为准)
00 01 00 00 00 07 01 04 04 00 0E 00 13
// 异常: XX为异常码
00 01 00 00 00 03 01 84 XX

异常码说明

  • 0x01: 功能码不⽀持

  • 0x02: 要访问的寄存器地址⾮法

  • 0x03: 请求数据异常

附录

线圈状态寄存器(1位, 可读可写)

地址(十进制)地址(十六进制)说明

0 ~ 31

0x00 ~ 0x1F

32路控制器的数字输出IO (当前仅16路有效)

32 ~ 39

0x20 ~ 0x27

8路末端⼯具的数字输出IO (当前仅2路有效)

40 ~ 127

0x28 ~ 0x7F

保留

128 ~ 134

0x80 ~ 0x86

关节(J1-J7)的报闸状态

135 ~ 141

0x87 ~ 0x8D

关节(J1-J7)的使能使能状态

142

0x8E

缩减模式(0关闭, 1开启)

143

0x8F

围栏模式(0关闭, 1开启)

144

0x90

暂停运动控制(0表⽰不是暂停, 1表⽰暂停)

145

0x91

停⽌运动控制(0表⽰不是停⽌, 1表⽰停⽌)

146 ~ 159

0x92 ~ 0x9F

运动模式(0表⽰不是处于该模式, 1表⽰处于该模式), 分别对应 模式0-13

160 ~ 255

0xA0 ~ 0xFF

保留

256 ~ 511

0x100 ~ 0x1FF

⽤户⾃定义使⽤

离散输⼊状态寄存器(1位, 只读)

地址(十进制)地址(十六进制)说明

0 ~ 31

0x00 ~ 0x1F

32路控制器的数字输⼊IO (当前仅16路有效)

32 ~ 39

0x20 ~ 0x27

8路末端⼯具的数字输⼊IO (当前仅2路有效)

40 ~ 127

0x28 ~ 0x7F

保留

保持寄存器(16位, 可读可写)

地址(十进制)地址(十六进制)说明

0 ~ 1

0x00 ~ 0x01

32路控制器的数字输出IO, 每1位表⽰1路IO (当前仅16路有效)

2

0x02

8路末端⼯具的数字输出IO, 每1位表⽰1路IO (当前仅2路有效)

3 ~ 6

0x03 ~ 0x06

4路控制器的模拟输出IO, 寄存器的值是实际值的1000倍 (当前仅2路有效)

7 ~ 10

0x07 ~ 0x0A

4路末端⼯具的模拟输出IO, 寄存器的值是实际值的1000倍 (当前仅0路有 效)

11 ~ 31

0x0B ~ 0x1F

保留

32

0x20

机械臂模式

33

0x21

机械臂状态

34 ~ 47

0x22 ~ 0x2F

保留

48 ~ 63

0x30 ~ 0x3F

离线(Blockly)任务 (仅⽀持通过0x10功能码往0x30地址写最多16个寄存器 的值来触发离线任务, 每个寄存器的值对应Blockly⼯程名, 1对应00001, 12对应00012)

64 ~ 255

0x40 ~ 0xFF

保留

256 ~ 511

0x100 ~ 0x1FF

保留

输⼊寄存器(16位, 只读)

地址(十进制)地址(十六进制)说明

0 ~ 1

0x00 ~ 0x01

32路控制器的数字输⼊IO, 每1位表⽰1路IO (当前仅16路有效)

2

0x02

8路末端⼯具的数字输⼊IO, 每1位表⽰1路IO (当前仅2路有效)

3 ~ 6

0x03 ~ 0x06

4路控制器的模拟输⼊IO, 寄存器的值是实际值的1000倍 (当前仅2路 有效)

7 ~ 10

0x07 ~ 0x0A

4路末端⼯具的模拟输⼊IO, 寄存器的值是实际值的1000倍 (当前仅2 路有效)

11 ~ 31

0x0B ~ 0x1F

保留

32

0x20

机械臂的错误码

33

0x21

机械臂的警告码

34 ~ 35

0x22 ~ 0x23

计数器的值 (0x22存储计数器的⾼16位, 0x23存储计数器的低16位)

36 ~ 63

0x23 ~ 0x3F

保留

64 ~ 72

0x40 ~ 0x48

机械臂的x/y/z/roll/pitch/yaw/rx/ry/rz值, 寄存器的值是实际值的10倍 (单位: mm, 度)

73 ~ 76

0x49 ~ 0x4C

机械臂的TCP负载mass(1000倍)/center_x(10倍)/center_y(10 倍)/center_z(10倍) (单位: kg, mm)

77 ~ 82

0x4D ~ 0x52

机械臂的TCP偏移, 寄存器的值是实际值的10倍(单位: mm, 度)

83 ~ 88

0x53 ~ 0x58

机械臂的基座标偏移, 寄存器的值是实际值的10倍(单位: mm, 度)

89 ~ 95

0x59 ~ 0x5F

机械臂各关节(J1-J7)的⾓度, 寄存器的值是实际值的10倍(单位: 度)

86 ~ 102

0x60 ~ 0x66

机械臂各关节(J1-J7)的温度 (单位: 摄⽒度)

103 ~ 109

0x67 ~ 0x6D

机械臂各关节(J1-J7)的速度, 寄存器的值是实际值的10倍(单位: 度/s)

110

0x6E

机械臂的TCP速度, 寄存器的值是实际值的10倍(单位: mm/s)

111 ~ 127

0x6F ~ 0x7F

保留

Last updated