文章目录
Modbus通讯一、信捷PLC的Modbus-TCP二、信捷PLC的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通信功能码
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的指令中的站号要与被访问端站号一一对应。
总结
使用Modbus-TCP和Modbus-RTU的区别在于连接建立的部分。Modbus-RTU可以直接在编程软件中设置好串口参数方便建立连接,同时多个设备拓扑链接不需要额外添加网络设备。Modbus-TCP则需要在程序中添加连接建立部分以及断开连接部分。
连接建立的过程不一样,当连接完成后,使用起来感觉并无太多差别。
同时由于Modbus-TCP通过网线传播,通信的稳定性较高。通信延时也会保持在较低的水平,Modbus-RTU的通信延时需要自行优化才能达到一个比较理想的状态。