前一张讲述了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)描述:读从机线圈寄存器,位操作,可读单个或者多个;
2)发送指令:
假设从机地址位0x01,寄存器开始地址0x0023,寄存器结束抵制0x0038,总共读取21个线圈。协议图如下:
3)响应:
返回数据的每一位对应线圈状态,1-ON,0-OFF,如下图
上表中data1表示0x0023-0x002a的线圈状态,data1的最低位代表最低地址的线圈状态,可以理解为小端模式;
data2表示地址0x002b-0x0033的线圈状态,如下表:
data3表示地址0x0034-0x0038的线圈状态,不够8位,字节高位填充为0,如下表
1):读离散输入寄存器,位操作,可读单个或多个,协议类似功能码0X01协议,此处省略
1)描述:读保持寄存器,字节指令操作,可读单个或者多个;
2)发送指令:
从机地址0x01,保持寄存器起始地址0x0032,读2个保持寄存器
3)响应:
数据存储顺序
1)描述:写单个保持寄存器,字节指令操作,只能写一个;
2)发送指令:
写0x0032保持寄存器为0x1232;
3)响应:同发送指令;如果写入成功,返回发送的指令,即01、06、00、32、12、32
表1 ModBus功能码
Modbus中常用的功能码有8个,可以分为位操作和字操作两类
以上就是我整理的MODBUS 协议的通讯。如有错误,请指正。一起共同谈谈工控。,接下来准备对台达变频器的 MODBUS ASI 的学习。深入了解MODBUS
阅读 8
楼主最近还看过