一文看懂Modbus协议,第1张

自从 1979 年出现工业串行链路的事实标准以来,Modbus使成千上万的自动化设备能够通信。Modbus 是OSI模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。Modbus应用层协议和服务规范主要包含两类:一类是串行链路上的Modbus(Modbus 串行链路取决于TIA/EIA 标准:232-F 和 485-A),另一类是TCP/IP 上的Modbus(Modbus TCP/IP 取决于IETF 标准:RFC793 和 RFC791 有关)。Modbus通信栈示意图如下所示:

Modbus协议允许在各种网络体系结构内进行简单通信,每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 Modbus协议来启动远程操作。在基于串行链路和以太 TCP/IP 网络的 Modbus上可以进行相同通信,一些网关允许在几种使用 Modbus协议的总线或网络之间进行通信。Modbus网络体系结构的实例如下所示:

Modbus协议本质上和我们平时自定义的协议一致,就是一种数据传输格式,也是由起始帧、数据帧、校验帧等组成,只不过Modbus协议更为规范。

Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上 的 Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域,通用Modbus帧协议如下图所示:

具体解析如下: 

地址域:子节点的地址信息;

功能码:指明服务器要执行的动作,有效的码字范围是十进制 1-255(128-255 为异常响应保留),当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作(功能码内容较多,建议查阅Modbus协议说明手册,上面介绍的很清晰)。

数据:传输的数据内容,在某种请求中,数据可以是不存在的(0 长度),在此情况下服务器不需要任何附加信息,功

能码仅说明操作。

差错校验:验证收、发的数据是否正确。

如果在一个正确接收的 ModbusADU 中,不出现与请求Modbus功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求 Modbus功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。Modbus事务处理的状态图如下所示:

一旦服务器处理请求,使用合适的 Modbus服务器事务建立 Modbus响应,根据处理结果,可以建立两种类型响应:

一个正确Modbus响应:响应功能码 = 请求功能码 ;

一个 Modbus异常响应:用来为客户机提供处理过程中与被发现的差错相关的信息,提供一个异常码来指示差错原因。响应功能码 = 请求功能码 + 0x80。

将上述图示分解理解,例如,客户机与服务器执行Modbus 通信协议,当服务器对客户机响应时,它使用功能码来指示正常(无差错)响应或者出现某种差错(称为异常响应)。

对于一个正常响应来说,服务器仅对原始功能码响应,Modbus事务处理(无差错)如下图所示:

对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑 1,Modbus事务处理(异常响应)如下图所示:

Modbus使用一个Big-Endian 表示地址和数据项。这意味着当发射多个字节时,首先发送最高有效位。例如:

寄存器    数据

0x4001  0x1234

发送的第一字节为 0x12,第一字节为0x34。

Modbus以一系列具有不同特征表格上的数据模型为基础,四个基本表格如下表所示:

对于基本表格中任何一项,协议都允许单个地选择 65536 个数据项,而且设计那些项的读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。

数据模型这个概念有限抽象,让我们通过以下两个示例加深理解。

示例1 :有 4 个独立块的设备

示例描述:一个设备中的数据结构,含有数字量和模拟量、输入量和输出量。由于不同块中的数据不相关,每个块是相互独立。使用Modbus数据模型,按不同 Modbus功能码访问每个块,实现原理如下所示:

示例2:仅有 1 个块的设备

示例描述:一个设备仅有 1 个数据块,使用Modbus数据模型,通过几个Modbus功能码可能得到一个相同数据,或者通过 16 比特访问或 1 个访问比特,实现原理如下所示:

Modbus 是由 Modicon(现为施耐德电气公司的一个品牌)在 1979

年发明的一种工业控制总线协议,是全球第一个真正用于工业现场的总线协议。Modbus

以其简单、健壮、开放而且不需要特许授权的特点,成为通用通信协议。为了适应以太网环境,Modbus 被封装在 TCP 包中,并且在默认情况下通过 TCP 协议的

502 端口进行传输。

基于 Modbus

协议的系统由带智能终端的可编程逻辑控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件,又包括软件。可应用于各种数据采集和过程监控。

Modbus 协议采用主 - 从结构,为客户机和服务器之间提供通信连接。

Modbus 协议定义了一个与基础通信无关的协议数据单元(Protocol Description Unit,PDU),描述协议的基本功能。PDU

属于应用数据单元(Application Data Unit,ADU)的一部分,除此之外,ADU

还包括附加地址域和差错校验域及实际传输的数据,这个数据可能是业务数据,也可能是指令、响应信息或报警信息等。

Modbus 协议包括 ASCII、RTU、TCP 三种报文类型,可以使用串口传输数据和指令。

前言

本文更新于2022年10月26日,以下是本人在项目中运用Modbus_TCP所遇到的问题以及解决方法,本人也是第一次做项目,所用的解决方法也不是最优解。就当看个热闹

一、Modbus_TCP循环读写

一般采用连续读写寄存器的方式读写取数据。这里假设使用信捷PLC做客户端,访问服务器中的寄存器。

上述这样写可能不是很规范,但是效果就是通过T1继电器实现一个200ms的脉冲信号。实现每200ms触发一次M_TCP指令,此处进行连续6个寄存器的写入,读取同理。

需要注意的是,M_TCP为边缘触发指令,触发时长对执行结果没有影响。

以下为本人遇到的一些坑,供参考:

我将PLC作为客户端,访问一台机械臂。Modbus_TCP只要建立连接之后,用起来比Modbus_RTU还方便,信捷的还有指令参数配置界面。(Modbus_TCP建立连接部分参考之前的文章)

我用PLC做数据处理,一开始是每一个数据处理之后发送一次。理论上来说,Modbus_TCP是稳定可靠的连接方式,基本不会出现通讯失败的。但是实际应用中很多时候会出现数据写不进去。后来我通过调整通讯参数稍微改善了,但是仍然会出现写入失败的情况。

