485通讯协议标准.docx
- 文档编号:18554894
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:9
- 大小:19.80KB
485通讯协议标准.docx
《485通讯协议标准.docx》由会员分享,可在线阅读,更多相关《485通讯协议标准.docx(9页珍藏版)》请在冰点文库上搜索。
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协议。
其具体格式如下:
ADDRESS
COMMAND
ByteCount
DATA
CheckSUM
地址
命令
字节数
数据
校验和
1Byte
1Byte
=n,1Byte
nByte
1Byte
80~9F
01~2F
00~10
0~7F
0~7F
表中,数据的最大字节数为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。
同样,从机也有一个控制信号,称为SDTR。
当主机DTR无效(转换成TTL电平,MDTR为高电平)时,端口处于发送状态。
当DTR有效(MDTR为低电平)时,端口处于接收状态。
据此,可绘制出数据包传输的时序图如下:
在T1时刻,主机将MDTR置为高电平(DTR无效),准备发送数据。
T2时刻,主机发送“请求数据包”。
当数据包发送完成(T3时刻)后,随即要将MDTR变成低电平(T4时刻),释放总线,等待接收“应答数据包”。
在相应从机(液位计)接收到正确的“请求数据包”后,就开始准备“应答数据包”。
经延时,在T5时刻,从机将SDTR置为高电平,控制总线。
然后,在T6时刻发送数据包。
发送完成(T7时刻)后,随即将SDTR置为低电平,释放总线。
这样一次数据包通信就完成了。
对以上各时刻的时序要求可以描述为:
T2-T1=1.9~3.5ms,T3-T2=10~60ms,T4-T3=1~3.5ms,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.01mmDT3<>0,数据求反
Level2Zero=((DT6*128+DT5)*128+DT4)*0.01mmDT7<>0,数据求反
命令0x0F设置产品工作状态
请求数据:
1byteDT0=0,产品工作;DT0<>0,产品待机;
应答数据:
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.01mm
Level2=((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个字节就可构成一个数据包。
如下:
81160017
8816001E
84160012
87160011
8F160019
以上5个数据包就是主机发往从机的数据包,第一个字节是地址,共有5个地址,即发往5个从机,每发一个数据包,主机会等待从机的回应,然后再发下一个数据包,如果等待超时,则认为通信错误(HT-1000上会显示XX号罐通信错误)。
若有回应,则主机进行数据处理,在友好的人机界面上显示相关丈量信息。
第二个字节16是命令字,16的具体含义可查询具体命令字信息。
第三个00代表数据位是零个,第四个字节是校验和。
(这里设计协议的原则是尽可能是通信的字节数变少,减少信息在传输过程中的丢失,当然也要考虑扩展性)
一个回应的数据包如下:
881608697F057A3A02232743
共12个字节,再根据字段分一下:
881608697F057A3A02232743
第一个字节88是从机的地址,由于主机采取“发送---等待回应”方式来和从机通信,而且目前只有一个主机,因此,从机发送的数据包中的地址不必是主机地址(除非有多个主机,在理解协议数据包时,数据包中的地址字段应当是发往目的地的地址,但事实上从机回应数据包中的地址是自己的地址,不是目的地主机的地址),只需标明自身的地址即可,相当于“这里是XX号从机在回答---”。
第二个字节16是命令字。
第三个字节08暗示数据段有8个字节,接下来的8个字节是数据信息,前三个字节697F05是油位丈量值(69是数据的最低数值,7F是次低的数值,05是数据的高位数值),接着三个字节7A3A02是水位丈量值,数据信息最后两个字节2327是温度丈量值,最后一个字节43是校验和。
0x16是DGL协议里的一条命令,暗示取得探棒的油位,水位和温度。
在DGL协议里是这么定义的:
其中:
START:
起始字节,长度为1
COMM:
命令字节:
长度为1
NUM:
数据字节数
DATA:
数据,具体含义在每个命令中都有详细定义
P:
校验位
命令0x17读实时电路参数(保存)
请求数据:
1byte;0电子仓温度,1VCC电压,2工作状态
应答数据:
2byte
命令0x18~0x1F保存
命令0x20~0x2F对外保存,用于参数设置、产品测试、程序更新等功能。
5.弥补说明
上述关于DGL协议的规定可包管它和MODBUS协议的兼容性。
但不包管当这两种协议的设备挂接到同一总线上时,采取MODBUS协议的设备之间不会发生冲突。
也不包管和下列设备的兼容性:
其它协议的从机设备、除Modicon公司外标称为MODBUS的从机设备。
主机通信程序应依照DGL协议规定编写。
不包管本协议和其它主机设备或软件的兼容性。
DGL协议仅适用于使用RS485接口的数字式磁致伸缩液位计。
如作为其它用途,在借鉴或引用时,应充分考虑情况分歧所带来的风险因素。
DGL协议保存以下从机地址:
0x80,0xA0,0xC0,0xFE,0xFF。
在现场装置时应特别注意。
控制器发送给中继器的地址如81、82、等(或包含地址的任何命令),回的是16进制、每三个字节是一个数据,分别是油、水、温度(是华氏)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 485 通讯 协议 标准