当前位置:文档之家› MODBUS协议概述

MODBUS协议概述

REV 1 SECT 19 DATE 2010-12-30 PAGE 1 关键字:MODBUS、协议摘要:本文对MODBUS协议进行了一个简单的概述,让读者对MODBUS协议有一个大概的认识。

1 串口串口叫做串行接口,也称串行通信接口,按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等。

RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或软件协议。

1.1 RS-232-C也称标准串口,是目前最常用的一种串行通讯接口。

它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。

它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。

传统的RS-232-C接口标准有25根信号线,采用标准25芯D型插头座。

后来的PC上使用简化了的9芯D型插座。

现在应用中25芯插头座已很少采用。

现在的台式电脑一般有两个串行口:COM1和COM2,从设备管理器的端口列表中就可以看到。

硬件表现为计算机后面的9针D形接口,由于其形状和针脚数量的原因,其接头又被称为DB9接头。

现在有很多手机数据线或者物流接收器都采用COM口与计算机相连,很多投影机,液晶电视等设备都具有了此接口,厂家也常常会提供控制协议,便于在控制方面实现编程受控,现在越来越多的智能会议室和家居建设都采用了中央控制设备对多种受控设备的串口控制方式。

RS-232最大通信距离为15m。

RS-232常用针脚定义:2 :RXD:(Received Data)此引脚用于接收外部设备送来的数据3 :TXD:(Transmit Data)此引脚将计算机的数据发送给外部设备5 :GND:信号地(Signal Ground)RS-232-C的电平逻辑定义:-15V~-3V 表示逻辑1+3V~+15V 表示逻辑0REV 1 SECT 19 DATE 2010-12-30 PAGE 2RS-232设备连接示意图1.2 RS-422为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。

RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。

RS-422标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。

实际上还有一根信号地线,共5根线。

由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。

即一个主设备(Master),其余为从设备(Salve),从设备之间不能通信,所以RS-422支持点对多的双向通信。

接收器输入阻抗为4kΩ,故发端最大负载能力是10×4kΩ+100Ω(终接电阻)。

RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)。

RS-422的最大传输距离为4000英尺(约1219米),最大传输速率为10Mb/s。

其平衡双绞线的长度与传输速率成反比,在 100kb/s速率以下,才可能达到最大传输距离。

只有在很短的距离下才能获得最高速率传输。

一般100米长的双绞线上所能获得的最大传输速率仅为 1Mb/s。

RS-422需要一终接电阻,要求其阻值约等于传输电缆的特性阻抗。

在短距离传输时可不需终接电阻,即一般在300米以下不需终接电阻。

终接电阻接在传输电缆的最远端。

RS-422的电平逻辑定义:发送端(TX+/ TX-)电压差+2V~+6V表示逻辑1发送端(TX+/ TX-)电压差-6V~-2V表示逻辑0REV 1 SECT 19 DATE 2010-12-30 PAGE 3 接受端(RX+/ RX-)电压差>+200mV表示逻辑1接受端(RX+/ RX-)电压差<-200mV表示逻辑0RS-422设备连接示意图1.3 RS-485为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。

RS485采用差分信号负逻辑。

RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓朴结构在同一总线上最多可以挂接32个结点。

在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。

很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。

而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有二个原因:(1)共模干扰问题: RS-485接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了。

但人们往往忽视了收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7~+12V,只有满足上述条件,整个网络才能正常工作。

当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。

(2)EMI问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。

REV 1 SECT 19 DATE 2010-12-30 PAGE 4 由于PC机默认的只带有RS232接口,有两种方法可以得到PC上位机的RS485电路:(1)通过RS232/RS485转换电路将PC机串口RS232信号转换成RS485信号,对于情况比较复杂的工业环境最好是选用防浪涌带隔离珊的产品。

(2)通过PCI多串口卡,可以直接选用输出信号为RS485类型的扩展卡。

在使用RS485接口时,对于特定的传输线路,从RS485接口到负载其数据信号传输所允许的最大电缆长度与信号传输的波特率成反比,这个长度数据主要是受信号失真及噪声等影响所影响。

理论上,通信速率在100Kpbs及以下时,RS485的最长传输距离可达1200米,但在实际应用中传输的距离也因芯片及电缆的传输特性而所差异。

