• 西门子青岛PLC模块总代理
  • 西门子青岛PLC模块总代理
  • 西门子青岛PLC模块总代理

产品描述

产品规格模块式包装说明全新品牌西门值+ 包装说明 全新 - 产品规格子

西门子青岛PLC模块总代理


Modbus通信协议的,大家都比较积极地解答,所以今天果子哥总结一下关于Modbus相关的知识,适合正在入门的小伙伴“食用”。同样还是理论+实战的方式解答,大佬勿喷。

1.什么是Modbus?

顾名思义,它是一个bus,即总线协议。比如串口协议、IIC协议、SPI都是通信协议。你接触到这种协议,相信你所处的行业是工业方面或者你的产品用于工业。

好了,现在知道了大概知道了,这是一个总线协议,是一个mod什么的公司发表的一个通信协议。那为什么要用这个呢? 答案就是他们**,你就得学,啊哈哈!

正经的说,它被工业领域所接受的原因是它具备一下三个优点


公开发表并且无版权要求

易于部署和维护

对供应商来说,修改移动本地的比特或字节没有很多限制


简单的概括,就是免费+简单+方便修改!

归纳:Modbus就是一种用在工业上的简单协议!

2.Modbus用来干什么?

用两个字概括:通信

是的,所有协议都是用来通信的,协议的制定就是让两个人根据这个协议看懂传来的一组数据。比如我给你一个6666,你要是没有协议,就只知道这是6666,而有了协议,你就知道了这是在问我是不是大佬?当然,也可以表示其他意思,具体什么意思就看你协议怎么制定!

归纳:Modbus用来通信喽,是个人都知道!

3.Modbus的内容是什么?

大致分为以下几种:


Modbus-RTU

Modbus-ASCII

Modbus-TCP


以上三种协议,一个设备只会有一种协议,如果你的设备使用的是Modbus-RTU,只需查看以下对应部分,一般来说大部分的设备都是Modbus-RTU协议的。

4.通讯过程

Modbus是主从方式通信,也就是说,不能同步进行通信,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信。(所以说,这也算是一个缺点了)

举例1: 一个总线上有一个主机,多个从机,主机查询其中一个从机,首先你必须得这些从机分配地址(这样才能知道哪个从机,而且每个地址必须一),分配好地址后,主机要查询,然后数据下发(数据内容下面会介绍),从机得到主机发送的数据,然后对应地址的从机回复,主机得到从机数据,这样就是一个主机到从机的通信过程,是不是很简单呢?

举例2: 就像打电话,你得知道对方的电话(这就是一地址),然后你打电话过去,相当于主机查找从机,然后对方接通电话,给你回复(返回数据);正常是这样的。

如果这时候,对方正在打电话,你应该听到的是"sorry,you…"这一串英文,说明对方忙,但是Modbus总线不能判断对方是否忙,也没有对应的仲裁机制,好了你又知道了一个缺点了!但是,你可以在用软件的办法进行适当的处理数据!

5 Modbus-RTU协议

设备必须要有RTU协议!这是Modbus协议上规定的,且默认模式必须是RTU,ASCII作为选项。(也就是说,一般的设备只有RTU这个协议,ASCII一般很少)所以说,一般学习Modbus协议,只需要了解RTU的协议,ASCII作为学习的了解就足够了。

1、帧结构

帧结构 = 地址 + 功能吗 + 数据 + 校验



地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。



功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。



数据:根据功能码不同,有不同结构,在后续的实例中有说明。



校验:为了保证数据不错误,增加这个,然后再把的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。



2、实战

只谈理论大家可能不太明白,下面举一个例子。记住Modbus-RTU协议一般我们用的较多功能码就是03和06,大部分都是用modbus来查询传感器上的信息用03查询功能码,如果需要修改传感器寄存器的值就用06修改功能码,其他的不需要过多关注,学多了你也记不住,哈哈哈!

2.1 查询功能码0x03

功能描述:现在我是主机,我要查询从机地址为1的数据。我现在用电脑的modbus调试助手来代替注意,stm32来代替从

寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中**位代码寄存器类型。**位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。
寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。
支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应 当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种 “功能”读写而来。 功能码是 Modbus 地址的底层。 如果 Modbus 通 信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此 功能号与 Modbus 地址间的对应关系。

使用 modbus 地址时应注意下述问题:

1)40001~4xxxx 是美国 modicon 公司和 ge 公司 plc 使用的 modbus 地址,它是基于1的地址,即同类元件的首地址为1。西门子 plc 的 modbus 地址是基于0的地址。

2)美国的 modbus 地址左起第2位用来表示元件的类型,例如 i0.0的 modbus 地址为010001。 因为数据类型已经包含在功能码中了, 西门子的 i0.0的 modbus 地址实际上为000000, i2.0的 modbus 地址为 000016(或十六进制数16#0010) ,而不是010017。

3)、无论V寄存器还是M寄存器,里面的不同数据类型(VB、VW、VD、MB、MW、MD)都是基于寄存器内存总字节地址为偏移地址。



4)、在数据报文中,所有的modbus地址都是从0开始的。也就是**出现的数据项在报文中的地址为0。比如:(All data addresses in Modbus messages are referenced to zero. The first occurrence of a data item is addressed as item number zero.)

5)、Modbus地址实际为两种情况。
**种情况:PLC作Modbus主站,Modbus地址和PLC手册里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。要读取从站(另一台S7-200)的I0.0开始的地址区时,它的输入参数Addr(Modbus地址)为10001。S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
第二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。
主站的计算机软件(例如DCS或组态软件)的编程需要编写实现Modbus通信的程序,首先需要确定Modbus RTU的报文结构。他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程一起来讨论Modbus的报文结构。
较容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。
S7 PLC手册给出的Modbus与Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同类元件的首地址为1。而西门子PLC采用的是基于0的地址,即同类元件的首地址为0。Modbus报文中西门子PLC的Modbus地址也采用基于0的地址。
PLC系统手册中的Modbus地址的较高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。因为地址区类型的信息已经包含在报文的功能码中了,报文中S7-200的I0.0的Modbus地址不是10001,而是0。报文中其他地址区的Modbus地址也应按相同的原则处理。例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在报文中的Modbus地址为0,而不是40001。


施耐德plc modbus地址对照表

000001至000XXX是实际输出,对应%QX0.0-%QXX.X
010001至010XXX是实际输入,对应%IX0.0-%IXX.X
030001至030032是模拟量寄存器,对应%AIW0,16位一路依次类推
040001至040XXX是保持寄存器,对应%MX0.0-%MXX.X,1对1,要是%MW就对应16位,依次类推。施耐德PLC中 W表示字 16位,D表示双字 32位。比如:%MW10和%MD10。B表示字节 8位,X表示位。比如:%MB0和%MX0.0~%MX0.7

%MW10.4
%MW10是指一个字,一个字分为2个字节,一个字节8个位,也就是说%MW10中有16个位,从%MW10.0~%MW10.15。
%QW0.5.1.0.10
Q是输出 ,0是机架,5是0号机架的第五个模块,1是第五号模块的**个通道,0是**个通道的第0个字,10是第0个字的第10个位


http://zhangqueena.b2b168.com

产品推荐