无刷电机驱动器Modbus 通讯协议及寄存器说明插图1

1. 通讯协议

本驱动器使用 MODBUS-RTU(国标 GB/T19582-2008)通讯协议进行通讯, 支持一台主站控制多个从站(即驱动器),支持最多 255 个从站,支持通讯广播(从站地址为 0 视为广播帧),主站可以是单片机、PLC 或 PC 机等。

1.1 通讯参数

默认通讯参数:

  • > 波特率固定为 9600bps。
  • > 数据位为 8 位。
  • > 校验为“无+1 停止位”。
  • > 从站地址固定为 1。 用户自定义通讯参数:
  • > 波特率可配置范围 9600-115200bps。
  • > 数据位固定为 8 位。
  • > 校验方式可配置为: “偶+1 停止位”、“奇+1 停止位”和“无+2 停止位”。
  • > 从站地址可设置范围 1~255。

当数据帧通信中断超过 4 个字节的打包时间判定为帧接收超时。当发生帧超时的时候,之前接收到的数据将被 视为无效。

1.2 MODBUS-RTU 帧格式

本驱动器支持 MODBUS 的 0x03(读保持寄存器)、0x06(写单个寄存器)和 0x10(写多个寄存器)功能码。

1.2.1 0x03 读保持寄存器

主站发送:

字节12345678
内容ADR0x03起始寄存器 高字节起始寄存器 低字节寄存器数高字节寄存器数 低字节CRC 低字节CRC  高字节

第 1 字节 ADR: 从站地址码(=001~254)。

第 2 字节 0x03: 读寄存器值功能码。

第 3、4 字节: 要读的寄存器开始地址。

第 5、6 字节: 要读的寄存器数量。

第 7、8 字节: 从字节 1 到 6 的 CRC16 校验码 。

从站回送:

字节1234 56 7M-1MM+1M+2
内容ADR0x03字节总数寄存器 数据 1寄存器 数据 2寄存器数据 MCRC 低字节CRC 高 字节

第 1 字节 ADR: 从站地址码(=001~254)。

第 2 字节 0x03: 返回读功能码。

第 3 字节:从 4 到 M(包括 4 及 M)的字节总数。

第 4 到 M 字节:  寄存器数据。

第 M+1、M+2 字节: 从字节 1 到 M 的 CRC16 校验码。

当从站接收错误时, 从站回送:

字节12345
内容ADR0x83异常码CRC 低字节CRC 高字节

第 1 字节 第 2 字节 第 3 字节

ADR: 从站地址码(=001~254)。

0x83: 读寄存器值出错。

异常码: 见表 1.1

第 4、5 字节: 从字节 1 到 3 的 CRC16 校验码。

1.2.2 0x06 写单个寄存器

主站发送:

字节12345678
内容ADR0x06寄存器高 字节地址寄存器低 字节地址数据高字节数据低字节CRC 码低字节CRC 码高字节

当从站接收正确时, 从站回送:

字节12345678
内容ADR0x06寄存器高 字节地址寄存器低 字节地址数据高字节数据低字节CRC 码低字节CRC 码高字节

当从站接收错误时, 从站回送:

字节12345
内容ADR0x86异常码CRC 低字节CRC 高字节

第 1 字节 第 2 字节 第 3 字节

ADR: 从站地址码(=001~254)。

0x86: 写寄存器值出错功能码。

异常码: 见表 1.1

第 4、5 字节: 从字节 1 到 3 的 CRC16 校验码。

1.2.3 0x10 写多个寄存器值

主站发送:

字节1234567
内容ADR0x10起始寄存器 高字节地址起始寄存器 低字节地址寄存器数 量高字节寄存器数 量低字节数据字 节总数
字节8,910,11N,N+1N+2N+3
内容寄存器数据 1寄存器数据 2寄存器数据 MCRC 码低字节CRC 码高字节

当从站接收正确时, 从站回送:

字节12345678
内容ADR0x10寄存器高 字节地址寄存器低 字节地址寄存器数 量高字节寄存器数 量低字节CRC 码低字节CRC 码高字节

当从站接收错误时,从站回送:

字节12345
内容ADR0x90异常码CRC 低字节CRC 高字节

第 1 字节 第 2 字节 第 3 字节

ADR: 0x90:  异常码:

从站地址码(=001~254)。

写寄存器值出错。

