西门子变频器MODBUS通讯
概述
在;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