信捷PLC Modbus通讯 (Modbus_TCP与Modbus_RTU)


Modbus通讯

    Modbus通信协议常用主要为Modbus-RTU、Modbus-ASCII以及Modbus-TCP。本文只讨论Modbus-RTU和Modbus-TCP。由于Modbus-RTU协议的连接方式以及连接介质较为多样(RS-232,RS-485),工业上Modbus-RTU易用性相较于Modbus-TCP协议更有优势。但是由于连接介质较为简单,通信的保真程度相较于Modbus-TCP较弱,对于通讯线的屏蔽提出较高要求。
    以下介绍Modbus-TCP协议与Modbus-RTU协议所传输的数据区别。

Modbus-RTU
Modbus-RTU通过二进制数据方式直接传送数据,数据在传输中有出现错误的可能性,所以每条数据后面都会加上校验。

地址码(一个字节),功能码(一个字节),起始地址(两个字节),数据(N个字节),校验码(两个字节)五个部分组成。

	下面为Modbus-RUT协议发送的某条请求
	01 03 01 80 00 04 25 DE 	(读01 80开始的4个寄存器)
	本条指令包括地址码01,功能码03,目标地址01 80,读取的寄存器个数00 04,以及校验码25 DE。

Modbus-TCP
Modbus-TCP一般基于网线一类可靠的连接,所以Modbus-TCP协议中没有校验码。相较于Modbus-RTU协议,Modbus-TCP协议在Modbus-RTU的数据内容前面加报文头。

报文头格式:事务处理标识 (2字节), 协议标识(2字节), 长度( 2字节),单元标识符(1字节)

    下面为Modbus-TCP协议发送的某条请求
	00 00 00 00 00 06 00 03 01 80 00 04
	与上条指令对应。

Modbus-RTU与Modbus-TCP之间的区别推荐各位看下面这篇博客讲的很清晰。
Modbus RTU与Modbus TCP的区别 - listxue - 博客园


一、信捷PLC的Modbus-TCP

信捷PLC提供多种网络型号的PLC,XD系列的有XDME、XD5H、XDE;XL系类的有XLH、XL5E等。这类PLC基本单元就配备了RJ45网口,可以直接通过网线跟上位机,或者别的PLC进行通信连接。在这方面我觉得国产品牌还是比较良心,之前用过三菱的模块,肉疼。当然稳定性这部分我认为信捷还是没法与三菱比的。

通过RJ45接口与设备进行连接,需要注意的是有的以太网机型有两个网口,这两个网口相当于一个交换机上的两个接口,PLC的IP地址是同一个。

IP设定
要走Modbus-TCP协议,要把设备IP设在同一网段且地址不同,信捷PLC支持自动获取IP,在没有网关的情况下信捷PLC出厂默认在192.168.6.X网段。可以在信捷编程软件的右边菜单栏的‘网口设置’中更改IP地址。

MODBUS TCP/IP 的通信系统中有两种类型的设备: MODBUS TCP/IP 客户端和服务器设备。
信捷的以太网机型PLC做Modbus服务器的时候上电默认开启监听 502 端口,等待客户端连接请求,连接建立成功,响应符合 Modbus TCP 协议规范的数据通讯请求。即连接成功后服务器可以直接被客户端访问无需另外写程序。最大响应不超过 4 个 TCP 连接。

PLC做为Modbus客户端主动向服务器(TCP Server)发起连接请求,连接建立成功,仅允许客户端主动发起通讯请求。
PLC的Modbus-TCP通讯我总结为以下几个过程
1.通过S_OPEN 指令建立 TCP 连接;
2.通过 M_TCP 指令发起 MODBUS 请求;
3.在需要的时候通过S_CLOSE指令终止连接。

结合以下程序解释更容易

重点看第二行:
我们可以通过配置向导向导设置S_OPEN,配置向导可以选择套接字、参数起始地址,标志起始地址,以及通讯类型和工作模式
其中若作为客户端需填写服务器的IP地址以及端口,默认端口为502。
其中,我个人试过PLC与机械臂控制器建立通信,套接字用K1不行,改K0就可以。

SM1902 为连接网络设备标志,双网口的PLC上两个网口连接标志位分别为SM1902、SM1903。
第二行解释:当网线插入TCP未连接,每100ms尝试建立TCP连接。
从下面程序可以看出,一般在出现故障的情况下才使用S_CLOSE主动断开连接

M_TCP的配置
这里需注意套接字要与上面建立连接所用的套接字相对应。
M_TCP一般放在程序中间需要数据通讯的时候写。

信捷Modbus-TCP通讯实例

标志位
S_OPEN
M_TCP

Modbus通信功能码
Modbus通信功能码
PLC作为服务器的线圈与寄存器对应的的地址太多了就不在这放出来了,并且不同机型对应的不同,具体可以翻阅信捷 PLC编程手册《XD/XL 系列可编程控制器用户手册【基本指令篇】》第 6-2 章节 Modbus 通讯功能篇。

二、信捷PLC的Modbus-RTU

PLC建立Modbus-RTU连接过程有所不同,三菱需要在梯形图中写入参数,信捷可以直接在信捷PLC编程软件中,左边菜单栏‘串口设置’中设置好直接写入PLC。

需注意,每个PLC的串口数量不同,串口编号对应的位置不同。以我这台XDME-30T为例,他的COM1是RS232,COM2是RS485在输入端子排的右边AB端口。有些两个RS232口的排序与我找个可能不同,具体以说明书为准。

Modbus-RTU只要线缆连接好将对应的通讯参数设置以及站号分配好即可,需注意回复超时和发送延时会影响通讯的时间,找个需要通过尝试找到合适的点。

Modbus-RTU的指令使用方式与上述Modbus-TCP中的M_TCP基本一致。区别在于Modbus-RTU的指令中的站号要与被访问端站号一一对应。
信捷PLC串口设置
Modbus-RTU指令


总结

使用Modbus-TCP和Modbus-RTU的区别在于连接建立的部分。Modbus-RTU可以直接在编程软件中设置好串口参数方便建立连接,同时多个设备拓扑链接不需要额外添加网络设备。Modbus-TCP则需要在程序中添加连接建立部分以及断开连接部分。
连接建立的过程不一样,当连接完成后,使用起来感觉并无太多差别。

同时由于Modbus-TCP通过网线传播,通信的稳定性较高。通信延时也会保持在较低的水平,Modbus-RTU的通信延时需要自行优化才能达到一个比较理想的状态。

猜你喜欢

转载自blog.csdn.net/canmianlaida/article/details/126862055