见表 1.1

第 4、5 字节: 从字节 1 到 3 的 CRC16 校验码。

1.2.4 错误异常码

MODBUS 异常码 :如表 1.1 

表 1. 1 MODBUS 异常码表

异常码含义
0x01非法功能码
0x02非法数据地址
0x03非法数据值
0x04从站设备故障
0x05请求已被确认,但需要较长时间来处理请求
0x06从设备忙
0x08存储奇偶性差错
0x0A不可用的网关
0x0B网关目标设备响应失败

2. 标准寄存器定义

2.1 设备描述信息寄存器

设备描述信息寄存器如表 2.1 示。

表 2. 1 设备描述信息寄存器

寄存器地址描述取值范围支持功能码备注
0x0000 (0)设备标识号 0x03每个型号都有对应的设备标识号
0x0001 (1)设备版本 0x03高字节为主版本号,低字节为副版本号
0x0002 (2)最大电流 0x03数值乘以0.01为电流值,单位为A
 0x0003~0x0007(3)~(7) 保留  0x03  

2.2 实时状态寄存器

实时状态寄存器如表 2.2 示。

表 2.2 实时状态寄存器

寄存器地址描述取值范围支持功能码备注
0x0008 (8)实时电流0~655350x03数值乘以 0.01 为电流值,单位为 A
0x0009 (9)实时速度之高半字 -110000~110000 0x03 实时转速,单位为 RPM
0x000A (10)实时速度之低半字
        0x000B (11)        错误状态         0~13         0x030 无错误1:堵转停机2:相序未学习3:相位异常4:相线过流5:母线过流6:电压过高7:电压过低,8:相位学习异常9:过载异常10:485 通信中断11:CAN 通讯中断12:母线电压过高13:温度过高,14:无感启动失败15:相电流异常
0x000C (12)内部电位器电压0~33000x03单位为 mV
0x000D (13)外部信号电压0~100000x03单位为 mV
0x000E (14)保留   
0x000F (15)保留   
 0x0010 (16) 使能电平 0,1 0x030:低电平1:高电平
 0x0011 (17) 刹车电平 0,1 0x030:低电平1:高电平
 0x0012 (18) 方向电平 0,1 0x030:低电平1:高电平
                        0x0013 (19)   控制模式                 0x07,0x09,0x19,0x01,0x11,0x0a,0x1a,0x02,0x12,0x0b,0x1b,0x03,0x13,0x0c,0x1c,0x04,0x14,0x0d,0x1d,0x05,0x15,0x08,0x18,0x00,0x10,0x030-4 位中从低到高定义:①第 4 位表示无感 0 或有感 1,②第 3 位表示开环 0 或闭环 1,③第 0-2 位表示模式:相序学习(111),通讯控制(000),内部电位器(001),模拟量(010),PWM(011),航模 PWM(100),摇杆(101)④取值意义:0x07:相序学习, 0x09:无感/闭环/内部电位器控制,0x19:有感/闭环/内部电位器控制,0x01:无感/开环/内部电位器控制,0x11:有感/开环/内部电位器控制, 0x0a:无感/闭环/模拟量控制,0x1a:有感/闭环/模拟量控制,0x02:无感/开环/模拟量控制,0x12:有感/开环/模拟量控制, 0x0b:无感/闭环/PWM 控制,0x1b:有感/闭环/PWM 控制,0x03:无感/开环/PWM 控制,0x13:有感/开环/PWM 控制, 0x0c:无感/闭环/航模 PWM 控制,0x1c:有感/闭环/航模 PWM 控制,0x04:无感/开环/航模 PWM 控制,0x14:有感/开环/航模 PWM 控制, 0x0d:无感/闭环/摇杆控制,0x1d:有感/闭环/摇杆控制,0x05:无感/开环/摇杆控制,0x15:有感/开环/摇杆控制, 0x08:无感/闭环/通讯控制,0x18:有感/闭环/通讯控制,0x00:无感/开环/通讯控制,0x10:有感/开环/通讯控制,
0x0014(20)负载率0~10000x03数值乘以 0.1%为 PWM 百分比,单位为‰
0x0015(21)输入 PWM 占空比0~10000x03数值乘以 0.1%为输入 PWM 占空比,单位为‰
0x0016(22)电压0~1000x03电源电压,单位为 V
0x0017(23)温度-200~2000x03电路板温度,单位为℃
0x0018(24)保留   

