modbus 通信

时间:2021-07-30点击次数:130

系统环境中的位置

以下 Modbus 说明阐述了 CP 341 (S7 300) 和 CP 441-2 (S7 400) 通信处理器上可重新加载驱动程序的用法,以及 Modbus/USS 模型中 ET 200S 1SI 模块的使用。

耦合功能

通过适当配备的通信模块和相关指令,用户可以在远程 Modbus 控制系统(如 Modicon PLC 或 Honeywell TDC3000)与 SIMATIC S7 之间建立通信连接。

RTU 格式的 GOULD-MODBUS 协议用于传输。

函数代码 01、02、03、04、05、06、08、15 和 16 用于作为 Modbus 从站的通信模块与主站系统之间的通信。

如果将 SIMATIC S7 通信模块用作 Modbus 主站,则函数代码 07、11 和 12 也可使用。

Modbus 协议

modbus 协议是一种基于主站/从站和客户机/服务器体系结构的通信协议。

使用的程序是明码、异步半双工的程序。 数据传输无须握手。

SIMATIC S7 用作 Modbus 从站

主站可主动发起传输,而 CP/S7 CPU 用作从站。

无法进行从从站到从站的帧通信。

SIMATIC S7 用作 Modbus 主站

作为主站,通信模块将初始化传输,随后输出请求消息帧,然后在组态的应答监视时间内,等待来自从站的响应消息帧。

消息帧结构

“主站-从站”和/或“从站-主站”数据交换以从站地址 开始,然后是函数代码。 然后传输数据。 数据域的结构取决于使用的函数代码。 消息帧的最后传送的是 CRC 校验码。

地址

函数

数据

CRC 校验

字节

字节

n 个字节

2 个字节

地址

MODBUS 从站地址

函数

MODBUS 函数代码

数据

消息帧数据: 字节数、线圈编号和数据

CRC 校验

消息帧校验和

从站地址

从站地址的范围是 1 到 255。该地址用于对总线上已定义的从站进行寻址。

广播消息

主站使用从站地址 0 对总线上的所有从站进行寻址。

广播消息仅允许与写函数代码 05、06、15 和 16 相结合。

从站不会针对广播消息发出响应消息帧。

函数代码

函数代码定义了消息帧的含义。 同样它也定义了消息帧的结构。 通信模块支持以下函数代码:

函数代码

符合 MODBUS 规范的功能

01

读线圈状态

02

读输入状态

03

读保持寄存器

04

读输入寄存器

05

写单个线圈

06

预设单个寄存器

07

读取异常状态(仅主站)

08

环路测试

11

获取通信事件计数器(仅主站)

12

获取通信事件日志(仅主站)

15

写多个线圈

16

预设多个寄存器

数据域 DATA

数据域 DATA 用于传送函数代码特定数据,例如:

字节数、线圈起始地址、寄存器起始地址、线圈数量和寄存器数量等等

请参见“函数代码”部分。

CRC 校验

消息帧的最后是由 2 个字节组成的 CRC 16 校验和。 校验和是按如下多项式计算的: x16 + x15 + x2 + 1。

先传输低位字节,然后传输高位字节。

消息帧的结尾

当在传输 3.5 个字符所需的时间段内(字符延时时间的 3.5 倍)不传输任何数据时,可加载驱动程序将认为消息帧结束 (请参见《MODBUS 协议参考指南》)。

因此消息帧结束的**时 (TIME_OUT) 取决于数据传输速率。

数据传输速率

**时 (TIME_OUT)

115200 bps

0,3 ms

76800 bps

0,5 ms

57600 bps

0.7 ms

38400 bps

1 ms

19200 bps

2 ms

9600 bps

4 ms

4800 bps

8 ms

2400 bps

16 ms

1200 bps

32 ms

600 bps

64 ms

300 bps

128 ms

“正常操作”期间,收到帧尾 TIME_OUT 后,对连接伙伴接收到的 Modbus 消息帧进行评估和检查。

在“干扰抑制”期间,通过带有正确 CRC 代码且正确格式化的接收帧来识别帧尾。

异常响应

当检测到主站的请求消息帧有错误时,例如:寄存器地址非法,从站将设置响应消息帧的函数代码的较高值位。

随后传输的是一个字节的错误代码,即描述错误原因的异常代码。

上述参数的含义的详细描述可从手册《GOULD MODICON Modbus 协议》中找到。

