中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

串口通信

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 串口通信 → 浏览主题: MODBUS 协议
发表新帖 回复该主题
回帖:12个,阅读:1342 [上一页] [1] [2] [下一页]
* 帖子主题:

MODBUS 协议

分享到
13675
465010287 版主
文章数:6312
年度积分:144
历史总积分:13675
注册时间:2012/10/11
发站内信
发表于:2018/7/13 15:24:29
#0楼
前一张讲述了RS-485的通讯接口及物理层和通讯方式,以及更加深刻了解RS-485物理层接口定义,从而深入了解在PLC中和各种设备之间的通讯方式及通讯内容。接下来,就开始说一下,国际上公开开放的协议-MODBUS 协议,现在国内几乎智能设备上都采用了标准的MODBUS-协议,与PLC和上位机编程及监控,集中数据处理,让工厂的设备实现工业自动化的。

一、MODBUS 协议

 Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

当在网络上通信时,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协议,可以更加认识两种的协议内容。如果想学习Modbus协议。可以采用台达变频器。可以通过两种不同协议,让你更加深入了解Modbus协议,尤其是工厂上扫描枪及读码器。它们都是采用RS-232接口。这就要通过Modbus协议的ASCII的协议,有的可能支持RTU,有的就得采用无协议通讯,(例如西门子 200SMART 1200 都是有自由口编程)具体编程方式,下回详解,


下表是ASCII协议和RTU协议进行的比较(台达变频器VFD系列)里面包括了ASCII协议和RTU协议,下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去.

以台达变频器MODBUS协议为例:

 1、MODBUS-ASII 字符结构:
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器.



    MODBUS -ASII  通讯数据结构:



 2、MODBUS-RTU 字符结构:
 用RTU模式传输的数据是8位二进制字符。如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。用以构成报文的ASCII字符都是十六进制字符




MODBUS -RTU  通讯数据结构:





  通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符
   RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。


二、ModBus协议的数据校验方式分为两大类:

1、LRC(纵向冗余错误校验)
2、CRC-16(循环冗余错误校验)

1、LRC(纵向冗余错误校验)
LRC错误校验用于ASCII模式。
这个错误校验是一个8位二进制数,可作为2个ASCII十六进制字节传送。把十六进制字符转换成二进制,加上无循环进位的二进制字符和二进制补码结果生成LRC错误校验(参见图)。这个LRC在接收设备进行核验,并与被传送的LRC进行比较,冒号(:)、回车符号(CR)、换行字符(LF)和置入的其他任何非ASCII十六进制字符在运算时忽略不计。



2、CRC-16(循环冗余错误校验)


三、MODBUS -协议的功能代码


以下就介绍01 、02、03和06的功能代码。因为这个常用的功能代码,尤其是03和06,一个是读保持寄存器,另一个是写保持寄存器


1、01H-读线圈状态

1)描述:读从机线圈寄存器,位操作,可读单个或者多个;
2)发送指令:
假设从机地址位0x01,寄存器开始地址0x0023,寄存器结束抵制0x0038,总共读取21个线圈。协议图如下:


3)响应:
返回数据的每一位对应线圈状态,1-ON,0-OFF,如下图



上表中data1表示0x0023-0x002a的线圈状态,data1的最低位代表最低地址的线圈状态,可以理解为小端模式;


data2表示地址0x002b-0x0033的线圈状态,如下表:




data3表示地址0x0034-0x0038的线圈状态,不够8位,字节高位填充为0,如下表




2、02H-读离散输入状态

1):读离散输入寄存器,位操作,可读单个或多个,协议类似功能码0X01协议,此处省略



3、03H-读保持寄存器

1)描述:读保持寄存器,字节指令操作,可读单个或者多个;
2)发送指令:


从机地址0x01,保持寄存器起始地址0x0032,读2个保持寄存器

3)响应:




数据存储顺序



4、06H-写单个保持寄存器

1)描述:写单个保持寄存器,字节指令操作,只能写一个;
2)发送指令:
写0x0032保持寄存器为0x1232;


3)响应:同发送指令;如果写入成功,返回发送的指令,即01、06、00、32、12、32

表1 ModBus功能码
  Modbus中常用的功能码有8个,可以分为位操作和字操作两类





以上就是我整理的MODBUS 协议的通讯。如有错误,请指正。一起共同谈谈工控。,接下来准备对台达变频器的 MODBUS ASI 的学习。深入了解MODBUS
[此贴子已经被作者于2018/7/13 15:27:23编辑过]
27308
guanyumou 版主
文章数:10447
年度积分:491
历史总积分:27308
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2018/7/13 15:33:01
#1楼
03 06都是字寄存器操作!不是字节!
此帖发自手机工控论坛
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219
13675
465010287 版主
文章数:6312
年度积分:144
历史总积分:13675
注册时间:2012/10/11
发站内信
发表于:2018/7/13 15:34:03
#2楼
回复 #1楼 guanyumou
谢谢你指点。。
3356
svpama
文章数:469
年度积分:50
历史总积分:3356
注册时间:2007/3/20
发站内信
发表于:2018/7/13 16:32:23
#3楼
对于初学者或未接触过的朋友来说,好像有点深奥,而已经了解过的,又感觉没什么。
我的看法,如果说得再显浅一些,可能会给很多新人带来更大的帮助。
[此贴子已经被作者于2018/7/13 16:33:09编辑过]
38744
jint 管理员
文章数:20675
年度积分:254
历史总积分:38744
注册时间:2007/8/30
发站内信
发表于:2018/7/13 17:06:21
#4楼
图片没正确上传,补上可以加分鼓励一下的哦表情
13675
465010287 版主
文章数:6312
年度积分:144
历史总积分:13675
注册时间:2012/10/11
发站内信
发表于:2018/7/13 17:29:31
#5楼
回复 #4楼 jint
图片会的
18945
PLC-hmi
文章数:7455
年度积分:202
历史总积分:18945
注册时间:2010/8/19
发站内信
2018论坛热心网友
发表于:2018/7/13 19:20:03
#6楼
真正标准的还好,但是修改的太多了
此帖发自论坛APP
729
404513201
文章数:54
年度积分:50
历史总积分:729
注册时间:2018/6/24
发站内信
发表于:2018/7/14 11:48:21
#7楼
正需要了解这个,想把单片机与PLC连在一起
此帖发自手机工控论坛
27308
guanyumou 版主
文章数:10447
年度积分:491
历史总积分:27308
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2018/7/15 1:13:23
#8楼
以下是引用4045132012018/7/14 11:48:21的发言:
正需要了解这个,想把单片机与PLC连在一起
单片机和PLC通信,走Modbus RTU协议最好!
13675
465010287 版主
文章数:6312
年度积分:144
历史总积分:13675
注册时间:2012/10/11
发站内信
发表于:2018/7/15 7:51:56
#9楼
以下是引用guanyumou2018/7/15 1:13:23的发言:
以下是引用4045132012018/7/14 11:48:21的发言:
正需要了解这个,想把单片机与PLC连在一起
单片机和PLC通信,走Modbus RTU协议最好!
没试过单片机,,有时间买个单片机
此帖发自手机工控论坛
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005