2.3  电机控制寄存器

电机控制寄存器如表 2.3 示。

表 2.3 电机控制寄存器

寄存器地址描述取值范围支持功能码备注
 0x0020 (32) 停止 0, 1, 2 0x03 0x060:正常停止1:紧急制动2:自由停止
0x0021 (33)设定目标参数之高半字闭环:-最高转速~ 最高转速开环:-1000~1000  0x03 0x06 0x10当速度控制为闭环,代表速度,则单位为 RPM;当速度控制为开环,代表 PWM,数值乘以 0.1%为 PWM 百分比。正数表示正转,负数表示反转, 0 正常停止
0x0022 (34)设定目标参数之低半字
 0x0023 (35) 测试控制 0, 1 0x03 0x060:取消测试,1:相序学习
 0x0024 (36) 输出控制 0, 1 0x03 0x060:输出低电平1:输出高电平
0x0025~0x27(37)~ (39) 保留   

2.4  电机参数配置寄存器

电机参数配置寄存器如表 2.4 示。

表 2.4 电机参数配置寄存器

寄存器地址描述取值范围支持功能码备注
0x0028 (40)电机额定电流0~15000x03 0x06 0x10数值乘以 0.01 为电流值, 单位为 A
0x0029 (41)电机最大转速之高半字 0~110000 0x03 0x06 0x10 单位为 RPM
0x002A (42)电机最大转速之低半字
0x002B (43)电机最小转速之高半字 0~110000 0x03 0x06 0x10单位为 RPM,一般设置在 200RPM 以下
0x002C (44)电机最小转速之低半字
 0x002D (45)电机极对数 0~65535 0x03 0x06 0x10定子南北磁极对数,是磁 极的一半
 0x002E (46) 电机 1 、2 相相序数据高字节为 0~6低字节为 0~6 0x03 0x06 0x10低字节为 1 相高字节为 2 相
 0x002F (47) 电机 3 、4 相相序数据高字节为 0~6低字节为 0~6 0x03 0x06 0x10低字节为 3 相高字节为 4 相
 0x0030 (48) 电机 4 、6 相相序数据高字节为 0~6低字节为 0~6 0x03 0x06 0x10低字节为 4 相高字节为 6 相
 0x0031 (49) 相序学习状态 0,1 0x03 0x06 0x100:未学习1:已经学习
   0x0032 (50)   无感启动负载大小   0~4   0x03 0x06 0x100:轻载1:中载2:重载3:小惯性负载4:大惯性负载
0x0033 (51)闭环速度加速加速度100~最大速度0x03 0x06 0x10单位为 RPM/S
0x0034 (52)闭环速度减速加速度100~最大速度0x03 0x06 0x10单位为 RPM/S
0x0035 (53)开环速度加速加速度4~5000x03 0x06 0x10单位为%/S
0x0036 (54)开环速度减速加速度4~5000x03 0x06 0x10单位为%/S
 0x0037 (55) 停止模式 0, 1, 2 0x03 0x06 0x100:正常停止1:紧急制动2:自由停止
 0x0038 (56) 自动换向模式 0, 1, 2 0x03 0x06 0x100:正常换向1:急停换向
 0x0039 (57) 停机锁相电流 0~1500 0x03 0x06 0x100:不停机锁相其他数值:数值乘以 0.01 为电流值,单位为 A
0x003A~0x 3F(58)~ (63) 保留   

2.5 系统参数配置寄存器

系统参数配置寄存器如表 2.5 示。

表 2.5 系统参数配置寄存器

寄存器地址描述取值范围支持功能码备注
0x0040 (64)堵转停机时间0~666350x03 0x06 0x10单位为 mS
0x0041 (65)保护关断电流0~42000x03 0x06 0x10数值乘以 0.01 为电流值, 单位为 A
0x0042 (66)内部电位器控制阈值最大值0~33000x03 0x06 0x10单位为 mV
0x0043 (67)内部电位器控制阈值最小值0~33000x03 0x06 0x10单位为 mV
0x0044 (68)外部输入控制阈值最大值0~100000x03 0x06 0x10单位为 mV
0x0045(69)外部输入控制阈值最小值0~100000x03 0x06 0x10单位为 mV
0x0046 (70)保护电压阈值最大值(过压保护 电压)8~560x03 0x06 0x10 保护电压范围,单位为 V
0x0047 (71)保护电压阈值最小值(欠压保护 电压)8~560x03 0x06 0x10
 0x0048 (72)电压保护设置 0,1 0x03 0x06 0x100:不保护1:电压保护
   0x0049(73)   输出类型   0,1,2,3,4,5   0x03 0x06 0x100:不输出(即输出低电 平)1:长输出2:报警信号输出3:FG 反馈信号输出4:停机信号输出5:通讯控制

