西门子变频器MODBUS通讯
时间:2021-05-13 10:45:29 作者:admin 点击:次
概述
在 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参数值。