概述
在 MODBUS 通讯中,只有主站可以发起通讯,从站应答。 主站可使用两种方式向从站 发送消息。 一种是单播模式(地址为 1 至 247),此模式下主站直接寻址一个从站;另 一种是广播模式(地址为 0),此模式下主站寻址所有从站。
当从站被寻址并收到消息后,可以通过功能代码得知要执行的任务。从站接收的某些数据 对应由功能代码定义的任务。 此外还包含一个用于错误检测的 CRC(循环冗余校验)码。
MODBUS 从站在接收并处理一个单播消息之后会发送应答,此前提是接收的消息中未检 测到错误。 如果发生处理错误,从站会发送错误消息进行应答。 消息中有如下固定的成 帧字符不可被更改:8 个数据位、1 个奇偶校验位以及 1 个或 2 个停止位。
支持的功能代码
SINAMICS V20 仅支持三种功能代码。 如果收到带有未知功能代码的请求,从站会返回 错误消息。
FC3 - 读保持寄存器
当接收的消息带有 FC = 0 x 03 时,则为 4 字节数据,即 FC3 有 4 字节数据:
- 2字节为寄存器的起始地址
- 2字节为寄存器数量
字节 1 | 字节 2 | 字节 3 | 字节 4 | 字节 5 | 字节 6 | 字节 7 | 字节 8 |
地址 | FC
(0x03) |
起始地址 | 寄存器数 | CRC | |||
高 | 低 | 高 | 低 | 高 | 低 |
变频器的响应
字节 1 | 字节 2 | 字节 3 | 字节 4 | 字节 5 | ... | 字节 N*2
- 1 |
字节 N*2 | 字节 N*2
+ 1 |
字节 N*2
+ 2 |
地址 | FC
(0x03) |
字节数 | 寄存器 1 的值 | ... | 寄存器 N 的值 | CRC | |||
高 | 低 | 高 | 低 | 高 | 低 |
FC6 - 写单一寄存器
当接收的消息带有 FC = 0x06 时,则为 4 字节数据,即 FC6 有 4 字节数据:
- 2字节为寄存器的起始地址
- 2字节为寄存器值
字节 1 | 字节 2 | 字节 3 | 字节 4 | 字节 5 | 字节 6 | 字节 7 | 字节 8 |
地址 | FC
(0x06) |
起始地址 | 新寄存器值 | CRC | |||
高 | 低 | 高 | 低 | 高 | 低 |
变频器的响应
字节 1 | 字节 2 | 字节 3 | 字节 4 | 字节 5 | 字节 6 | 字节 7 | 字节 8 |
地址 | FC
(0x06) |
起始地址 | 新寄存器值 | CRC | |||
高 | 低 | 高 | 低 | 高 | 低 |
FC16 - 写多寄存器
当接收的消息带有 FC = 0x10 时,则为 5 + N 字节数据,即 FC16 有 5 + N 字节数据:
- 2字节为寄存器的起始地址
- 2字节为寄存器数量
- 1字节为字节计数
- N字节为寄存器值
异常响应
如果在 MODBUS 请求处理时检测到错误,从站会返回请求的功能代码进行响应,但数据 域中只包含功能代码的高位以及异常代码。 但是,在全局地址 0 上检测到的任何错误 都不会产生响应,因为所有从站不能同时进行响应。
如果在接收到的消息中检测到错误(例如,奇偶校验错误、CRC 错误等),从站不会向 主站发送响应。
请注意,如果收到带有 FC16 的请求且其中包含一个变频器无法执行的写指令(包括向零 条目中写入),从站即使发送异常响应也仍然会执行其他有效的写指令。
SINAMICS V20 支持以下 MODBUS 异常代码:
异常代码 | MODBUS 名称 | 含义 |
01 | 非法功能代码 | 不支持的功能代码 – 仅支持 FC3、FC6 和
FC16 |
02 | 非法数据地址 | 查询无效地址。 |
03 | 非法数据值 | 识别到无效的数据值。 |
04 | 从站装置故障 | 从站装置在进行处理操作时发生不可恢复的 错误。 |
下表列出了异常代码所对应的错误情况:
错误描述 | 异常代码 |
未知功能代码 | 01 |
读寄存器,不在范围内 | 02 |
写寄存器,不在范围内 | 02 |
过多寄存器(>125)的读请求 | 03 |
过多寄存器(>123)的写请求 | 03 |
消息长度不正确 | 03 |
向只读寄存器中写入 | 04 |
写寄存器,参数访问错误 | 04 |
读寄存器,参数管理器错误 | 04 |
向零条目中写入 | 04 |
未知错误 | 04 |
变频器基本设置
参数 | 功能 | 设置 |
P0010 | 调试参数 | = 30: 恢复出厂设置 |
P0970 | 工厂复位 | 可能的设置:
= 1: 所有参数(不包括用户默认设置)复位至默认 值 = 21: 所有参数以及所有用户默认设置复位至工厂复 位状态 说明: 参数 P2010、P2021、P2023 的值不受工厂 复位影响。 |
P0003 | 用户访问级别 | = 3 |
P0700 | 选择命令源 | = 5: RS485 上的 USS / MODBUS
工厂缺省值: 1(操作面板) |
P2010[0] | USS / MODBUS 波特率 | 可能的设置:
= 6: 9600 bps(工厂缺省值) = 7: 19200 bps = 8: 38400 bps ... = 12: 115200 bps |
P2014[0] | USS / MODBUS 报文间断时间
[ms] |
时间设为 0 时不发生故障(即看门狗被禁止)。 |
P2021 | Modbus 地址 | 设置变频器的**地址。
范围: 1 至 247(工厂缺省值:1) |
P2022 | Modbus 应答超时[ms] | 范围: 0 至 10000(工厂缺省值:1000) |
P2023 | RS485 协议选择 | = 2: Modbus
工厂缺省值: 1(USS) 说明: 在更改 P2023 后,须对变频器重新上电。 在此过程中,请在变频器断电后等待数秒,确保 LED 灯熄灭或显示屏空白后方可再次接通电源。 如 果通过 PLC 更改 P2023,须确保所做出的更改已通 过 P0971 保存到 EEPROM 中。 |
参数 | 功能 | 设置 |
r2024[0]
... r2031[0] |
USS / MODBUS 错误统计 | 无论 P2023 中选择何种通讯协议,都可以报告
RS485 上的报文信息状态。 |
r2018[0...7] | CO:通过 RS485 上的 USS / MODBUS 接收的 PZD | 显示通过 RS485 上的 USS/MODBUS 接收的过程 数据。 |
P2019[0...7] | CI:通过 RS485 上的 USS / MODBUS 发送的 PZD | 显示通过 RS485 上的 USS/MODBUS 发送的过程 数据。 |
P2034 | RS485 上的 MODBUS 奇偶校验 | 设置 RS485 上 MODBUS 报文的奇偶校验。 可能的设置:
= 0: 无奇偶校验 = 1: 奇校验 = 2: 偶校验 |
P2035 | RS485 上的 MODBUS 停止位 | 设置 RS485 上 MODBUS 报文中的停止位数。 可能的设置:
= 1: 1 个停止位 = 2: 2 个停止位 |
映射表
SINAMICS V20 变频器支持两组寄存器(40001 至 40062、40100 至 40522),如下表 所示。 “访问类型”一列中的“R”、“W”、“R/W”分别代表读、写、读/写。
HSW(转速设定值)、HIW(实际转速)、STW(控制字)、ZSW(状态字)为控制数 据。
编程举例
以下程序为计算 MODBUS RTU 的 CRC 的示例。
unsigned int crc_16 (unsigned char *buffer, unsigned int length)
{
unsigned int i, j, temp_bit, temp_int, crc; crc = 0xFFFF;
for ( i = 0; i < length; i++ )
{
temp_int = (unsigned char) *buffer++; crc ^= temp_int;
for ( j = 0; j < 8; j++ )
{
temp_bit = crc & 0x0001; crc >>= 1;
if ( temp_bit != 0 ) crc ^= 0xA001;
}
}
}
参数定标
由于受到 MODBUS 协议中整数数据的限制,在发送变频器参数值之前有必要将其进行换 算。 通过定标可实现这一换算,参数定标是用一个系数乘以带有一位小数的参数值,从 而去除其小数部分。 具体的定标系数见上表。
BICO 参数
在参数处理的过程中会同时在后台进行 BICO 参数的更新。 由于受到寄存器值的限制, 只能向 BICO 参数中写入‘0’或‘1’。 这就表示 BICO 输入始终为静态值‘0’或‘1’。 而其先前 与另一参数的连接则会丢失。 读取 BICO 参数即返回当前的 BICO 输出值。
例如: MODBUS 寄存器号 40200。向该寄存器中写入值 0 或 1 即使其 BICO 输入 P0731
静态等于所写的值。 读取参数即返回 BICO 输出,该输出值存储于 r0747.0。
故障
满足以下三个条件时,变频器会显示故障 F72:
- P2014(USS/MODBUS 报文间断时间)参数值不等于0。
- 变频器启动后已从主站接收过程数据。
- 两次连续的过程数据报文接收的间隔时间超出P2014参数值。

评论