rs485通讯协议规范.docx
《rs485通讯协议规范.docx》由会员分享,可在线阅读,更多相关《rs485通讯协议规范.docx(9页珍藏版)》请在冰豆网上搜索。
![rs485通讯协议规范.docx](https://file1.bdocx.com/fileroot1/2023-1/9/772f85f2-71c8-487e-83fb-416d2fcd7e2e/772f85f2-71c8-487e-83fb-416d2fcd7e2e1.gif)
rs485通讯协议规范
竭诚为您提供优质文档/双击可除
rs-485通讯协议规范
篇一:
Rs485串行通信协议及其应用
Rs-485串行数据通信协议及其应用
概述
串行数据通信的协议从Rs-232到千兆位以太网,虽然每种协议都有特定的应用领域,但任何情况下我们都必须考虑成本和物理层(phy)性能。
本文主要介绍Rs-485协议及该协议所适合的应用。
同时给出了根据电缆长度、系统设计以及元件选择来优化数据速率的方法。
传输协议
什么是Rs-485?
profibus又是什么?
与其它串行协议相比,它们的性能如何?
适用于哪些应用?
为了回答这些问题,我们对Rs-485物理层(phy)、Rs-232和Rs-422的特性、功能进行了总体比较[1](本文中的Rs表示ansieia/tia标准)。
Rs-232是一个最初用于调制解调器、打印机及其它pc外设的通讯标准,提供单端20kbps的波特,后来速率提高至1mbps。
Rs-232的其它技术指标包括:
标称±5V发送电平、±3V接收电平(间隔/符号)、2V共模抑制、2200pF最大电缆负载电容、300最大驱动器输出电阻、3k最小接收器(负载)阻抗、100英尺(典型值)最大电缆长度。
Rs-232只用于点对点通信系统,不能用于多点通信系统,所有Rs-232系统都必须遵从这些限制。
Rs-422是单向、全双工通信协议,适合嘈杂的工业环境。
Rs-422规范允许单个驱动器与多个接收器通信,数据信号采用差分传输方式,速率最高可达50mbps。
接收器共模范围为±7V,驱动器输出电阻最大值为100,接收器输入阻抗可低至4k。
Rs-485标准
Rs-485是双向、半双工通信协议,允许多个驱动器和接收器挂接在总线上,其中每个驱动器都能够脱离总线。
该规范满足所有Rs-422的要求,而且比Rs-422稳定性更强。
具有更高的接收器输入阻抗和更宽的共模范围(-7V至+12V)。
接收器输入灵敏度为±200mV,这就意味着若要识别符号或间隔状态,接收端电压必须高于+200mV或低于-200mV。
最小接收器输入阻抗为12k,驱动器输出电压为±1.5V(最小值)、±5V(最大值)。
驱动器能够驱动32个单位负载,即允许总线上并联32个12k的接收器。
对于输入阻抗更高的接收器,一条总线上允许连接的单位负载数也较高。
Rs-485接收器可随意组合,连接至同一总线,但要保证这些电路的实际并联阻抗不高于32个单位负载(375)。
采用典型的24awg双绞线时,驱动器负载阻抗的最大值为54,即32个单位负载并联2个120终端匹配电阻。
Rs-485已经成为pos、工业以及电信应用中的最佳选择。
较宽的共模范围可实现长电缆、嘈杂环境(如工厂车间)下的数据传输。
更高的接收器输入阻抗还允许总线上挂接更多器件。
profibus和Fieldbus[2]总线主要用于工业设备,是Rs-485总线的扩展。
用于工业环境的传感器测量、
激励控制、数据采集/显示以及过程控制系统与传感器、激励源网络之间的数据通信。
注意:
老式或现有的工业设备布线架构比较复杂,不可替换。
profibus和Fieldbus是对系统的整体描述。
Rs-485支持profibus和Fieldbus协议的物理层接口标准。
profibus与Fieldbus存在细微的差异,profibus要求2.0V的最小差分输出电压,54的负载电阻;Fieldbus则要求1.5V的最小差分输出电压,54的负载电阻。
profibus传输速率为12mbps,Fieldbus的传输速率为500kbps。
profibus应用对摆率和电容容限要求比较严格。
最适合的应用领域?
Rs-232:
用于与调制解调器、打印机及其它pc外设之间的通信。
最大电缆长度为100英尺(典型值)。
Rs-422:
适用于单主机(驱动器)工业环境。
典型应用包括:
过程自动化(化工、酿造、造纸)、工厂自动化(汽车制造、金属加工)、hVac、安防、电机控制、运动控制等。
Rs-485:
适用于多主机/驱动器工业环境。
其典型应用与Rs-422相似,包括:
过程自动化(化工、酿造、造纸)、工厂自动化(汽车制造、金属加工)、hVac、安防、电机控制、运动控制。
哪些因素限制了Rs-485的数据速率?
在指定的传输距离下,下列因素限制了传输速率:
电缆长度:
在特定频率下,信号强度会随着电缆长度而衰减。
电缆架构:
5类24awg双绞线是Rs-485系统最常用的电缆,屏蔽电缆可大大增强噪声抑制能力,提高了一定距离下的数据传输速率。
电缆特性阻抗:
分布电容和分布电感会降低信号的边沿速度,从而降低噪声裕量、补偿“眼图模板”特性。
分布电阻直接导致信号电平的衰减。
驱动器输出阻抗:
阻抗过高会限制驱动能力。
接收器输入阻抗:
阻抗过低会限制与驱动器通信的接收器数量。
终端匹配:
长电缆可看作传输线。
电缆上应接阻值等于电缆特性阻抗的终端匹配电阻,可以降低信号反射,并提高数据速率。
噪声裕量:
越大越好。
驱动器摆率:
降低边沿速率(降低信号摆率)允许采用较长的电缆进行通信。
经验数据
了解了以上相关的背景知识,接下来我们研究一个实际系统,如图1所示。
图中所示电缆是Rs-485系统最为常用的一种:
eia/tia/ansi5685类双绞线。
在长度为300英尺至900英尺的电缆上可以获得的数据速率为1mbps至35mbps。
图1.测试装置
系统设计人员经常从两个不同厂商选择驱动器和接收器,多数设计人员最关注的是Rs-485驱动器的传输距离和速度。
maxim驱动器(这里指max3469)与其它制造商的驱动器性能比较如图2、图3所示。
图2.在特定比特率、电缆长度下的抖动特性,抖动是在±100mV差分信号下测量的
图3.在特定比特率、电缆长度下的抖动指标,抖动是在0V差分信号下测量的
通过观察驱动器的差分输出信号的完整性,利用示波器确定80mV与-400mV之间的翻转门限(由于接收器具有200mV至-200mV的输入范围和噪声裕量,因此选取这一门限范围)。
然后,当脉冲(比特)开始“传送”时,用眼图确定失真度、噪声以及码间干扰(isi)。
isi指标限制了比特率,以保证系统能够在脉冲之间识别出传输数据。
对图1电路的测试结果表明翻转门限与眼图模板之间具有相关性。
该眼图模板存在50%的抖动,按照nationalsemiconductoR的应用笔记#977[3]所介绍的方法进行测量。
测量0V差分信号和±100mV差分信号下的抖动,得到图4和图5所示数据。
图4.maxim的max3469与其它Rs-485驱动器件的眼图对比[4]
图5.max3469的眼图
对于一个点到点通信系统,从±100mV差分信号(图4)或0V差分信号(图5)下的测试结果可以看出比特率与电缆长度的关系。
+100mV和-100mV门限能够正确切换差分信号大于200mV的信号,因此,该门限值可确保接收器正确接收数据(图5数据仅适用于可在0V差分输入下切换的理想接收器)。
眼图和故障模式
采用340英尺的5类电缆,图2给出了39mbps传输速率下的驱动器输出眼图,图中,信号从“眼”的中间穿过-这种情况表明可能出现误码。
然而,在相同数据速率下,maxim公司的器件不会出现这种情况(图3)。
maxim的收发器具有对称的输出边沿和较低的输入电容,性能良好。
采用上述测试对两款驱动器进行比较。
当数据速率较高、电缆较长时,maxim驱动器的性能更出色。
图5给出点对点网络中maxim器件的传输速率和距离的估计值。
根据经验,所产生的误码大致符合50%抖动极限的要求。
各方研究数据
在工业领域,通常可接受的传输距离和数据速率的最大值分别为4000英尺和10mbps,当然这两个值不能同时满足。
然而,利用最新器件和精细的系统设计,可在较长的电缆下实现较高的数据吞吐率。
预加重[5]是一种改善数据速率与距离间关系的技术,可用于Rs-485通信(图6)。
采用1700英尺电缆,工作在1mbps固定数据速率,没有预加重驱动器或均衡接收器的Rs-485收发器通常具有10%的抖动。
在相同速率下,增加驱动器预加重可使距离加倍,达到3400英尺,而且不会提高抖动。
同样,距离一定时采用预加重能提高数据速率。
速率为400kbps,电缆长度为4000英尺时,无预加重的驱动器通常具有10%的抖动。
而采用预加重可使该距离下的传输速率提升至800kbps。
篇二:
485通讯协议标准
编号:
密级:
内部页数:
__________
基于Rs485接口的dgl通信协议(修改)
编写:
____________________校对:
____________________审核:
____________________批准:
____________________
北京华美特科贸有限公司二○○二年十二月六日
1.前言
在常见的数字式磁致伸缩液位计中,多采用Rs485通信方式。
但Rs485标准仅对物理层接口进行了明确定义,并没有制定通信协议标准。
因此,在Rs485的基础上,派生出很多不同的协议,不同公司均可根据自身需要设计符合实际情况的通信协议。
并且,Rs485允许单总线多机通信,如果通信协议设计不好,就会造成相互干扰和总线闭锁等现象。
如果在一条总线上挂接不同类型的产品,由于协议不一样,很容易造成误触发,造成总线阻塞,使得不同产品对总线的兼容性很差。
随着Rs485的发展,modicon公司提出的modbus协议逐步得到广泛认可,已在工业领域得到广泛应用。
而modbus的协议规范比较烦琐,并且每字节数据仅用低4位(范围:
0~15),在信息量相同时,对总线占用时间较长。
dgl协议是根据以上问题提出的一种通信协议。
在制定该协议时已充分考虑以下几点要求:
a.兼容于modbus。
也就是说,符合该协议的从机均可挂接到同一总线上。
b.要适应大数据量的通信。
如:
满足产品在线程序更新的需要(未来功能)。
c.数据传输需稳定可靠。
对不确定因素应加入必要的冗错措施。
d.降低总线的占用率,保证数据传输的通畅。
2.协议描述
为了兼容其它协议,现做以下定义:
通信数据均用1字节的16进制数表示。
从机的地址范围为:
0x80~0xFd,即:
msb=1;命令和数据的数值范围均应控制在0~0x7F之间。
即:
msb=0,以区别地址和其它数据。
液位计的编码地址为:
0x82~0x9F。
其初始地址(出厂默认值)为:
0x81。
罐旁表的编织地址为:
0xa2~0xbF。
其初始地址(出厂默认值)为:
0xa1。
其它地址用于连接其它类型的设备,也可用于液位计、罐区表地址不够时的扩充。
液位计的命令范围为:
0x01~0x2F,共47条,将分别用于参数设定、实时测量、诊断测试、在线编程等。
通信的基本参数为:
4800波特率,1个起始位,1个结束位。
字节校验为奇校验。
本协议的数据包是参照modbusRtu通信格式编写,并对其进行了部分修改,以提高数据传输的速度。
另外,还部分参照了haRt协议。
其具体格式如下:
表中,数据的最大字节数为16个。
也就是说,整个数据包最长为20个字节。
“校验和”是其前面所有数据异或得到的数值,然后将该数值msb位清零,使其满足0~7F的要求。
在验证接收数据包的“校验和”是否正确时,可将所有接收数据(包括“校验和”)进行异或操作,得到的数据应=0x80。
这是因为,只有“地址”的msb=1,所以异或结果的msb也必然等于1。
本协议不支持modbus中所规定的广播模式。
3.时序安排
在上电后,液位计将先延迟10秒,等待电源稳定。
然后,用5秒的时间进行自检和测试数据。
接着产品进入待机状态并打开Rs485通信接口,等待主机的请求。
因此,主机应在液位计上电20秒后,再将液位计置为工作状态,进行测量操作。
液位控制器(hmt-900或h-1000)主要用于液位计的供电和防爆安全隔离。
主机可通过Rts信号控制(hmt-900或h-1000)供给液位计的电源。
当Rts有效时,电源将被打开。
因此,液位计的电源是可以通过主机软件控制的。
在现场应用中,主机软件的工作时序一般应遵循以下几个步骤。
1)在开主机前,并认真检查各相关设备的电源和电缆连接情况。
2)在启动主机软件时,打开相应串行端口。
使能Rts信号,给液位计上电。
3)软件初始化操作,延迟20秒。
4)读液位计的相应参数,然后将液位计置为工作状态。
5)此时,主机可进入正常的轮训、记录、显示、报警等工作。
主机软件的主要工作是通过Rs485总线和各个液位计进行dgl格式的数据包通信。
因此,通信时序安排的好坏显得很重要。
在本协议中,主机只能有1个,并完全控制总线,任何从机在没有主机请求时,必需保持接收状态。
在设计从机电路时,应保证从机在上电时不能出现对总线的占用(发送状态),哪怕是很短的时间。
以免增加系统功耗,影响其“本质安全”性能。
虽然主机控制着总线,但在总线空闲状态,主机也应处于接收状态。
只有在向指定的从机发送请求数据包时,才进入发送状态。
主机的发送接收状态切换由其串口的dtR信号控制,可称为mdtR
mdtR在在t5(t7时刻)t5-t3=8~18ms,t6-t5=1.9~3.5ms,t7-t6=10~60ms,t8-t7=1~3.5ms。
一次通信的最长时间将控制在160ms以内。
两次数据包通信的间隔应≥20ms。
根据以上描述和规定,我们就可以精确地进行主机和从机的通信控制。
并根据可能出现的各种通信错误和故障,进行冗错设计。
4.命令定义
命令0x01通信协议识别码
请求数据:
0byte
应答数据:
3byte字符串“dgl”44,47,4c命令0x02地址更改
请求数据:
1bytenewadr-0x80应答数据:
1bytenewadr-0x80
注:
应答数据中仍保留为原来地址不变
命令0x03,0x4保留
命令0x05读厂家名
请求数据:
0byte
应答数据:
10byte字符串“almRtltd.”命令0x06读产品类型
请求数据:
0byte无应答数据:
8bytedt0~7
浮子数温度测点外管类型测杆材料安装形式防爆类型xx
命令0x07读产品杆长
请求数据:
0byte无
应答数据:
2bytedt0,dt1
基数:
2mm,范围:
≤20m,gl=(dt1*128+dt0)*2mm
命令0x08读温度测点位置
请求数据:
0byte
应答数据:
5bytedt0~4对应于Vt1~5位置相对杆长的百分数(0~99)。
命令0x09读产品序列号请求数据:
0byte无
应答数据:
4byte具体待定,存于mcueepRom中。
命令0x0a读电路和程序的版本号
请求数据:
0byte
应答数据:
2bytedt0电路版本,dt1程序版本命令0x0b读零点校准参数数据
请求数据:
0byte
应答数据:
8bytedt0~7
level1zero=((dt2*128+dt1)*128+dt0)*0.01mmdt30,数据求反level2zero=((dt6*128+dt5)*128+dt4)*0.01mmdt70,数据求反
命令0x0F设置产品工作状态
请
求数据:
1bytedt0=0,产品工作;dt00,产品待机;应答数据:
1byte和请求数据相同。
命令0x10读液位1(level1,油面)数据
请求数据:
0byte
应答数据:
3bytedt0,dt1,dt2
分辨率:
0.01mm,范围:
30mm~20m(0x1e8480,dt2=7a,dt1=09,dt0=0)。
当dt2=dt1=dt=0时,液位下溢出;当dt2=dt1=dt=7F时,液位上溢出;level1=((dt2*128+dt1)*128+dt0)*0.01mm
命令0x11读液位2(level2,界面)数据
请求数据:
0byte
应答数据:
3bytedt0,dt1,dt2
level2=((dt2*128+dt1)*128+dt0)*0.01mm
命令0x12读两个液位数据
请求数据:
0byte
应答数据:
6bytedt0,dt1,dt2,dt3,dt4,dt5
level1=((dt2*128+dt1)*128+dt0)*0.01mmlevel2=((dt5*128+dt4)*128+dt3)*0.01mm
建议:
如需读液面2的数据时,应采用该命令。
这样,可同时得到液位1的值,
提高了通信速度。
命令0x13~0x14保留
命令0x15读各测杆测点温度(只有一个温度测点)
请求数据:
0byte
应答数据:
10bytedt0~9
分辨率(刻度):
kd=0.015625℃(2^-6),范围:
-56~130℃
Vt1=(dt1*128+dt0)*kd-56,Vt2=(dt3*128+dt2)*kd-56,
命令0x16保留
从以上协议可知,每个通信数据都用1byte的16进制数表示,数据包中的地址(addRess)字段长度为1byte,当ht-1000(主机)向upsd3200(从机)发送数据时,数据包中的地址(addRess)字段中msb应为1,因为此时数据包要到达的地址是从机,从机的地址范围为:
0x80~0xFd,即:
msb=1。
主机(ht-1000)没有地址(也许理论上应该有),主从机通信过程是这样的:
主机不断发出4个字节的数据包(地址,命令,字节数,校验和)去查询从机的测量情况,其中字节数为0,则没有数据字节,只需4个字节就可构成一个数据包。
如下:
811600178816001e84160012871600118F160019
以上5个数据包就是主机发往从机的数据包,第一个字节是地址,共有5个地址,即发往5个从机,每发一个数据包,主机会等待从机的回应,然后再发下一个数据包,如果等待超时,则认为通信错误(ht-1000上会显示xx号罐通信错误)。
若有回应,则主机进行数据处理,在友好的人机界面上显示相关测量信息。
第二个字节16是命令字,16的具体含义可查询具体命令字信息。
第三个00代表数据位是零个,第四个字节是校验和。
(这里设计协议的原则是尽可能是通信的字节数变少,减少信息在传输过程中的丢失,当然也要考虑扩展性)
篇三:
rs485通信协议
Rs485主从式多机通讯协议
一、数据传输协议
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
1、数据在网络上转输
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则从设备不作任何回应。
协议建立了主设备查询的格式:
设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
如果在消息接收过程中发生一错误(无相应的功能码),或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
2、在对等类型网络上转输
在对等网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
在消息位,本协议仍提供了主—从原则,尽管网络通信方法是“对等”。
如果一控制器发送一消息,它只是作为主设备,并期望从设备得到回应。
同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。
3、查询—回应周期
(1)查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)回应
如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
二、传输方式
控制器能设置传输模式为Rs485串行传输,通信参数为9600,n,8,1。
在配置每个控制器的时候,在一个网络上的所有设备都必须选择相同的串口参数。
地址功能代码数据数量数据1…….数据ncRc字节
每个字节的位
·1个起始位
·8个数据位,最小的有效位先发送
·1个停止位
错误检测域
·cRc(循环冗余码校验)
三、消息帧
1.帧格式
传输设备将消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。
错误消息也能侦测到并能返回结果。
消息发送至少要以10ms时间的停顿间隔开始。
传输的第一个域是设备地址。
网络设备不断侦测网络总线,包括停顿间隔时间内。
当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。
在最后一个传输字符之后,一个至少10ms时间的停顿标定了消息的结束。
一个新的消息可在此停顿后开始。
整个消息帧必须作为一连续的流转输。
如果在帧完成之前有超过5ms时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。
同样地,如果一个新消息在小于5ms的时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。
这将导致一个错误,因为在最后的cRc域的值不可能是正确的。
一典型的消息帧如下所示:
起始间隔设备地址功能代码数据数量及数据cRc校验结束
2、地址域
消息帧的地址域包含一个字符8bit。
可能的从设备地址是0…247(十进制)。
单个设备的地址范围是1…247。
主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。
当从设备发送回应消息时,也把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。
地址0是用作广播地址,以使所有的从设备都能认识。
3、如何处理功能域
消息帧中的功能代码域包含了一个字符8bits。
可能的代码范围是十进制的1…255。
当然,有些代码是适用于所有控制器,有此是应用于某种控制器,还有些保留以备后用。
当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为。
例如去读取当前检测参量的值或开关状态,读从设备的诊断状态,允许调入、记录、校验在从设备中的程序等。
当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应)。
对正常回应,从设备仅回应相应的功能代码。
对异议回应,从设备返回一等同于正常代码的代码,但功能代码的最高位为逻辑1。
例如:
一从主设备发往从设备的消息要求读一组保持寄存器,将产生如下功能代码:
00000011(十六进制03h)
对正常回应,从设备仅回应同样的功能代码。
对异议回应,它返回:
10000011(十六进制83h)
除功能代码因异议错误作了修改外,从设备将一独特的代码放到回应消息的数据域中,这能告诉主设