异常代码消息帧

从站的错误代码响应消息帧的结构如下:

例如,从站地址 5,函数代码 5,异常代码 2

从站 EXCEPTION_CODE_xx 的响应帧:

05H

从站地址

85H

函数代码

02H

异常代码 (1...7)

xxH

CRC 校验和“低字节”

xxH

CRC 校验和“高字节”

驱动程序接收到错误代码响应消息帧后,当前的作业将由于错误而结束。

对应于接收到的错误代码(异常代码 1-7)的错误编号也将输入到错误消息区。

目标数据块中没有条目。

根据 MODBUS 规范定义了下列的错误代码:

错误代码

符合 MODBUS 规范的含义

原因—短描述*

1

函数非法

函数代码非法

2

数据地址非法

从站具有非法的数据地址

3

数据值非法

从站具有非法的数据值

4

关联设备发生故障

从站出现内部错误

5

确认

函数已执行

6

忙,拒收消息

从站尚未准备好接收消息

7

否定确认

该函数不能执行。

* 检查从站获取更多详细信息。

RS232C 伴随信号

使用 RS232C 接口模块的通信模块上提供以下 RS232C 伴随信号:

DCD

(输入)

数据载体检测

检测到的数据载体

DTR

(输出)

数据终端就绪

通信模块就绪

DSR

(输入)

数据集准备就绪

通信伙伴就绪

RTS

(输出)

请求发送

通信模块发送准备就绪

CTS

(输入)

清除发送

通信伙伴可以接收到通信模块的数据(响应 CP 的 RTS = ON)

RI

(输入)

振铃指示器

振铃指示器

通信模块接通时,输出信号状态为 OFF(未激活)。

用户可以在模块的属性对话框中或者通过用户程序中的指令组态 DTR/DSR 和 RTS/CTS 控制信号的使用。

使用 RS232C 伴随信号

RS232C 伴随信号可在以下情况下使用:

在组态自动使用所有 RS232C 伴随信号后使用。

通过相应指令使用。 有关详细信息,请参见“指令概述”部分。


提示

组态自动使用 RS232C 伴随信号后,将不能通过相应指令控制 RTS 和 DTR(请参见“指令概述”部分)!

另一方面,始终可以通过相应指令读取所有 RS232C 伴随信号。



以下各节说明了控制和评估 RS232C 伴随信号的基本过程。

伴随信号的自动使用

可按以下方式实现在通信模块上自动使用 RS232C 伴随信号:

只要通信模块通过组态切换到自动使用 RS232C 伴随信号的工作模式,模块便会将 RTS 线路设置为 OFF,将 DTR 线路设置为 ON(通信模块做好使用准备)。

这将阻止在 DTR 线路设置成 ON 之前收发消息帧。 只要 DTR 仍设置为 OFF,便不能通过 RS232C 接口接收任何数据。 如果执行发送作业,作业将被中止,并伴有相应的错误消息。

执行发送作业时,RTS 将设置为 ON 并且参数化的数据输出等待时间将开始计时。 当数据输出时间结束并且 CTS = ON 时,将通过 RS232C 接口发送数据。

如果 CTS 线路在数据输出时间内未设置为 ON 以便可以发送数据,或者 CTS 在传输过程中更改为 OFF,发送作业会被中止,并生成错误消息。

一旦数据发送完毕且**过组态的清除 RTS 时间,RTS 线路将立即设置为 OFF。 CP 不会等待 CTS 更改为 OFF。

一旦 DSR 线路设置为 ON,即可通过 RS232C 接口接收数据。 如果通信模块的接收缓冲区预警将要溢出,则通信模块将不会响应。

如果 DSR 从 ON 转变成 OFF,激活的发送作业和数据接收都将取消,并产生错误消息。 消息“DSR = OFF(自动使用 V24 信号)”将输入到通信模块的诊断缓冲区中。


提示

组态自动使用 RS232C 伴随信号后,将不能通过相应指令控制 RTS 和 DTR! 有关详细信息,请参见“指令概述”部分。




提示

在模块的属性对话框中设置“清除 RTS 时间”,以便使通信伙伴在 RTS 之前完整接收到消息帧的最后的字符,并且发送作业也会因此取消。 “数据输出等待时间”也必须设置,这样通信伙伴才能在**时之前做好接收准备。


http://shtxjd.cn.b2b168.com

产品推荐