RS485 是半双工通讯(2 线制),能够一点对多点进行组网,并且 RS485 是用缆线两端的电压差值来表示传递信号,这与 RS232 电气特性大不同。RS485 仅仅规定了接收端和发送端的电气特性,并无规定或推荐任何数据协议html
RS485 采用两根通讯线,一般用 A 和 B 或者 D+和 D-来表示。逻辑“1”以两线之间的电压差为+(0.2~6)V 表示,逻辑“0”以两线间的电压差为-(0.2~6)V 来表示,是一种典型的差分通讯,
电平与 TTL 电平兼容,可方便与 TTL 电路链接。算法
优势:网络
RS485的接口信号电平比RS231-C低,不易损坏接口电路的芯片,且该电平与TTL电平兼容,方便于TTL电路相链接。code
RS485的数据最高传输速率为10Mbps。其平衡双绞线的长度与传输速率呈反比,在100kbps速率下,才可能使用规定的最长电缆长度,只有在很短的距离下才能得到最高传输速率。htm
RS485接口采用平衡驱动器和差分接收器的组合,抗共模干扰能力强,即抗噪声干扰性好,于是通讯距离远,最大传输距离大约为1200m,实际可达3000m。blog
RS485接口在总线上容许链接多达128个收发器,既具备多站能力。同时须要两个终端电阻,其阻值要求等于传输电缆的特性阻抗。在短距离300m内传输时可不链接终端电阻。接口
RS485引脚定义get
RS-232与RS-422及RS-485三者之间的特性与区别it
modbus协议已经成为通用工业标准,经过协议,控制器与控制器、控制器经过网络(以太网)与其余设备之间能够实现串行通讯。RTU即远程终端单元,消息中每8位包含两个十六进制字符。在相同的波特率下,这种方法比ASCII方式传送的数据量大。class
上面图中看到了报文格式:下面详细分析一条报文:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验
这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址
一、主机对从机写数据操做 若是单片机接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文: 01 06 00 01 00 17 98 04 从机地址 功能号 数据地址 数据 CRC校验 假如本机地址是 1 ,那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,若是判断数据无误,则结果是: HoldDataReg[1] = 0x0017; MODBUS主机就完成了一次对从机数据的写操做,实现了通信。 二、主机对从机读数据操做 主机进行读HoldDataReg[1] 操做,则报文是: 01 03 00 01 00 01 D5 CA 从机地址 功能号 数据地址 读取数据个数 CRC校验 那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,若是判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的: 返回内容: 01 03 02 0017 F8 4A 从机地址 功能号 数据字节个数 两个字节数据 CRC校验 MODBUS主机就完成了一次对从机数据的读操做,实现了通信。
意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)经过一算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。(累加和:就是010600010017加起来的值,而后它的算法就是加法)。
做用:在数据传输过程当中可能数据会发生错误,CRC检验检测接收的数据是否正确。好比主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断本身计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,若是不相等那么说明数据传输有错误这些数据不能要。