WANTO ROBOT
WANTO ROBOT
万图 电缸 Modbus 协议使用说明
V1.2.2
万图机器人(上海)有限公司
1. 多从站连接
Modbus 协议是应用于控制器上的一种通用协议。通过此协议,控制器相互之间经由总线(485 总线)或网络(例如以太网)和其它设备之间可以通信。它已经成为一种通用工业标准。
Modbus 的通信方式为单主站/多从站方式。只有主站可以发出查询(询问)。从站执行查询要求的处理,回复应答信息。
万图电缸驱动器可可支持 ModbusRTU( 标配) 和 ModbusTCP(选配)。 ModbusRTU 采用 485 总线连接,其连接示例如下,为了减小信号反射造成的通信异常,在上位系统和离上位系统最远的驱动器上应该加上 120 欧的终端电阻。本驱动器已经内置终端电阻,需要的时候只要将拨码开关 SW1.4 下拨即可。
<
<
<
<
<
<
驱动器1 驱动器2 驱动器3
A L M
R U N
A L M
R U N
A L M
R U N
M S <
X 9
M S <
X 9
开启终
端电阻
M S <
X 9
CHARGE
!
X 8
1
21
20 B 0RTR R/K
R
2
O4
CHARGE
!
X 8
1
21
20 B 0RTR R/K
R
2
O4
CHARGE
!
X 8
R
B RN B
+R B
-
X 3
0
VO
PO 1P
R
B RN B R+ B
-
X 3
1
21
20 B 0RTR R/K
R
2
O4
PV
0
VO
PO 1P
R
B RN B R+ B
-
X 3
0
VO
PO 1P
PLC
L 1 LC 2
NC
C L 1
L
2
P 3 D
SVI
X IP
7 P1
3S
S T
O ND
-
P-
A-
O 0P H2
D
ALIM
IP 0PH
2O CM
网线
RD
LE
L 1 CL 2
NC
C L 1
L
2
P 3 D
SVI
X IP
7 P1
S T O ND
-
P-
A-
O 0P H2
D
ALIM
IP 0PH
2O CM
PV
P 3 D
SVI
X IP
7 1P
3S
RD
LE
L 1 CL 2
CN
C L 1
L
2
3S
S T O ND
-
P-
A-
O 0P H2
D
ALIM
IP 0PH
2O CM
PV
RD
LE
X 2
+ P+
A+
X 2
+ P+
A+
X 2
+ P+
A+
X 6
X 6
X 6
U
U
U
V
X 5
V
X 5
V
X 1
X 1
X 1
X 5
P E
P E
W
P E
X 4
X 4
X 4
图 1 485 总线多从站连接图
图 2 485 接口示意图
ModbusTCP 总线(选配)采用标准以太网进行连接,最高支持 100M 全双工模式进行通信。默认 IP 地址为 192.168.0.6,端口 502,支持自动协商,所以可以支持 A 类网线和B 类网线。其连接示意图和接口示意图如下:
驱动器1 驱动器2 驱动器3
T/R BRK 120R
120R
M S <
RUN ALM
0V OP1 OP3
PD SV
24V OP0 OP2
HD
ALM
T/R BRK 120R
120R
M S <
RUN ALM
0V OP1 OP3
PD SV
<
<
<
<
24V OP0 OP2
HD
ALM
开启终端电阻
T/R BRK 120R
120R
M S <
RUN ALM
0V OP1 OP3
PD SV
<
<
24V OP0 OP2
HD
ALM
PLC/PC
X4
X3
X 2
B
+ B
- P
X1 1
P
2
GN D
IP1
IP3
S T SON
D-
P-
A-
X7
IP0 IP2
HOME CLR D+
P+ A+
X6
X5
网线 X4
X3
X 2
X1
IP1
IP3
S T SON
D-
P-
A-
X7
B
+ B
- P 1
P 2
GN
D
IP0
IP2
HOME CLR D+
P+ A+
X6
X5
X4
X3
X 2
B
+ B
- P
X1 1
P
2
GN D
IP1
IP3
S T SON
D-
P-
A-
X7
IP0
IP2
HOME CLR D+
P+ A+
X6
X5
路由器/交换机
图 3 以太网连接
图 4 以太网接口示意图
☆注意 1:485 总线电气特性以 EIA-485 为标准,使用双绞线建议使用 CAT5e 以上的,距离不超过 50m。建议一台主站系统不带超过 16 台驱动器。
☆注意 2:驱动器的通信xx率越高,其能支持的通信频率也越高。但是驱动器接收到主站的请求数据后需要 3-5ms 的响应时间,因此通信频率请控制在 100Hz 以内,以保障驱动器能够及时响应请求,否则当请求过快时会导致驱动器触发看门狗重启。
2. 通信参数
本驱动器没有提供拨号开关来设定地址,从站地址必须通过上位软件或者内置按钮进行设定。从站地址请在 87 号参数设置,系统本身支持的从站地址为 1-255,0 为广播
地址,建议设置地址的时候取值在 1-16 之间。修改后要重启驱动器才能生效。当使用 ModbusTCP 时,其默认 IP 地址为 192.168.0.6,端口 502。
本驱动器支持的通信速率(bps)为 9600、19200、38400、57600、115200,出厂时的默认设置为 38400。数据校验方式支持奇校验、偶校验、无校验。要修改通信速率和校验方式,请用上位软件 WantoWin 进行设定,修改 86 号参数即可。修改后要重启驱动器才能生效。
通信默认采用无校验方式,数据位长度 8bit,停止位长度 1bit。默认速率下,通常上位系统的表示方式(38400,N,8,1)
当使用ModbusTCP 时,连接速度支持 10M/100M 全双工以太网,支持自动协商。
在位于上位系统最远位置(终端)的驱动器,设定终端电阻。请将终端电阻设定开关( SW1-No.4)设定为 ON,设定 RS-485 通信的终端电阻( 120 Ω)。出厂时设定 OFF(无终端电阻)。
3. 通信方式
Modbus 协议支持两种通信方式,点对点模式和广播模式。广播模式是指将从站地址设为 0,对所有从站发起查询,从站执行命令,但不会回应。使用该方式的时候需要注意,很多功能是有限制的。
3.1. 通信帧结构
通信时,查询和返回的帧结构是一样的,具体为:
表 1 通信帧结构
开始传输 | 从站地址 | 功能码 | 数据 | CRC 校验码 | 传输结束 |
3.5 个字符 时间 | 1 Byte | 1 Byte | N Byte | 2 Byte | 3.5 个字符 时间 |
该地址即为驱动器参数中设定好的Modbus 从站地址。建议范围为 1-16,0 为广播地址。
本驱动器支持的功能码如下:
表 2 功能码列表
代码(16 进制) | 功能 | 广播 |
0x03 | 读寄存器 | 不支持 |
0x06 | 写单个寄存器 | 支持 |
0x10 | 写多个寄存器 | 支持 |
0x01 | 读 bit 位 | 不支持 |
0x05 | 写单个bit 位 | 支持 |
0x0F | 写多个bit 位 | 支持 |
设定与功能代码相关的数据。数据长度会视功能代码而改变。
Modbus RTU 模式的错误检查采用 CRC-16 方式。从站将计算接收信息的 CRC-16,与信息内的错误检查值比较。如果 CRC-16 的计算值和错误检查一致,会判断为正常的信息。
CRC-16 的计算方法:
1. 将初始值设定为 0xFFFF,计算 0xFFFF 和从站地址( 8 bit)的排他逻辑和 异或。
2. 将步骤 1 的结果往向右移 1bit。这项推移会进行到溢出的 bit 成为“ 1”为止。
3. 溢出的 bit 变成“ 1”之后,计算步骤 2 的结果和 0xA001 的 XOR。
4. 直到推移 8 次为止,会重复步骤 2 和步骤 3。
5. 计算步骤 4 的结果和功能代码( 8 bit)的 XOR。
对所有 byte 重复进行步骤 2 至 4。最后的结果会变成 CRC-16 的计算结果。
驱动器接收到查询请求后,会根据命令执行相应的处理,并返回执行结果,如果没有出现错误,则根据命令会返回相应的消息,消息中包含了查询时使用的功能
码。如果出现错误,则会返回的功能码是查询时功能码加上 0x80,返回的数据里则表示错误码指示发生了什么错误。错误例子如下所示:
表 3 返回消息结构
查询数据(16 进制) | 返回数据(16 进制) | ||||||||
从站地址 | 01 | 从站地址 | 01 | ||||||
功能码 | 10 | 功能码 | 90 | ||||||
数据 | 寄存器地址 | 02 | 数据 | 错误码 | 04 | ||||
寄存器地址 | 42 | CRC 校验 | 4D | ||||||
寄存器数量 | 00 | CRC 校验 | C3 | ||||||
寄存器数量 | 02 | ||||||||
Byte 数 | 04 | ||||||||
寄存器写入值 | 00 | ||||||||
寄存器写入值 | 00 | ||||||||
寄存器写入值 | 03 | ||||||||
寄存器写入值 | 20 | ||||||||
CRC 校验 | 6E | ||||||||
CRC 校验 | 0E |
错误码用来指示发生了什么错误,其具体内容见下表:
表 4 错误帧结构
错误码 | 原因 | 内容 |
0x01 | 不正确的功能 | 功能码不正确,无法执行。 |
0x02 | 错误数据地址 | 数据地址不正确,无法执行。可能的原因 是寄存器地址不在有效范围内。 |
0x03 | 不正确的数据 | 数据不正确,无法执行。可能的原因包括: ⚫ 数据长度超出范围 ⚫ Byte 数不等于寄存器数*2 |
0x04 | 从站错误 | 从站发生错误,无法执行。 |
3.2. 寄存器说明
驱动器内部数据全部都为 32bit,也就是要两个 Modbus 寄存器才能构成一个实际可用的内部数据,地址配置为 big-endian,因此高位数据在前,低位数据在后,比如要传输数据 0x01002F00,应该先传输 0x0100 ,然后接着 0x2F00,组合之后才是实际数据。驱动器内部数据类型有两类,一类以定点数 IQ12 格式表示,其低 12bit 数据表示小数点后的值,另外一类是 Int 类型。
定点数据格式是 DSP 中为了用整数表示小数的一种数据表示方式,IQ12 格式的时候,低 12bit 数据表示小数部分,高 20bit 表示整数部分。其表达的数据范围为:-524288 到 524287.999755859,数据的最小分辨率为 0.000 244141,比如
0x00001000 表示的是 1.0,0x00002100 表示的是 2.0625,以此类推。
在操作时,如果需要将小数转为 IQ12 格式数据,只需将数值乘以 4096 即可,相反要转换回去只需除以 4096,比如要传输的数据为 1.5,则实际数据应该表示为 1.5*4096=6144=0x00001800。
驱动器寄存器分为两位,一类是数据寄存器(采用 0x03、0x06、0x10 功能码进行操作),一类是线圈寄存器(采用 0x01、0x05、0x0F 功能码操作),两类寄存器的地址互不干扰。
表 5 数据寄存器定义(0x03、0x06、0x10 操作码)
区域 | 寄存器地址 | 数据内容 | 解释 | 数据格式 | |
10 进制 | 16 进制 | ||||
监视数据区 ( 只 读) | 1 | 0x01 | 位置指令高位 | 当前控制器内部的实际位置 指令,单位 mm | float |
2 | 0x02 | 位置指令低位 | |||
3 | 0x03 | 速度指令高位 | 当前控制器内部的实际位置 指令,单位 krpm | float | |
4 | 0x04 | 速度指令低位 | |||
5 | 0x05 | 电流指令高位 | 当前控制内部的实际电流指 令,单位% | float | |
6 | 0x06 | 电流指令低位 | |||
7 | 0x07 | 位置反馈高位 | 当前控制内部的实际位置反 馈值,单位 mm | float | |
8 | 0x08 | 位置反馈低位 | |||
9 | 0x09 | 状态反馈高位 | 控制器内部状态量 | 详细定义 见表 7.6 | |
10 | 0x0A | 状态反馈低位 | |||
11 | 0x0B | 速度反馈高位 | 控制器内部的速度反馈 单位:krpm | float | |
12 | 0x0C | 速度反馈低位 | |||
13 | 0x0D | 电流反馈 | 控制内部的电流反馈。单位:0.02%额定电流 | INT 整数型 | |
14 | 0x0E | A 相电流反馈 | |||
15 | 0x0F | B 相电流高位 | |||
16 | 0x10 | 母线电压反馈 | 单位:0.1V | ||
17 | 0x11 | 控制电压反馈 | |||
18 | 0x12 | 温度反馈 | 单位:0.1 摄氏度 | ||
19 | 0x13 | 力控制指令高位 | 控制器内部力控制指令值, 单位:N | float | |
20 | 0x14 | 力控制指令低位 | |||
21 | 0x15 | 力反馈值高位 | 控制器内部检测到的力反馈 值,单位 :N | float | |
22 | 0x16 | 力反馈值低位 | |||
23 | 0x17 | 保留 | |||
24 | 0x18 | 保留 | |||
总 线 数 值 方 式 | 25 | 0x19 | 位置索引高位 | 位置索引编号,总线数值方式运行时可以不管该值,取 值范围:0-255 | 整型 |
26 | 0x1A | 位置索引低位 |
控 制 时 传 递 的 控 制 指 令 ( 读 写) | 27 | 0x1B | 目标位置高位 | 运行的目标位置,取值范围 在正负限位以内,单位 mm | IQ12 |
28 | 0x1C | 目标位置低位 | |||
29 | 0x1D | 速度高位 | 运行的目标速度,单位 krpm | IQ12 | |
30 | 0x1E | 速度低位 | |||
31 | 0x1F | 加速度高位 | 运行时的加速度,单位 g, 1g=9.8m/s^2 | IQ12 | |
32 | 0x20 | 加速度低位 | |||
33 | 0x21 | 减速度高位 | 运行时的加速度,单位 g, 1g=9.8m/s^2 | IQ12 | |
34 | 0x22 | 减速度低位 | |||
35 | 0x23 | 推压高位 | 推压电流百分比,单位% | IQ12 | |
36 | 0x24 | 推压低位 | |||
37 | 0x25 | 电流限制高位 | 运行时电流限制值,单位% | IQ12 | |
38 | 0x26 | 电流限制低位 | |||
39 | 0x27 | 定位距离高位 | 运行时的定位距离,当实际到达位置和目标位置件的距离在该范围内时,到达信号 输出高电平。 | IQ12 | |
40 | 0x28 | 定位距离低位 | |||
41 | 0x29 | 区域正高位 | 区域正,当实际位置在区域 内时,区域信号输出高电平 | IQ12 | |
42 | 0x2A | 区域正低位 | |||
43 | 0x2B | 区域负高位 | 区域正,当实际位置在区域 内时,区域信号输出高电平 | IQ12 | |
44 | 0x2C | 区域负低位 | |||
45 | 0x2D | 模式高位 | 对控制模式进行了定义,具体如下: Bit24:0 直线加减速 :1 S 型加减速 Bit16: 0 绝对定位模式 :1 增量定位模式 Bit8 :0 普通停止模式 :1 在一定时间后SOFF Bit1 Bit0 :0 指令无效 :1 定位模式 :2 推压模式 | 整型 | |
46 | 0x2E | 模式低位 | |||
47 | 0x2F | 参数 1 高位 | 发送控制命令时附带的参 数,根据命令会有变化 | ||
48 | 0x30 | 参数 1 低位 | |||
49 | 0x31 | 参数 2 | 发送控制命令时附带的参数 | ||
50 | 0x32 | 控制指令 | 控制命令,详细见表 13 | ||
51 | 0x33 | 反馈消息 | 控制指令执行后反馈的消 息,指示指令执行情况 | ||
52 | 0x34 | 反馈数据 1 高位 | 命令执行后,如果需要反馈 数据则,从寄存器读取 | ||
53 | 0x35 | 反馈数据 1 低位 | |||
54 | 0x36 | 反馈数据 2 高位 | |||
55 | 0x37 | 反馈数据 2 低位 |
56 | 0x38 | 反馈数据 3 高位 | |||
57 | 0x39 | 反馈数据 3 低位 | |||
58 | 0x3A | 反馈数据 4 高位 | |||
59 | 0x3B | 反馈数据 4 低位 | |||
60 | 0x3C | 反馈数据 5 高位 | |||
61 | 0x3D | 反馈数据 5 低位 | |||
62 | 0x3E | 反馈数据 6 高位 | |||
63 | 0x3F | 反馈数据 6 低位 | |||
64 | 0x40 | 反馈数据 7 高位 | |||
65 | 0x41 | 反馈数据 7 低位 | |||
物 理 IO 监控 ( 只 读) | 66 | 0x42 | 通用 IO 输出信号 | 通用 IO 输出 | 只读数据 |
67 | 0x43 | 通用 IO 输入信号 | 通用 IO 输入 | ||
68 | 0x44 | 关键 IO 输入信号 | 关键 IO 包括了示教、抱闸等信息 | ||
限 位 值 ( 只 读) | 69 | 0x45 | 软限位上限 高位 | 控制器内部的软限位最大值 | IQ12 |
70 | 0x46 | 软限位上限 低位 | |||
71 | 0x47 | 软限位下限 高位 | 控制器内部的软限位最小值 | IQ12 | |
72 | 0x48 | 软限位下限 低位 | |||
73 | 0x49 | 最大速度 高位 | 控制器内部最大速度限制 | IQ12 | |
74 | 0x4A | 最大速度 低位 | |||
75 | 0x4B | 最大加速度 高位 | 控制器内部最大加速度限制 | IQ12 | |
76 | 0x4C | 最大加速度 低位 | |||
77 | 0x4D | 最大减速度 高位 | 控制器内部最大减速度限制 | IQ12 | |
78 | 0x4E | 最大减速度 低位 | |||
79 | 0x4F | 最大推压 高位 | 最大推压力限制值 | IQ12 | |
80 | 0x50 | 最大推压 低位 | |||
81 | 0x51 | 伺服类型 | 0 表示 步进伺服,1 表示交 流伺服 | ||
82 | 0x52 | 版本信息 | |||
83 | 0x53 | 推压力比例 高位 | 推压力比例系数 | IQ12 | |
84 | 0x54 | 推压力比例 低位 | |||
IO 输入 寄 存器 | 85 | 0x55 | IO 信号输入 | 该寄存器和线圈寄存器 1、2、 3、4 保持同步 | Modbus IO 模式时使用 |
86 | 0x56 | ||||
87 | 0x57 | IO 位置输入 | 该寄存器和线圈寄存器 5、6 保持同步 | ||
88 | 0x58 | 保留 | 保留 | 保留 | |
整 数 型 反 | 89 | 0x59 | 位置反馈高位 | 当前控制内部的实际位置反 馈值,单位 mm | IQ12 |
90 | 0x5A | 位置反馈低位 |
馈 | 91 | 0x5B | 报警代码 | 报警代码反馈 | INT |
92 | 0x5C | 电流反馈值 | 内部电流反馈值,1000 代表 100%额定电流 | ( 0.1% ) 额定电流 | |
93 | 0x5D | 速度反馈高位 | 当前电缸的运动速度,单位 mm/s | IQ12 | |
94 | 0x5E | 速度反馈低位 | |||
95 | 0x5F | 状态反馈高位 | 控制器内部状态量 | 详细定义 见表 7.6 | |
96 | 0x60 | 状态反馈低位 | |||
保留 | |||||
位 置 表 数 据 1 | 1000 | 0x3E8 | 等待时间 | 本条指令完成后等待多少时 间跳转到下一条指令。只有在 IO 模式下有效。 | 整型 |
1001 | 0x3E9 | Bit8-15:跳转指令索引号。 Bit0-7:本条指令索引号 | 跳转指令和等待时间配合使用。 位置索引编号,总线数值方 式运行时可以不管该值,取值范围:0-255 | ||
1002 | 0x3EA | 目标位置高位 | 运行的目标位置,取值范围 在正负限位以内,单位 mm | IQ12 | |
1003 | 0x3EB | 目标位置低位 | |||
1004 | 0x3EC | 速度高位 | 运行的目标速度,单位 krpm | IQ12 | |
1005 | 0x3ED | 速度低位 | |||
1006 | 0x3EE | 加速度高位 | 运行时的加速度,单位 g, 1g=9.8m/s^2 | IQ12 | |
1007 | 0x3EF | 加速度低位 | |||
1008 | 0x3F0 | 减速度高位 | 运行时的加速度,单位 g, 1g=9.8m/s^2 | IQ12 | |
1009 | 0x3F1 | 减速度低位 | |||
1010 | 0x3F2 | 推压高位 | 推压电流百分比,单位% | IQ12 | |
1011 | 0x3F3 | 推压低位 | |||
1012 | 0x3F4 | 电流限制高位 | 运行时电流限制值,单位% | IQ12 | |
1013 | 0x3F5 | 电流限制低位 | |||
1014 | 0x3F6 | 定位距离高位 | 运行时的定位距离,当实际到达位置和目标位置件的距离在该范围内时,到达信号 输出高电平。 | IQ12 | |
1015 | 0x3F7 | 定位距离低位 | |||
1016 | 0x3F8 | 区域正高位 | 区域正,当实际位置在区域 内时,区域信号输出高电平 | IQ12 | |
1017 | 0x3F9 | 区域正低位 | |||
1018 | 0x3FA | 区域负高位 | 区域正,当实际位置在区域 内时,区域信号输出高电平 | IQ12 | |
1019 | 0x3FB | 区域负低位 | |||
1020 | 0x3FC | 模式高位 | 对控制模式进行了定义,具 | 整型 |
1021 | 0x3FD | 模式低位 | 体如下: Bit24:0 直线加减速 :1 S 型加减速 Bit16: 0 绝对定位模式 :1 增量定位模式 Bit8 :0 普通停止模式 :1 在一定时间后SOFF Bit1 Bit0 :0 指令无效 :1 定位模式 :2 推压模式 | ||
1022 - 1031 | 0x3FE - 0x407 | 系统保留 | |||
位 置 表 指 令 2 | 1032 | 0x408 | 位置索引高位 | 位置索引编号,总线数值方 式运行时可以不管该值,取值范围:0-255 | 整型 |
1033 | 0x409 | 位置索引低位 | |||
1034 | 0x40A | 目标位置高位 | 运行的目标位置,取值范围 在正负限位以内,单位 mm | IQ12 | |
1035 | 0x40B | 目标位置低位 | |||
..... | |||||
. . . . . | |||||
位 置 指 令 表 255 | 9192 | 0x23E8 | 位置索引高位 | ||
每条位置表指令占用 32 个寄存器变量,其中后 10 个系统保留为以后扩展用。要计算位置表的起始地址,按照如下公式: Address(n)=1000+(n*32) ,n 的取值范围为 0-255. |
表 6 状态寄存器定义
寄存器地址 0x09(9)或者 0x60(96) | ||
Bit 位 | 状态名称 | 解释 |
0 | PE4 | 直接位置指令 4 到达状态 |
1 | PE5 | 直接位置指令 5 到达状态 |
2 | PE6 | 直接位置指令 6 到达状态 |
3 | PE7 | 直接位置指令 7 到达状态 |
4 | PINIT | 相位初始化 |
5 | PUSH | 推压状态,在推压动作中,到达目标位置后,进入推压状态 时,该位置 1 |
6 | CASH | 表示 Modbus 的实时数据存放块,0 位于 100-149,1 位 于 150-199 |
7 | HOMING | 表示是否正在归零中 |
8 | RSVD | 保留扩展位 |
9 | ||
10 | ||
11 | ||
12 | ||
13 | ||
14 | ||
15 | ||
寄存器地址 0x0A(10)或者 0x5F(95) | ||
Bit 位 | 状态名称 | 解释 |
0 | RMODS | 运行模式(1 示教/0 运行) |
1 | MOVING | 移动中 |
2 | INPOS | 定位完成 |
3 | HOMED | 归零完成 |
4 | ZONE1 | 区域 1 信号 |
5 | PZONE | 位置表区域信号 |
6 | WEND | 写入完成 |
7 | MODES | 运行模式(1 示教/0 正常) |
8 | SV | 伺服使能状态 |
9 | ALM | 报警状态 |
10 | EMGS | 急停状态 |
11 | LOAD | 推压负载状态 |
12 | PE0 | 直接位置指令 0 到达状态 |
13 | PE1 | 直接位置指令 1 到达状态 |
14 | PE2 | 直接位置指令 2 到达状态 |
15 | PE3 | 直接位置指令 3 到达状态 |
线圈寄存器可以直接操作 bit 位,其总共有 104 个 bit 数据,其中bit7-bit55 与数据寄存器 85、86、87 保持同步。需要注意的是,修改线圈寄存器会同步到数据寄存器中,但是,修改数据寄存器并不会同步到线圈寄存器。驱动器最终动作以数据寄存器内的值为准。
线圈寄存器的具体定义如下:
表 7 线圈寄存器定义(0x01、0x05、0x0F 操作码)
读写 | 定义 | 功能 | ||
线圈地 址 | 对应数据 寄存器 | |||
0-6 | - | 保留 | 系 统 保 留 | 系统保留 |
7 | 85:0 (表示 85号数据寄 存 器 的 bit0) | 只读 | RMOD | 运行模式切换 1:手动示教模式 0:自动运行模式 该位由外部拨码开关的状态决定,无法修改。 |
8 | 85:1 | 读写 | CSTR | 开始运行 当 CSTR 为 0 时写入 1 时,系统按照指定的命令表 内的指令开始运行到目标位置。如果还未归零就执行该指令,会出现报警。 |
9 | 85:2 | 读写 | STP | 暂停信号 0:正常运行 1:暂停运行 当电机在运行的时候触发该信号,电机将减速到 0,当信号恢复为 0 后,将继续原来的命令驱动电机运动。 |
10 | 85:3 | 读写 | HOME | 归零信号 0:无动作 1:归零 当信号从0→1 转换时,上升沿信号会触发归零动作,一直保持 1 或者从 1→0 都不会产生任何动作。 |
11 | 85:4 | 读写 | SON | 伺服使能 0:伺服关闭 1:伺服使能 |
12 | 85:5 | 读写 | RES | 清除报警 0:无动作 1:清除报警 当发生报警时候,该信号从 0→1 转变时将清除当前发生的报警,如果是严重错误,则清除无效,需要重 |
启才可。 | ||||
13 | 85:6 | 读写 | BKRL | 打开抱闸 0:无动作 1:强制打开抱闸 |
14 | 85:7 | 读写 | MODE | 运行模式切换 1:手动示教模式 0:自动运行模式 当 RMOD 为 1 时,该 bit 位的状态决定了系统的运行模式。 |
15 | 85:8 | 读写 | PWRT | 当前位置示教写入 0:无动作 1:当前位置写入位置表 当处于示教模式时,该信号从 0→1 变化,将把当前所在的位置信息写入到位置表中, 并保存到 EEPROM,除位置之外的速度、加速度、减速度等信息将按照默认值设定。设定完后,请等待 50ms 之后再进行操作。 |
16 | 85:9 | 读写 | JISL | 寸动/点动切换 0:点动 1:寸动 当该值为 0 的时候,JOG_P 和 JOG_N 信号将触发连续运行。当该值为 1 时,JOG_P 和 JOG_N 信号从 0→1 变换将触发移动一次寸动。 |
17 | 85:10 | 读写 | JOG_P | 点动信号+ 0:无动作 1:根据 JISL 的设定执行点动或者寸动操作。点动运行的速度在第 97 号参数中定义。寸动操作的距离在 第 98 号参数中定义。 |
18 | 85:11 | 读写 | JOG_N | 点动信号- 0:无动作 1:根据 JISL 的设定执行点动或者寸动操作。点动运行的速度在第 97 号参数中定义。寸动操作的距离在 第 98 号参数中定义。 |
19 | 85:12 | 读写 | ST0 | 直接定位指令 当 STn bit 位使能后,将会直接触发第 n 条位置指令。如果位置表内没有定义相应的位置信息,则报警。当x条指令同时使能后,最小 bit 位的指令将被触发。 |
20 | 85:13 | 读写 | ST1 | |
21 | 85:14 | 读写 | ST2 | |
22 | 85:15 | 读写 | ST3 |
23 | 86:0 | 读写 | ST4 | |
24 | 86:1 | 读写 | ST5 | |
25 | 86:2 | 读写 | ST6 | |
26 | 86:3 | 读写 | ST7 | |
27 | 86:4 | 读写 | POSRU N | 数值模式开始运行 0:无动作 1:开始运行 在总线数值模式下,该信号从 0→1 后,会根据数据寄存器 25 到数据寄存器 46 的定义,开始运行。通 过该方式可以实现任意点的运动,而不限于 256 个 示教点的限制。 |
28 | 86:5 | 读写 | PUSH | 脉冲模式下,该位置 1 可进入推压模式。 |
29 | 86:6 | 读 | ST | 进入直接位置模式。 |
30 | 86:7 | 读 | POSM ODIFY | 表示位置被修改过。 |
31 | 86:8 | 读写 | NOT | 负限位输入状态 |
32 | 86:9 | 读写 | POT | 正限位输入状态 |
33 | 86:10 | 读写 | HW | 回零开关输入状态 |
34 | 86:11 | 读写 | EMG | 急停输入状态 |
35 - 38 | 86:12 - 86:15 | xx | xx | xx |
39 | 87:0 | 读写 | PC0 | 位置表索引指定 通过 PC0-PC7 组合得到 256 个位置索引,PC8 和 PC9 保留扩展用。位置索引= PC7*27+PC6*26+PC5*25+PC4*24+PC3*23+P C2*22+PC1*21+PC0 |
40 | 87:1 | 读写 | PC1 | |
41 | 87:2 | 读写 | PC2 | |
42 | 87:3 | 读写 | PC3 | |
43 | 87:4 | 读写 | PC4 | |
44 | 87:5 | 读写 | PC5 | |
45 | 87:6 | 读写 | PC6 | |
46 | 87:8 | 读写 | PC7 | |
47 | 87:9 | 读写 | PC8 | |
48 | 87:10 | 读写 | PC9 | |
49 - 54 | 87:11 - 87:15 | xx | xx | xx |
55 | 95:0 | 只读 | RMOD S | 运行模式指示 1:手动示教模式 0:自动运行模式 |
指示拨码开关的状态 | ||||
57 | 95:1 | 只读 | MOVIN G | 移动中指示 0:静止 1:电机在移动中 |
58 | 95:2 | 只读 | INPOS | 定位完成 0: 未完成定位 1:已完成定位 当电缸实际位置和目标位置之差在定位距离范围之内时,该信号为 1,否则为 0 |
59 | 95:3 | 只读 | HOME D | 归零完成 0:未完成归零 1:已完成归零 HOME 信号触发归零动作,完成归零之后,该信号为 1,否则为 0 |
60 | 95:4 | 只读 | ZONE1 | 区域 1 信号 0:电缸位于区域 1 之外 1:电缸位于区域 1 之内 当电缸位于第 23 号参数和第 24 号参数之间的时候 ZONE1 信号输出 1,否则输出 0 |
61 | 95:5 | 只读 | PZONE | 位置表区域信号 0:位于当前位置表定义的区域之外 1:位于当前位置表定义的区域之内 当电缸位于位置表中定于的区域之内时,输出为 1,否则为 0. |
62 | 95:6 | 只读 | WEND | 写入完成 0:普通状态 1:示教位置写入完成 该信号在写入位置完成之后变为 1,而且该信号会保持为 1 直到 PWRT 信号恢复为 0. |
63 | 95:7 | 只读 | MODES | 示教状态 0:示教状态 1:运行状态 区别于 RMODS,该信号是在 RMODS 为 0 时,且工作模式位于 PIO 示教和总线 IO 方式时才有效。 |
64 | 95:8 | 只读 | SV | 伺服使能状态 0:未使能 1:使能 当电机使能时,该值为 1,此时才可对电机进行操作,否则将出现错误。 |
65 | 95:9 | 只读 | ALM | 报警信号 |
0:正常 1:报警状态 当驱动器出现异常报警时,该信号为 1,要清除该信号,请使用 RES。 | ||||
66 | 95:10 | 只读 | EMGS | 急停状态信号 0:正常 1:急停状态 当马达电源被切断后,驱动器判断为急停状态,此时无法操作驱动器,只能等待该信号恢复正常才可进行操作。 |
67 | 95:11 | 只读 | LOAD | 推压状态 0:正常 1:推压时推压电流达到了设定的值 该状态指示推压是否达到了指定的电流限制值,会随着位置表中的推压电流设置而变化。 |
68 | 95:12 | 只读 | PE0 | 位置到位指示信号 刚驱动工作于直接位置模式下的时候,该信号用于指示到达了哪条位置指令所指定的目标位置。 |
69 | 95:13 | 只读 | PE1 | |
70 | 95:14 | 只读 | PE2 | |
71 | 95:15 | 只读 | PE3 | |
72 | 96:0 | 只读 | PE4 | |
73 | 96:1 | 只读 | PE5 | |
74 | 96:2 | 只读 | PE6 | |
75 | 96:3 | 只读 | PE7 | |
76 | 96:4 | 只读 | PINIT | 相位初始化完成信号 0:未完成相位初始化 1:已完成相位初始化 电机第一次使能的时候将进行相位初始化,初始化完成后,该信号将保持为 1 |
77 - 87 | 96:5 - 96:15 | xx | xx | xx |
88 | 97:0 | 只读 | PCS0 | 定位完成索引指示 该信号用于指示完成定位的是哪条位置表信号。通过二进制组合的方式得到位置表的索引值。 位置索引= PCS7*27+PCS6*26+PCS5*25+PCS4*24+PCS3* 23+PCS2*22+PCS1*21+PCS0 |
89 | 97:1 | 只读 | PCS1 | |
90 | 97:2 | 只读 | PCS2 | |
91 | 97:3 | 只读 | PCS3 | |
92 | 97:4 | 只读 | PCS4 | |
93 | 97:5 | 只读 | PCS5 | |
94 | 97:6 | 只读 | PCS6 | |
95 | 97:7 | 只读 | PCS7 | |
96 | 97:8 | 只读 | PCS8 |
97 | 97:9 | 只读 | PCS9 | |
98 - 103 | 97:10 - 97:15 | xx | xx | xx |
3.3. 运行说明
3.3.1. 总线 IO 方式
当第 83 号参数等于 2 时,系统工作于总线 IO 模式,该模式下用 Modbus 协议代替了物理 IO 操作,从而实现在 PIO 控制模式下同等的功能,以及一些 PIO 方式下无法实现的功能。总线 IO 方式是推荐使用的一种总线控制方式。下面以几个例子来阐明使用方法。
例 1:使能伺服,只需要设置 SON 为 1 即可。发送的数据为:
01 05 00 0B FF 00 FD F8
表 8 例子 1 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 05 | 05 功能码表示写入单个 bit 的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 0B | 地址低位为 0B,十进制为 11,其他 IO 的地址见上表。 |
数据高位 | FF | FF00 表示设置 bit 值为 1,0000 表示设置 bit 值为 0 |
数据地位 | 00 | |
CRC | FD | CRC 校验码 |
CRC | F8 |
例 2:运行位置表索引为 3 的位置指令
需要两步完成,首先设置位置表索引的值发送的数据为:
01 0F 00 27 00 02 01 03 00 11 7F
表 9 例子 2 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 0F | 0F 功能码表示写入多个 bit 的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 27 | 地址低位为 27,十进制为 39。 |
输出数量高位 | 00 | 输出的 bit 数 |
输出数量低位 | 02 | |
输出字节数 | 01 | 输出的字节数 |
数据高位 | 03 | 数据排序按照每个字节的低位到高位排列,所以高位的 03 代表修改第 27、28 两个 bit 为 1. |
数据地位 | 00 | |
CRC | 11 | CRC 校验码 |
CRC | 7F | CRC 校验码 |
第二步设置 CSTR 信号为 1,启动运行,发送的数据为: 01 05 00 08 FF 00 0D F8
表 10 例子 1 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 05 | 05 功能码表示写入单个 bit 的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 08 | 地址低位为 08,十进制为 8,其他 IO 的地址见上表。 |
数据高位 | FF | FF00 表示设置 bit 值为 1,0000 表示设置 bit 值为 0 |
数据地位 | 00 | |
CRC | 0D | CRC 校验码 |
CRC | F8 |
此外,总线 IO 方式控制时还有一种非常方便的控制方式,即利用 POSRUN 信号实现无需示教的任意位置运行。在这种方式下只需要通过 0x10 功能码修改数据寄存器 27 到寄存器 46 的值,然后通过 0x05 功能码修改 POSRUN 为 1 即可运动到寄存器中指定的位置,而且加速度、减速度等值都可以一起修改。具体见例子 3。
例 3,通过 POSRUN 方式实现电缸直接运行到位置 10.00mm 处,速度为
50mm/s,加速度为 0.1g,减速度为 0.2g 则:
第一步,先发送位置、速度、加速度、减速度指令到数据寄存器 27、28、29、 30,发送的数据为:
01 10 00 1B 00 08 10 00 00 A0 00 00 03 20 00 00 00 01 99 00 00 03 32
4C 42
数据的详细解释见表 11
表 11 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 1B | 地址低位为 1B。 |
寄存器数高位 | 00 | 发送的寄存器数,共 8 个寄存器 |
寄存器数低位 | 08 | |
字节数 | 10 | 发送数据的字节数,共 16 个字节 |
数据 1 高位寄存器 | 0000 | 0000A000 为 IQ12 格式的 10.0 (mm) |
数据 1 低位寄存器 | A000 | |
数据 2 高位寄存器 | 0003 | 00032000 为 IQ12 格式的 50.0 (mm/s) |
数据 2 低位寄存器 | 2000 | |
数据 3 高位寄存器 | 0000 | 00000199 为 IQ12 格式的 0.1 (g) |
数据 3 低位寄存器 | 0199 | |
数据 4 高位寄存器 | 0000 | 00000332 为 IQ12 格式的 0.2 (g) |
数据 4 低位寄存器 | 0332 | |
CRC | 4C | CRC 校验码 |
CRC | 42 |
第二步,将 POSRUN 位置 1,触发运动。注意,如果已经将 POSRUN 置 1 了,则重新写入 1 是不会起作用的,需要先将 POSRUN 置 0,然后再写入 1 才能运行。写入的数据为:
01 05 00 1B FF 00 FC 3D
表 12 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 05 | 05 功能码表示写入单个 bit 的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 1B | 地址低位为 1B,十进制为 27,其他 IO 的地址见 上表。 |
数据高位 | FF | FF00 表示设置 bit 值为 1,0000 表示设置 bit 值 为 0 |
数据地位 | 00 | |
CRC | FC | CRC 校验码 |
CRC | 3D |
例 4,Modbus IO 模式下通过数据寄存器实现电机使能、回零、状态检查,最后通过直接写数据的方式实现在 0mm 和 200mm 处以加速度 1g,速度 200mm/s来回运动。电机轴地址为 02。
第一步:将控制模式 83 号参数设置为 2。
第二步:使能电机。此处直接操作 86 号数据寄存器的使能位,发送数据为:
02 10 00 55 00 01 02 00 10 BF 69
数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 55 | 地址低位为 55,十进制为 85。 |
寄存器数量高位 | 00 | 地址高位为 0 |
寄存器数量低位 | 01 | 地址低位为 01,表示写入一个寄存器 |
写入字节数 | 02 | 一个寄存器需 2 个字节 |
数据高位 | 00 | 0010 的 bit 位代表电机使能,具体请参考表 7 |
数据地位 | 10 | |
CRC | BF | CRC 校验码 |
CRC | 69 |
第三步:读取反馈。读取状态寄存器 95(0x5F),查看是否使能完成。发送数据为:02 03 00 5F 00 01 B4 2B
返回数据为:02 03 02 01 00 FD D4
发送数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 03 | 03 功能码表示读取多个寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 5F | 地址低位为 5F,十进制为 95。 |
寄存器数量高位 | 00 | 地址高位为 0 |
寄存器数量低位 | 01 | 地址低位为 01,表示读取一个寄存器 |
CRC | B4 | CRC 校验码 |
CRC | 2B |
返回数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 03 | 03 功能码表示读取多个寄存器的值 |
返回数据的字节数 | 02 | 地址高位为 0 |
返回数据高位 | 01 | 高位为 01,1 表示使能完成 |
返回数据低位 | 00 | 低位为 00 |
CRC | FD | CRC 校验码 |
CRC | D4 |
第四步:归零。此处直接操作 86 号数据寄存器的归零位,发送数据为:
02 10 00 55 00 01 02 00 18 BF 69
数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 55 | 地址低位为 55,十进制为 85。 |
寄存器数量高位 | 00 | 地址高位为 0 |
寄存器数量低位 | 01 | 地址低位为 01,表示写入一个寄存器 |
写入字节数 | 02 | 一个寄存器需 2 个字节 |
数据高位 | 00 | 0018 的 bit 位代表电机使能,以及回零,具体 请参考表 7 |
数据地位 | 18 | |
CRC | BF | CRC 校验码 |
CRC | 69 |
第五步:读取反馈。读取状态寄存器 95(0x5F),查看是否归零完成。发送数据为:02 03 00 5F 00 01 B4 2B
返回数据为:02 03 02 01 1A 7C 1F
表示使能完成,归零完成。具体如下
高位(01) | 低位(1A) | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
直接位置 3 | 直接位置 2 | 直接位置 1 | 直接位置 0 | 推压负载 | 急停 | 报警 | 使能完成 | 外部运行模式 | 写入完成 | 位置表区域信 号 | 区域信号 1 | 归零完成 | 定位完成 | 移动中 | 运行模式 |
第六步:发送位置、速度、加速度、减速度指令到数据寄存器 27、28、29、 30,发送的数据为:02 10 00 1B 00 08 10 00 0C 80 00 00 06 40 00 00 00 10
00 00 00 10 00 B4 88
数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 1B | 地址低位为 1B。 |
寄存器数高位 | 00 | 发送的寄存器数,共 8 个寄存器 |
寄存器数低位 | 08 | |
字节数 | 10 | 发送数据的字节数,共 16 个字节 |
数据 1 高位寄存器 | 000C | 000C8000 为 IQ12 格式的 200.0 (mm) |
数据 1 低位寄存器 | 8000 | |
数据 2 高位寄存器 | 0006 | 00064000 为 IQ12 格式的 100.0 (mm/s) |
数据 2 低位寄存器 | 4000 | |
数据 3 高位寄存器 | 0001 | 00001000 为 IQ12 格式的 1 (g) |
数据 3 低位寄存器 | 0000 | |
数据 4 高位寄存器 | 0001 | 00001000 为 IQ12 格式的 2 (g) |
数据 4 低位寄存器 | 0000 | |
CRC | B4 | CRC 校验码 |
CRC | 88 |
第七步:将 POSRUN 位置 1,触发运动。注意,如果已经将 POSRUN 置 1 了,则写入位置数据后会自动触发运动指令。如需要下次运行通过 POSRUN 触发,则在 POSRUN 置 1 后要将POSRUN 置 0。
写入的数据为:02 10 00 56 00 01 02 00 10 BF 5A
数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 05 功能码表示写入单个 bit 的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 56 | 86 号寄存器。 |
寄存器数量高位 | 00 | 写入 1 个寄存器 |
寄存器数量低位 | 01 | |
直接数 | 02 | 总共写入 2 个字节 |
数据高位 | 00 | 将 POSRUN 设置为 1 |
数据地位 | 10 | |
CRC | BF | CRC 校验码 |
CRC | 5A |
将 POSRUN 置 0:02 10 00 56 00 01 02 00 00 BE 96
第八步:查询状态,确认是否到位。发送数据:02 03 00 5F 00 01 B4 2B
返回数据为:02 03 02 11 0C F0 11
表示使能完成,归零完成,定位完成。具体如下
高位(11) | 低位(0C) | ||||||||||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
直接位置 3 | 直接位置 2 | 直接位置 1 | 直接位置 0 | 推压负载 | 急停 | 报警 | 使能完成 | 外部运行模式 | 写入完成 | 位置表区域信 号 | 区域信号 1 | 归零完成 | 定位完成 | 移动中 | 运行模式 |
第九步:确认定位完成之后,发送新的位置信息到寄存器 0x1B,将 POSRUN 置 1,然后置 0,触发新指令的运行。
注意,如果已经将 POSRUN 置 1 了,则写入位置数据后会自动触发运动指令,无需再操作 POSRUN,可以提高通信效率。
发送位置数据:02 10 00 1B 00 02 04 00 00 00 00 BC 54
第十步:查询状态,确认是否到位。
发送数据:02 03 00 5F 00 01 B4 2B
返回数据为:02 03 02 11 0C F0 11
回到第六步,进行重复运行。
3.3.2. 总线数值方式(命令模式)
除了以 IO 方式控制驱动器运动之外,还可以通过命令的方式实现,这样功能更加全面,控制起来也更加灵活。要进入总线命令控制模式,需要将第 83 号参数设置为 3,重启后生效。
与命令模式控制相关的寄存器主要是寄存器 47、48、49、50、51、52、53
(0x2F、0x30、0x31、0x32、0x33、0x34、0x35)其中寄存器 50 是命令寄存器,发送的命令码都是发送到该寄存器。
47、48、49 寄存器用来传输命令相应的参数,有些命令不需要参数,有些需要一个或两个,根据不同的命令发送相应的数值。51 寄存器是命令执行结果反馈,用户可以判读命令执行的情况。有些命令会返回一些执行结果数据,那么会存储在 52、53 寄存器,用户可以通过读取这些寄存器来获取执行结果。下表是命令的定义。
表 13 命令列表
命令码 | 命令名 | 描述 | 参数 | 返回结果 |
0 | MSG_NONE | 无动作 | 无 | 无 |
1 | MSG_START | 触发运动 | 无 | 寄存器 51 的值为1 表示执行成 功 为4 表示出现错误。 |
2 | MSG_STOP | 停止当前运动 | 无 | |
3 | MSG_CONTINUE | 继续被暂停的运动 | 无 | |
4 | MSG_ENABLE_SERVO | 使能伺服 | 无 | |
5 | MSG_DISABLE_SERVO | 关闭伺服使能 | 无 | |
6 | MSG_HOME | 归零 | 无 | |
7 | MSG_RESET_ALARM | 清除报警 | 无 | |
8 | MSG_READ_ALARMC ODE | 读取报警代码 | 无 | |
9 | MSG_DEL_ALMHISTO RY | 删除报警历史记录 | 无 | |
10 | MSG_READ_ALMHIST ORY | 读取报警历史记录 | 无 | |
11 | MSG_PAUSE | 暂停运动 | 无 | |
12 | MSG_CURRENT_ADJU ST | 校正电流零点 | 无 | |
13 | MSG_IOTEST | 进行 IO 测试 | 无 | |
14 | MSG_IOTEST_DONE | Io 测试完成 | 无 | |
15 | MSG_SET_POSIDX | 设置位置表编号 | 设置参数 2=编号 值 | |
16 | MSG_UPDATE_POSC MD | 更新位置指令,并启动 运行。 | 位置指令发送到寄 存器25-寄存器46 |
17 | MSG_CHANGE_MOD E | 改变模式? | ||
18 | MSG_SET_JOGVEL | 设置点动速度 | 设置参数 1=速度 值 | |
19 | MSG_SET_INCHDIS | 设置寸动距离 | 设置参数 1=距离 值 | |
20 | MSG_SET_OVERRIDE | 设置速度百分比 | 设置参数 1=速度 速度百分比值 | |
21 | MSG_SET_VEL | 设置点到点运动时的 速度 | 设置参数 1=速度 值 | |
22 | MSG_SET_POS | 设置点到点运动时的 目标位置 | 设置参数 1=目标 位置值 | |
23 | MSG_GET_POSIDX | 获取位置编号 | 无 | 52、53 寄存器反馈 位置编号、点动速度 等 |
24 | MSG_GET_JOGVEL | 获取点动速度 | 无 | |
25 | MSG_GET_INCHDIS | 获取寸动距离 | 无 | |
26 | MSG_GET_OVERRIDE | 获取速度百分比 | 无 | |
27 | MSG_GET_VEL | 获取点到点运动速度 | 无 | |
28 | MSG_GET_POS | 获取点到点运动目标 位置 | 无 | |
29 | MSG_PARAM_MODE | 进入参数编辑模式 | 无 | |
30 | MSG_PARAM_DONE | 退出参数编辑模式 | 无 | |
31 | MSG_SAVE_PARAM | 保存参数 | 设置参数 1=参数值 设置参数 2=参数 地址 | |
32 | MSG_READ_PARAM | 读取一个参数 | 设置参数 2=参数 地址 | |
33 | MSG_READ_PARAM5 | 读取 5 个参数 | 设置参数 2=参数 起始地址 | |
34 | MSG_CLEAR_PARAM | 清除参数 | 无 | |
35 | MSG_RESET_PARAM | 重置参数到出厂状态 | 无 | |
36 | MSG_SAVEALL_PARA M | 保存所有参数 | 无 | |
37 | MSG_POS_MODE | 进入位置表编辑模式 | 无 | |
38 | MSG_POS_DONE | 退出位置表编辑模式 | 无 | |
39 | MSG_READ_POS | 读取一条位置表数据 | 设置参数 2=位置 表索引 | |
40 | MSG_SAVE_POS | 保存一条位置表数据 | 设置参数 2=位置 表索引 |
41 | MSG_CLEAR_POS | 清除一条位置表记录 | 设置参数 2=位置 表索引 | |
42 | MSG_POS_READFLAG | 读取位置保存标志 | 设置参数 2=位置 表索引 | |
43 | MSG_POS_INITFLAG | 初始化位置保存标志 | 无 | |
44 | MSG_POS_SAVEFLAG | 保存位置保存标志 | 无 | |
45 | MSG_JOG_P | 正向点动 | 无 | |
46 | MSG_JOG_N | 负向点动 | 无 | |
47 | MSG_INCH_P | 正向寸动 | 无 | |
48 | MSG_INCH_N | 负向寸动 | 无 | |
49 | MSG_JOG_ABS | 点到点运动 | 无 | |
50 | MSG_RESET_CONTRO LLER | 重启控制器 | 无 | |
51 | MSG_SET_DATETIME | 设置日期和时间 | 第 48、49、50 寄存器分别设置年、月、日、时、分、秒 的 BCD 码 | |
52 | MSG_GET_DATETIME | 获取日期和时间 | 寄存器 53、 54、55、56 分别存储 年月日时 分 秒 的 BCD 码 | |
53 | MSG_RSV1 | 保留,无作用 | 无 | |
54 | MSG_RSV2 | 保留,无作用 | 无 | |
55 | MSG_SET_PGAIN | 设置位置环增益 | 调试用,不建议操作。 | |
56 | MSG_SET_PFF | 设置速度前馈 | ||
57 | MSG_SET_PFILT | 设置位置滤波器带宽 | ||
58 | MSG_SET_VGAIN | 设置速度环增益 | ||
59 | MSG_SET_VINTER | 设置速度环积分增益 | ||
60 | MSG_SET_VFF | 设置加速度前馈 | ||
61 | MSG_SET_VFILT | 设置速度指令滤波器 带宽 | ||
62 | MSG_SET_TUNEDIS | 设置增益调节的运行 距离 | ||
63 | MSG_SET_TUNEVEL | 设置增益调节的运行 速度 | ||
64 | MSG_SET_TUNEACC | 设置增益调节的运行 加速度 |
65 | MSG_SET_TUNERUN NUM | 设置运行的次数 | ||
66 | MSG_SET_TUNEDATA 1 | 设置增益调节的监控 数据 1 | ||
67 | MSG_SET_TUNEDATA 2 | 设置增益调节的监控 数据 2 | ||
68 | MSG_RUN_TUNE | 开始运行调试 | ||
69 | MSG_STOP_TUNE | 停止调试 |
根据不同的命令,使用起来有些不同。命令分为 3 类:
⚫ 无参数,无反馈数据
⚫ 无参数,有反馈数据
⚫ 有参数,无反馈数据
⚫ 有参数,有反馈数据用户需要两个步骤进行控制:
第一步:发送参数和控制命令,如果没有参数,则直接发送命令即可。
第二步:读取执行结果和返回的参数,如果没有反馈数据,则直接读取执行结果即可。
由于参数和命令、执行结果和反馈数据寄存器安装顺序排列,所以使用的时候可以根据命令类型灵活安排是否发送参数以及是否读取反馈数据。也可以固定每次都发送参数和命令,不需要参数的命令直接用 0 填充。
下面以几个例子来阐明使用方法。
例 4:通过命令模式使能伺服
该命令属于无参数,无反馈数据的命令,直接发送伺服使能命令到 50(0x32)寄存器即可。
01 10 00 32 00 01 02 00 04 A3 81
表 14 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 32 | 地址低位为 32。 |
寄存器数高位 | 00 | 发送的寄存器数,共 1 个寄存器 |
寄存器数低位 | 01 | |
字节数 | 02 | 发送数据的字节数,共 2 个字节 |
命令寄存器 | 0004 | 使能伺服命令 |
CRC | A3 | CRC 校验码 |
CRC | 81 |
如果需要知道伺服使能是否成功,请读取伺服状态寄存器的值。具体见表 6 中的定义。
*注意,如果是上电之后初次使能伺服,驱动器会进行电机相位初始化,所以使能的时间会比较长,请等待一段时间之后再读取执行结果。
例 5:通过命令模式修改点动速度为 55mm/s
该命令需要发送相应的参数,该参数即为修改后的速度,具体数据如下:
01 10 00 2F 00 04 08 00 03 70 00 00 00 00 12 9B EC
数据解释如下:
表 15 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 2F | 地址低位为 32。 |
寄存器数高位 | 00 | 发送的寄存器数,共 4 个寄存器 |
寄存器数低位 | 04 | |
字节数 | 08 | 发送数据的字节数,共 8 个字节 |
参数 1 | 0003700 | 55mm/s 的 IQ12 格式表示 |
参数 2 | 0000 | 用零填充 |
命令寄存器 | 0012 | 设置点动速度命令 |
CRC | 9B | CRC 校验码 |
CRC | EC |
例 6:通过命令模式修改位置、速度、加速度、减速度、电流值、区域、指令类型等数据,并触发运行该指令。总线数值模式下,在自动运行状态,只要修改了位置指令值,就会自动触发运行。
第一步,先发送命令数据,具体数据(16 进制)如下:
01 10 00 19 00 16 2C 00 00 00 00 00 00 C0 00 00 06 40 00 00 00 04 CC
00 00 04 CC 00 03 20 00 00 00 00 00 00 00 01 99 00 00 00 00 00 00 00 00
01 00 00 00 BF 55
数据解释如下:
表 16 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 01 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 19 | 地址低位为 32。 |
寄存器数高位 | 00 | 发送的寄存器数,共 22 个寄存器 |
寄存器数低位 | 16 | |
字节数 | 2C | 发送数据的字节数,共 44 个字节 |
数据 1(4 字节) | 00 00 00 00 | 索引,以 0 填充 |
数据 2(4 字节) | 00 00 C0 00 | 表 示 目 标 位 置 , 12mm ,其 IQ 格 式 表 示 =12*4096=49152=0xC000 |
数据 3(4 字节) | 00 06 40 00 | 表示速度, 100mm/s ,其 IQ 格 式表示为 100*4096=409600=0X64000 |
数据 4(4 字节) | 00 00 04 CC | 表示加速度, 0.3G ,其 IQ 格式表示为 0.3*4096=1228=0x04CC |
数据 5(4 字节) | 00 00 04 CC | 表 示 减 速 度 , 0.3G , IQ 格 式 表 示 为 0.3*4096=1228=0x04CC |
数据 6(4 字节) | 00 03 20 00 | 表 示 推 压 电 流 , 50% , IQ 格 式 表 示 为 50*4096=204800=0x32000 |
数据 7(4 字节) | 00 00 00 00 | 保留变量,用 0 填充 |
数据 8(4 字节) | 00 00 01 99 | 定位距离,0.1mm,IQ 格式表示 0x199 |
数据 9(4 字节) | 00 00 00 00 | 区域正 |
数据 10(4 字节) | 00 00 00 00 | 区域负 |
数据 11(4 字节) | 01 00 00 00 | 位置类型,这里最前面的 01 表示定位型指令,所 以这 4 个字节可以固定为 01 00 00 00 |
CRC | BF | CRC 校验码 |
CRC | 55 |
数据发送后,电缸以设定的速度、加速度等参数自动触发运行到设定位置。上位控制器
需要读取驱动器的状态反馈,以确定定位动作是否完成。
第二步,读取反馈状态,确定是否定位完成。读取数据寄存器 7、8、9、10 的数据,然后再做处理。寄存器 7、8 存储的是电机的当前位置信息,寄存器 9、10存储的是当前的 IO 状态信息。
读取需要发送的数据命令为:
02 03 00 07 00 04 F5 FB
表 17 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 03 | 03 功能码表示读取数据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 07 | 地址低位为 0x07。 |
数据高位 | 00 | 读取 4 个寄存器的值 |
数据低位 | 04 | |
CRC | F5 | CRC 校验码 |
CRC | FB |
返回的数据为:
02 03 08 C2 C6 5E 7E 00 40 00 01 54 76
表 18 数据具体解释
字节定义 | 内容 | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 03 | 03 功能码表示读取数据寄存器的值 |
地址高位 | 08 | 返回数据的字节数 |
数据 1 | C2 C6 5E 7E | 位置数据,类型为 float 型。注意,在计算机上要表示 float 型数据,其字节序与返回的数据是相反的,所以在计算机上要正确显示数据,需要将数据处理成 7E 5E C6 C2,然后直接将其转换为浮点型即可。以下为 C#中的转换代码: float ret; byte[] temp = { 0x7E,0x5E,0xC6,0xC2 }; ret = BitConverter.ToSingle(temp, 0); 这样即可得到浮点型的值-99.184555。 |
数据 2 | 00 40 00 01 | 状态数据。参照表 7.6 的定义可知,返回的状态中 RMODS 为 1,以及 CASH 位为 1. |
CRC | 54 | CRC 校验码 |
CRC | 76 |
返回的状态,如果指示 PEND 信号为 1,则表示定位完成。也可以查看反馈的位置信号是否为指定的位置信号来验证是否到位。
例 7. 下面以轴地址为 2 的电缸做例子说明如何通过 ModbusRTU 协议对电缸进行操作,不同的轴地址只需修改第一个字节的内容即可,同时 CRC 校验码也会发生改变。
要运行电缸,分为 7 个步骤:
1. 使能电缸。
2. 读取状态标志,确认电缸已经使能。
3. 回零位。
4. 读取状态标志,确认电缸已经回零完成。
5. 指定目标位置、速度等信息。
6. 触发运行。
7. 读取状态标志,确认电缸定位完成。如果定位完成,则回到步骤 5,执行下一个位置定位。
其中步骤 6,在总线命令模式下,如果 1 号拨码开关处于 OFF 状态,那么可以省略。因为步骤 5 一旦修改了目标位置,会自动触发运行。
1. 通过命令模式使能电缸
该命令属于无参数,无反馈数据的命令,直接发送伺服使能命令到 50
(0x32)寄存器即可。发送的消息:
01 10 00 32 00 01 02 00 04 B7 71
数据具体解释
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数 据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 32 | |
寄存器数高位 | 00 | 发送的寄存器数,共 1 个 寄存器 |
寄存器数低位 | 01 | |
字节数 | 02 | 发送数据的字节数,共 2 个字节 |
命令寄存器 | 00 04 | 使能伺服命令 |
CRC | B7 | CRC 校验码 |
71 |
返回消息为:
02 10 00 32 00 01 A0 35
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数 据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 32 | |
寄存器数高位 | 00 | 发送的寄存器数,共 1 个 寄存器 |
寄存器数低位 | 01 | |
CRC | A0 | CRC 校验码 |
35 |
如果返回的消息第二字节不是 10,而是 90,那么就说明命令有误,数据发送不成功。
2. 读取电缸状态标志,确认已经使能
状态反馈寄存器地址为 0x09 和 0x0A,读取的值的定义参看表 6 中的定义。要读取状态标志,发送如下数据:
02 03 00 09 00 02 14 3A
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 03 | 03 功能码表示读取多个数 据寄存器的值 |
地址高位 | 00 | 地址 |
地址低位 | 09 | |
寄存器数高位 | 00 | 读取的寄存器数,共 2 个 寄存器 |
寄存器数低位 | 02 | |
CRC | 14 | CRC 校验码 |
3A |
返回的数据为:
02 03 04 00 50 01 00 C8 B2
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 03 | 03 功能码表示读取多个数 据寄存器的值 |
返回字节数 | 04 | 返回数据的字节数 |
数据, 寄存器 0x09 | 00 | 表示 bit15-bit8 |
50 | 表示 bit7-bit0 | |
数据 寄存器 0x0A | 01 | 表示 bit15-bit8 |
00 | 表示 bit7-bit0 | |
CRC | C8 | CRC 校验码 |
B2 |
注意:这里读取的值都是高位在前,低位在后,所以寄存器 0x0A 的值 01 00 表示电缸使能完成。
3. 回零位
回零位,发送的命令和使能差不多。只不过回零的命令为 00 06,所以发送的数据为:
02 10 00 32 00 01 02 00 06 36 B0
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数 据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 32 | |
寄存器数高位 | 00 | 发送的寄存器数,共 1 个 寄存器 |
寄存器数低位 | 01 | |
字节数 | 02 | 发送数据的字节数,共 2 个字节 |
命令寄存器 | 00 06 | 使能伺服命令 |
CRC | 36 | CRC 校验码 |
B0 |
返回的消息为:
02 10 00 32 00 01 A0 35
具体解释可以参照前面的内容。表示数据发送成功。
4. 读取状态反馈,确认归零完成。
和确认使能完成一样,发送如下数据:
02 03 00 09 00 02 14 3A
返回的数据为:
02 03 04 01 50 01 08 C8 88
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 03 | 03 功能码表示读取多个数 据寄存器的值 |
返回字节数 | 04 | 返回数据的字节数 |
数据, 寄存器 0x09 | 00 | 表示 bit15-bit8 |
50 | 表示 bit7-bit0 | |
数据 寄存器 0x0A | 01 | 表示 bit15-bit8 |
08 | 表示 bit7-bit0 | |
CRC | C8 | CRC 校验码 |
88 |
其中 01 08 两个字节中的使能完成和归零完成都为 1,表明电缸使能,并且归零完成。
5. 指定目标位置和速度。
目标位置和速度的寄存器地址分别为 0x1B-0x1C 和 0x1D-0x1E,可以同时修改,也可以只修改位置。速度修改一次后,会一直保留,直到重新修改后才会改变。
比如要以 75mm/s 的速度,定位到位置 50mm 处。则首先将速度值和位置值转化为
IQ12 格式:
位置=50*4096=204800=0x00032000速度=75*4096=307200=0x0004B000
所以发送的数据为:
02 10 00 1B 00 04 08 00 03 20 00 00 04 B0 00 D1 3E
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数 据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 1B | |
寄存器数高位 | 00 | 发送的寄存器数,共 4 个 寄存器 |
寄存器数低位 | 04 | |
字节数 | 08 | 发送数据的字节数,共 8 个字节 |
位置 | 00 03 20 00 | 位置,50mm |
速度 | 00 04 B0 00 | 速度,75mm/s |
CRC | D1 | CRC 校验码 |
3E |
反馈的消息:
02 10 00 1B 00 04 B1 FE
6. 触发运行
如果处于示教模式(即 1 号拨码开关状态为 ON),则需要发送命令来触发电缸执行运动指令。
如果拨码开关处于 OFF 状态,则,无需发送该命令。触发运行的命令为 00 01,所以发送的数据为:
02 10 00 32 00 01 02 00 10 B7 7E
字节定义 | 内容(16 进制) | 解释 |
轴地址 | 02 | 伺服轴的地址 |
功能码 | 10 | 10 功能码表示写入多个数 据寄存器的值 |
地址高位 | 00 | 地址高位为 0 |
地址低位 | 32 | |
寄存器数高位 | 00 | 发送的寄存器数,共 1 个 寄存器 |
寄存器数低位 | 01 | |
字节数 | 02 | 发送数据的字节数,共 2 个字节 |
命令寄存器 | 00 10 | 使能伺服命令 |
CRC | B7 | CRC 校验码 |
7E |
7. 读取状态反馈,确定定位完成和前面一样,发送如下数据: 02 03 00 09 00 02 14 3A
返回的数据为:
02 03 04 01 10 01 1C C9 53
数据 01 1C 的二进制位 0000 0001 0001 1100
通过对比可知,定位完成信号为 ON,定位已经完成,可以进行下一个位置点的移动。回到步骤 5 即可。
4. 修改日志
2021 年 9 月 7 日 -- V1.2.1
修改位置表 0x3ED 之后的数据地址错误。添加位置索引和跳转部分的详细说明。
2022 年 1 月 7 日 -- V1.2.2
修改表格标号 7.12 为表 13。