【通信协议】Modbus

 Modbus简介

        Modbus是莫迪康公司在1979年开发的一种应用层报文传输协议,作为一个开源协议,Modbus可以使用以太网和串行通信接口。由于易于部署和维护,可靠性强,所以Modbus已经成为工业领域标准通信协议。

Modbus类型

        Modbus共有三种类型:        

        Modbus ASCII

它基于ASCII字符编码,并使用一种基于字符的通信方式。

在Modbus ASCII中,每个字节被表示为两个ASCII字符,以便在不同设备之间进行可靠的传输。通信的起始标志是冒号(:),而结束标志是回车(CR)和换行(LF)字符。

        Modbus RTU

它采用二进制编码,以字节为基本单位进行通信。

在Modbus RTU中,通信的起始标志是一个传输间隔(为逻辑0),而结束标志是通信间隔(为逻辑1)。

        Modbus TCP/IP

它通过以太网网络进行数据传输和通信,使得Modbus通信可以与现代网络技术结合起来。

在Modbus TCP/IP中,数据以TCP/IP报文的形式进行传输。它使用标准的Ethernet网络和TCP/IP协议栈,通过IP地址和端口号来标识设备和通信通道。

 Modbus RTU     

        Modbus RTU 采用二进制编码和CRC错误校验,因此配置为ASCII模式的设备无法和配置为RTU的设备进行通信。RTU设备通常使用三种接口进行通信:RS-232、RS-485、RS-422。

        

Modbus RTU的信息帧
地址码功能码数据区错误校验码
8位8位N X 8位16位

        一般通信距离在15米以下时,使用RS-232接口。大于15米时,使用RS-485或者RS-422。

        目前比较流行性使用RS-485接口,单位负载下可以接32个从机。通信距离最远可达到1200m。

        Modbus RTU 网络上的所有设备必须使用相同的波特率,波特率的典型范围在9600到19600之间。

        Modbus串行通信网络上只有一个主设备,从机只有收到主机指令之后,才会发送消息,每个从机有唯一的通信地址。如果使用RS-485接口的话,在标准负载的情况下,只能最多接32个从机,如果需要接入的从机数量超过32个的话,就需要添加中继器。

        主机可以写入从机数据也可以读取从机的数据,在实际应用中,通常是SCADA和HMI等主机设备需要和其他的Modbus从机设备建立通信,必须使用菊花链的方式连接各个设备,不能使用星形网络拓扑。 

功能码描述PLC地址寄存器地址位/字操作操作数量
0x01读线圈寄存器00001-099990x0000-0xFFFF位操作单个或多个
0x02读离散输入寄存器10001-199990x0000-0xFFFF位操作单个或多个
0x03读保持寄存器40001-499990x0000-0xFFFF字操作单个或多个
0x04读输入寄存器30001-399990x0000-0xFFFF字操作单个或多个
0x05写单个线圈寄存器00001-099990x0000-0xFFFF位操作单个
0x06写单个保持寄存器40001-499990x0000-0xFFFF字操作单个
0x0F写多个线圈寄存器00001-099990x0000-0xFFFF位操作单个
0x10写多个保持寄存器40001-499990x0000-0xFFFF字操作单个

        主机通过功能码告诉从机执行什么动作,如果从机返回的功能码一致,则表明从机已执行操作。如果从机返回的功能码的最高位为1,则表明从机没有响应操作或发送出错。

 Modbus TCP/IP

        Modbus使用以太网进行传输时,设备之间使用网线,通过交换机进行连接,与传统的TCP/IP协议不同,Modbus TCP/IP使用的是MBAP(Modbus Application Header)模式,Modbus协议头包在每个消息的头部。

        

        Modbus RTU消息头部的从机地址和尾部CRC冗余校验,都可以去除,MBAP包含了将信息路由到设备地址的所有信息,Modbus协议使用502端口进行TCP/IP通信。

        Modbus串行通信的RTU消息也可以也可以封装在TCP/IP数据包中进行发送,MBAP和封装RTU消息两种方式并不兼容。

        目前流行的Modbus TCP/IP通信,还是使用MBAP的消息封装形式。

         Modbus TCP/IP中不再使用主机从机的名称,而是使用服务器和客户端,整个TCP/IP网络中的服务器和客户端通过交换机连接,Modbus TCP/IP进行寻址时,需要进行网络配置。IP地址表示设备在网络上的具体位置,子网掩码可以减少路由表的路由项,提高转发速度。默认网关可以把消息发送到其他网络中寻找目标主机。

Modbus协议定义的数据模型

区块访问长度访问方式说明
线圈位(bit)读/写可通过应用程序改写
离散量输入位(bit)只读数据由IO系统提供
输入寄存器字(word)只读数据由IO系统提供
保持寄存器字(word读/写可通过应用程序改写

        Modbus协议允许设备将四种数据分别映射到不同存储区块中,各个区块之间互相独立,使用不同的功能码。可以读取到不同的数值。

        Modbus协议也允许设备将四种数据映射到统一存储区块中,这样通过不同的功能码读取数据可能会得到相同的数据,比如输入寄存器和保持寄存器为同一物理区块。

Modbus协议的地址模型

Modbus数据模型Modbus地址范围
线圈地址范围00001~09999
离散量输入地址范围10001~19999
输入寄存器地址范围30001~39999
保持寄存器地址范围40001~49999

        地址模型通过编号的方式对不同类型数据进行区分,Modbus地址模型的编号从1开始。理论上每一种数据,都最大支持65536个元素,但由于65536是比较大的数值,实际应用一般不需要这么大的存储区,因此PLC厂家普遍采用的是10000以内的地址范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值