概述
在 MODBUS 通讯中,只有主站可以发起通讯,从站应答。 主站可使用两种方式向从站 发送消息。 一种是单播模式(地址为 1 至 247),此模式下主站直接寻址一个从站;另 一种是广播模式(地址为 0),此模式下主站寻址所有从站。
当从站被寻址并收到消息后,可以通过功能代码得知要执行的任务。从站接收的某些数据 对应由功能代码定义的任务。 此外还包含一个用于错误检测的 CRC(循环冗余校验)码。
MODBUS 从站在接收并处理一个单播消息之后会发送应答,此前提是接收的消息中未检 测到错误。 如果发生处理错误,从站会发送错误消息进行应答。 消息中有如下固定的成 帧字符不可被更改:8 个数据位、1 个奇偶校验位以及 1 个或 2 个停止位。
支持的功能代码
SINAMICS V20 仅支持三种功能代码。 如果收到带有未知功能代码的请求,从站会返回 错误消息。
FC3 - 读保持寄存器
当接收的消息带有 FC = 0 x 03 时,则为 4 字节数据,即 FC3 有 4 字节数据:
2字节为寄存器的起始地址 2字节为寄存器数量变频器的响应
FC6 - 写单一寄存器
当接收的消息带有 FC = 0x06 时,则为 4 字节数据,即 FC6 有 4 字节数据:
2字节为寄存器的起始地址 2字节为寄存器值变频器的响应
FC16 - 写多寄存器
当接收的消息带有 FC = 0x10 时,则为 5 + N 字节数据,即 FC16 有 5 + N 字节数据:
2字节为寄存器的起始地址 2字节为寄存器数量 1字节为字节计数 N字节为寄存器值异常响应
如果在 MODBUS 请求处理时检测到错误,从站会返回请求的功能代码进行响应,但数据 域中只包含功能代码的高位以及异常代码。 但是,在全局地址 0 上检测到的任何错误 都不会产生响应,因为所有从站不能同时进行响应。
如果在接收到的消息中检测到错误(例如,奇偶校验错误、CRC 错误等),从站不会向 主站发送响应。
请注意,如果收到带有 FC16 的请求且其中包含一个变频器无法执行的写指令(包括向零 条目中写入),从站即使发送异常响应也仍然会执行其他有效的写指令。
SINAMICS V20 支持以下 MODBUS 异常代码:
下表列出了异常代码所对应的错误情况:
变频器基本设置
映射表
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参数值。