在传输过程中可以采用增加中继的方法对信号进行放大,最多可以加八个中继,也就是说理论上RS485的最大传输距离可以达到9.6公理。

如果真需要长距离传输,可以采用光纤为传播介质,收发两端各加一个光电转换器,多模光纤的传输距离是5~10公里,而采用单模光纤可达50公里的传播距离。

RS-485的电平逻辑定义:485B电压>485A电压且A/B间电压差≥200mV表示逻辑1485A电压>485B电压且A/B间电压差≥200mV表示逻辑0RS-485设备连接示意图1.4 串口通信名词解释(1)波特率在串行通信中,用波特率来描述数据传输的速度,即每秒钟传送的二进制位数,其单位是bps(bits per second),它是衡量串行数据速度快慢的重要指标,国际上规定了一个标准的波特率系列:110、300、600、1200、1800、2400、4800、9600、14.4k、19.2k、28.8k、33.6k、56k。

REV 1 SECT 19 DATE 2010-12-30 PAGE 5 (2)数据位是指每个数据包的位数。

标准值是5、7、8。

(3)停止位用于表示单个包的最后一位。

典型的值为1、1.5、2位。

由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。

因此停止位不仅仅是表示传输的结束,并且提供设备校正时钟同步的机会。

使用的停止位位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

(4)奇偶校验位是串口通信中一种简单的检错方式。

常用校验方式为:偶校验、奇校验。

不同设备之间进行串口通信时,波特率、数据位、停止位以及奇偶校验位必须设置一致。

2 MODBUS协议MODBUS协议是应用于电子控制器上的一种通用语言。

通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。

它已经成为一种通用工业标准。

MODBUS有两种传输模式:ASCII和RTU模式,本文只讨论RTU模式。

2.1 MODBUS从站数据存储格式及数据块分类MODBUS从站数据块分及绝对地址分配如下:数据块 绝对地址分配属性线圈(Coil Status) 00001~09999读写离散量输入(Input Status) 10001~19999只读保持寄存器(Holding Register) 40001~49999读写输入寄存器(Input Register) 30001~39999只读 对于线圈和离散量输入,一个绝对地址表示一个开关量信息:REV 1 SECT 19 DATE 2010-12-30 PAGE 6如上图,地址为00006的线圈状态为0(OFF),地址为00008的线圈状态为1(ON);离散量输入类似,不再详述。

对于保持寄存器和输入寄存器,一个绝对地址表示一个16Bit的二进制数(一个字):如上图,地址为40005的保持寄存器内数据为0x DEBD,地址为40008的保持寄存奇内数据为0x CCBF;输入寄存器类似,不再详述。

2.2 MODBUS常用功能码(1)01(0x01) 读线圈如主站读取硬件地址为17(0x11)的从站中地址为00020~00056(起始地址为19,0x0013)的37(0x0025)个线圈状态,则主站查询包格式为(其中11 01 00 13 00 25的CRC16校验码为0x840E):从站 地址 功能码起始地址Hi起始地址Lo读取数量Hi读取数量LoCRC16校验LoCRC16校验Hi11 01 00 13 00 25 0E 84从站回复时,是从起始地址开始,每8个线圈(8Bit,1个字节)为一个数据块,依次打包成数据1、数据2…数据N,线圈状态按照地址由低到高的顺序依次排列到数据块的低位至高位,若最后线圈数量不足8个,则高位空缺部分填充0,其数据包格式为:REV 1 SECT 19 DATE 2010-12-30 PAGE 7从站 地址 功能码数据字节数数据1 数据2数据3数据4数据5CRC16校验LoCRC16校验Hi11 01 05 CD 6B B2 0E 1B 45 E6解析回复的数据包,其含义如下:地址 5958 57 5655545352数据块 HEX状态 OFF OFF OFF ON ON OFF ON ON数据块5 1B地址 5150 49 4847464544状态 OFF OFF OFF OFF ON ON ON OFF数据块4 0E地址 4342 41 4039383736状态 ON OFF ON ON OFF OFF ON OFF数据块3 B2地址 3534 33 3231302928状态 OFF ON ON OFF ON OFF ON ON数据块2 6B地址 2726 25 2423222120状态 ON ON OFF OFF ON ON OFF ON数据块1 CD 演示截图如下:注:MODBUS数据包中的起始地址其实指的是相对于基地址的偏移量。

相关主题