后来我改成上述的200ms循环写入,只要没有新的数据,就一直向服务器写入旧的数据。这样才基本改善了数据有时候写入失败的现象。

循环写入的间隔时间不宜过短,建议200ms左右为好。

二、调整接收时间

信捷的通讯连接建立指令S_OPEN中有一个接收超时选项,默认为10ms。这个接受时间实际运用中偏小,基于实际稍微改大点。我这里用40ms可以满足我现在的运用场景。

这个接受超时是指,Modbus_TCP指令发送后,服务器接收到指令后会有个回复返回客户端,这个超时时间就是只接收这个回复的时间。这个超时如果过小会导致无法正常接收从而导致出错。

三、服务器扫描周期

有些设备的Modbus_TCP通讯设置界面有一个扫描周期可以修改,这个周期默认一般100ms。适当的减小也会改通讯时不时出错的现象。

总结

信捷的以太网型PLC使用Modbus_TCP通讯感觉没什么难度,配置起来比三菱的会直观一点。以上就是Modbus_TCP通讯读写出现不稳定的一些解决方法。

  S7-1500 CPU 和 S7-1200 CPU 之间可以实现 Modbus/TCP 的通信。

  在 S7-1500 CPU 和 S7-1200 CPU 中调用 “MB_CLIENT” 和 “MB_SERVER” 指令并参数化。

  “MB_CLIENT” 指令把 CPU 的以太网连接实现为 Modbus/TCP 客户机通信。

  使用 “MB_CLIENT” 指令在客户机和服务器之间建立连接,发送请求和接收响应,和控制连接断开。

  The "MB_SERVER" 指令把 CPU 的以太网连接实现为 Modbus/TCP 服务器通信。

  使用 "MB_SERVER" 指令处理 Modbus/TCP 客户端的连接请求,接收来自 Modbus 的请求并发送响应消息。

  在这个例子中,通过两个Modbus/TCP连接演示了一个Modbus功能。

  S7-1500 CPU 的第一个连接作为Modbus TCP 客户机。

  S7-1200 CPU 作为 Modbus TCP 服务器。

  S7-1200 CPU 的第二个连接作为Modbus TCP 客户机。

  The S7-1500 CPU 作为 Modbus TCP 服务器。

  Modbus/TCP 连接是要通过一对功能块建立的 (MB_CLIENT 和 MB_SERVER)。

35ms至10ms。modbus服务器重启时间为35ms至10ms,有些35ms就立即响应,有些需要10ms或者更久。Modbus是一种串行通信协议,是Modicon公司,施耐德电气SchneiderElectric,于1979年为使用可编程逻辑控制器通信而发表。Modbus已经成为工业领域通信协议的业界标准,并且是工业电子设备之间常用的连接方式。

简介

Modbus 主站可以安装在以下位置:

o安装在与 IFM 接口相同的电气设备中,或者安装在与 IFM 接口不同的电气设备区段中,其中设备的这两个区段栓接在一起。

o安装在与 IFM 接口不同的电气设备区段中,其中设备的这两个区段未栓接在一起。

部件号为 LV434000 和 STRV00210 的 IFM 接口可以安装在相同的 Modbus-SL 网络上。

IFM 接口与 Modbus-SL 主站的连接

与 Modbus-SL 主站的连接取决于 IFM 接口的数量:

o要连接单个 IFM 接口,请使用 RJ45 Modbus T 形接头。

o要连接多个堆叠 IFM 接口,请使用 RJ45 Modbus 电缆。

o要互连多个绝缘的 IFM 接口,请使用以下任何一种方式:

oModbus 配电块 LU9GC3

oRJ45 Modbus T 形接头

包含在电气设备内的 Modbus-SL 网络

当以下两个条件都被满足时,Modbus-SL 网络将包含在电气设备内。

o位于 IFM 接口之间的 Modbus-SL 网络与 Modbus 主站(例如 PLC)相连,或与集成在电气设备中的 IFE Ethernet 配电盘服务器相连。

o位于 IFM 接口之间的 Modbus-SL 网络并没有退出该电气设备以延伸至另一个电气设备。

Modbus 主站或 IFE 服务器可以直接与该电气设备中 IFM 接口的 Modbus-SL 网络相连。

包含在电气设备内的 Modbus-SL 网络的示例如下:

o包含纳入阀岛的 IFM 接口以及安装在电气设备中的 Modbus 主站的接线图

o包含采用菊花链或星型连接形式的 IFM 接口以及安装在电气设备中的 Modbus 主站的接线图

o衔接两台电气设备的以太网连接。

MODBUSTCP通信协议指令及作用如下:

1、指令

MB_CLIENT(作为Modbus TCP客户端)。

MB_SERVER(作为Modbus TCP服务器)。

MB_CLIENT 表示MODBUS SCLIENT。

2、作用

“MB_CLIENT”指令作为 Modbus TCP 客户端通过 S7-1200 CPU 的 PROFINET  连接进行通信。使用该指令,无需其它任何硬件模块。通过“MB_CLIENT”指令,可以在客户端和服务器之间建立连接、发送请求、接收响应并控制 Modbus TCP  服务器的连接终端。

MB_SERVER表示MODBUS SERVER

“MB_SERVER”指令作为 Modbus TCP 服务器通过 S7-1200 CPU 的 PROFINET  连接进行通信。使用该指令,无需其它任何硬件模块。“MB_SERVER”指令将处理 Modbus TCP 客户端的连接请求、接收 Modbus  功能的请求并发送响应。

Modbus通讯协议

Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。

Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。

另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。

对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 一文看懂Modbus协议

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情