MODBUS协议

        Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
        ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。
        ModBus网络只有一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。

        为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。在中国,Modbus已经成为国家标准GB/T19582-2008。据不完全统计:截止到2007年,Modbus的节点安装数量已经超过了1000万个。
        Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。
        当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。

Modbus网络传输
        标准的Modbus口是使用RS-232-C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设
备:可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的

格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息

并把它作为回应发送出去。

传输方式
    在ModBus系统中有2种传输模式可选择。这2种传输模式与从机PC通信的能力是同等的。选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)。
    用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。

传输模式特性

ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortran)编程的主计算机及主PC很适宜。RTU则适用于机器语言编程的计算机和PC主机。

    用RTU模式传输的数据是8位二进制字符。如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。用以构成报文的ASCII字符都是十六进制字符。ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译码和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较慢的机器。
    控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。

ASCII模式

当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为一个ASCII码(两个十六进制字符)发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统
· 十六进制,ASCII字符0...9,A...F
· 消息中的每个ASCII字符都是一个十六进制字符组成
每个字节的位
· 1个起始位
· 7个数据位,最小的有效位先发送
· 1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
错误检测域
· LRC(纵向冗长检测)

RTU模式

当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的 十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统
8位二进制,十六进制数0...9,A...F
消息中的每个8位域都是一或两个十六进制字符组成
每个字节的位
1个起始位
8个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)

ascii与rtu的对比

相对于ascii方式,rtu模式表达相同的信息需要较少的位数,且在相同通讯速率下具有更大的数据流量。

modbus有四种数据,DI、DO、AI、AO
DI: 数字输入,离散输入,一个地址一个数据位,用户只能读取它的状态,不能修改。比如面板上的按键、开关状态,电机的故障状态。
DO: 数字输出,线圈输出,一个地址一个数据位,用户可以置位、复位,可以回读状态,比如继电器输出,电机的启停控制信号。
AI: 模拟输入,输入寄存器,一个地址16位数据,用户只能读,不能修改,比如一个电压值的读数。
AO: 模拟输出,保持寄存器,一个地址16位数据,用户可以写,也可以回读,比如一个控制变频器的电流值。

Modbus协议定义的寄存器地址是5位十进制地址,即:
线圈(DO)地址:00000~09999
触点(DI)地址:10000~19999
输入寄存器(AI)地址:30000~39999
输出寄存器(AO)地址:40000~49999

ModBus RTU通讯协议与ModBus通讯协议有什么区别

    ModBus协议是应用层报文传输协议(OSI模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域。ModBus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU。目前,Modbus有下列三种通信方式:1. 以太网,对应的通信模式是MODBUS TCP。2. 异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是MODBUS RTU或MODBUS ASCII。3. 高速令牌传递网络,对应的通信模式是Modbus PLUS。

MODBUS TCP和MODBUS RTU的差别

二者相同的地方是应用数据单元是一致的。

差别是MODBUS TCP是传输在TCP/IP网络上的,多了一个报文头,少了CRC校验,采用TCP的502端口,RTU多了设备地址和CRC校验。

modbus rtu 读保存寄存器的报文
11 03 00 6B 00 03 76 87
报文解析: [11]设备地址和上面的相同。 [03]功能码读取模拟量的功能码为03。
[00 6B]起始寄存器地址高8位、低8位表示想读取的模拟量的起始地址比如示例中的寄存器起始地址为107。
[00 03]寄存器数高8位、低8位表示从起始地址开始读多少个模拟量。示例中为读取3个模拟量。注意在返回的信息中一个模拟量需要返回两个字节。 
[76 87] CRC校验同上。
11 03 06 02 2B 00 00 00 64 C8 BA
报文解析

[11]设备地址:和上面相同。

[03]功能码:和上面相同

[06]返回的字节个数:表示数据的字节个数也就是数据12...n中的n的值。例子中返回了3个模拟量的数据因为一个模拟量需要2个字节所以共6个字节。

[02 2B 00 00 00 64]数据1...6:其中[数据1][数据2]分别是第1个模拟量的高8位和低8位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。示例中返回的值分别是555,0,100。注意在实际使用中,不同厂家规约可能会做改动,比如说对模拟量的处理是低字节在前,高字节在后,数据格式可分为有符号整型和无符号整型,有符号整型的又分为补码和绝对值两种方式等等,这是在实际分析报文需要注意的地方。

[C8 BA]CRC校验同上。最常用功能码:
下面线圈”“寄存器其实分别直的就是位变量”“16位变量
01 (0x01)
读线圈

02 (0x02)
读离散量输入
03 (0x03)
读保持寄存器
04(0x04)
读输入寄存器
05 (0x05)
写单个线圈
06 (0x06)
写单个寄存器
15 (0x0F)
写多个线圈
16 (0x10)
写多个寄存器

错误通讯时的额外回应:
    当控制器(从机如仪表)做通信连接时,如果产生错误,此时控制器(从机仪表)会回应错误且将将Function code AND 80H回应给主控系统(主机如PC),让主控系统(主机如PC)知道有错误产生。
错误码的意义:
01 功能码错误:控制器可以辨识的功能码为03H,06H,08H。
02 寄存器地址错误:从机地址处的控制器无法辨识此寄存器地址。
03 资料内容指的错误,资料内容值太大或者太小,不是控制器所能表示的内容值。
04 控制无法处理:控制器对此命令,无法执行。
09 CRC或者LRC校验错误。
10 奇偶校验错误。
12 接收数据低于规定长度。
13 接收数据超过规定长度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值