2.6 PID 参数配置寄存器

闭环控制 PID参数配置寄存器如表 2.6 示。

表 2.6 闭环控制 PID 参数配置寄存器

寄存器地址描述取值范围支持功能码备注
0x004A (74)速度闭环 P 系数高半字 建议 1~327680 0x03 0x10 数值除以 32768 为实际值
0x004B (75)速度闭环 P 系数低半字
0x004C (76)速度闭环 I 系数高半字 建议 1~326780 0x03 0x10 数值除以 32768 为实际值
0x004D (77)速度闭环 I 系数低半字
0x004E (78)速度闭环 D 系数高半字 建议 1~326780 0x03 0x10 数值除以 32768 为实际值
0x004F (79)速度闭环 D 系数低半字

2.7 通讯参数配置寄存器

通讯参数配置寄存器如表 2.6 示。

表 2.7 通讯参数配置寄存器

寄存器地址描述取值范围支持功能码备注
0x0050 (80)485通讯中断制动时间0~666350x03 0x060x10单位为 S
0x0051 (81)485通讯设备地址0~2550x03 0x060x10Modbus 从设备地址
    0x0052 (82)    485通讯串口波特率    0~4   0x03 0x060x100:96001:192002:384003:576004: 115200单位为 bps
  0x0053 (83)  485 通讯串口检验方式  0~3  0x03 0x060x100:无+停止位1:偶+1 停止位2:奇+1 停止位3:无+2 停止位
0x0054(84)~0 x0059 (89)保留   

3.CRC16 的计算

C 语言 CRC 生成函数如程序 3.1所示。所有的可能的 CRC  值都被预装在两个数组中, 当计算报文内容时可  以简单的索引即可。 一个数组含有 16 位 CRC 域的所有 256 个可能的高位字节,另一个数组含有低位字节的值。 这种索引访问 CRC  的方式提供了比对报文缓冲区的每个新字符都计算新的 CRC  更快的方法。

注意: 此函数内部执行高/低 CRC  字节的交换。此函数返回的是已经经过交换的 CRC  值。也就是说,从该 函数返回的 CRC 值可以直接放置于报文用于发送。

函数使用两个参数:

unsigned char *puchMsg;指向含有用于生成 CRC  的二进制数据报文缓冲区的指针。

unsigned short usDataLen;报文缓冲区的字节数。

注:以下 CRC16 生成函数程序摘自 <MODBUS over Serial Line Specification and Implementation Guide

V1.02> 。

程序 3.1   CRC16 生成函数程序清单

/*  高位字节的 CRC 值*/

static unsigned char auchCRCHi[] = {

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,

0x40

} ;

/* 低位字节的 CRC 值*/

static char auchCRCLo[] = {

0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,

0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,

0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,

0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,

0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,

0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,

0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,   0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,  0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,

0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,

0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,

0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,  0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,

0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,

0x40

};

unsigned short CRC16(puchmsg, usDataLen)     /*  函数以 unsigned short  类型返回 CRC */

unsigned char *puchMsg,                                      /*  用于计算 CRC  的报文*/

unsigned short usDataLen/*  报文中的字节数*/
{ 
unsigned charuchCRCHi = 0xFF;/* CRC  的高字节初始化*/

unsigned charuchCRCLo = 0xFF;     /* CRC  的低字节初始化*/

unsigned uIndex ;           /* CRC  查询表索引*/

while (usDataLen–)

{

/*  完成整个报文缓冲区*/

uIndex = uchCRCLo ^ *puchMsg++; /*  计算 CRC */

uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex];

uchCRCHi = auchCRCLo[uIndex];

}

return (uchCRCHi << 8 | uchCRCLo);

}

相关产品

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

邮箱

cloud@modbus.cn

QQ
QQ
微信
微信
分享本页
返回顶部