2024年1月3日发(作者:凯美瑞轿车价格)
编号: ____________
密级: 内部
页数: ___________
基于RS485接口的DGL通信协议(修改)
编写: _________________________
校对: _________________________
审核: _________________________
批准: ________________________
北京华美特科贸有限公司
二OO二年十二月六日
1. 前言
在常见的数字式磁致伸缩液位计中,多采用 RS485通信方式。但 RS485标准仅对物理层接口
RS485的基础上,派生出很多不同的协议,
并且,RS485允许单总线多机通信, 如
如果在一条总线上挂接不同类型的产
已在工业领域得
进行了明确定义,并没有制定通信协议标准。因此,在
不同公司均可根据自身需要设计符合实际情况的通信协议。
果通信协议设计不好,就会造成相互干扰和总线闭锁等现象。
品,由于协议不一样,很容易造成误触发,造成总线阻塞,使得不同产品对总线的兼容性很差。
随着RS485的发展,Modicon公司提出的MODBUS协议逐步得到广泛认可,
到广泛应用。而 MODBUS的协议规范比较烦琐,并且每字节数据仅用低
信息量相同时,对总线占用时间较长。
DGL协议是根据以上问题提出的一种通信协议。在制定该协议时已充分考虑以下几点要求:
a.
b.
c.
d.
兼容于MODBUS 。也就是说,符合该协议的从机均可挂接到同一总线上。
要适应大数据量的通信。如:满足产品在线程序更新的需要
数据传输需稳定可靠。对不确定因素应加入必要的冗错措施。
降低总线的占用率,保证数据传输的通畅。
4位(范围:0~15),在
(未来功能)。
2. 协议描述
为了兼容其它协议,现做以下定义:
通信数据均用1字节的16进制数表示。从机的地址范围为:
命令和数据的数值范围均应控制在
0x80?OxFD,即:MSB=1 ;
0~0x7F之间。即:MSB=0,以区另【J地址和其它数据。
液位计的编码地址为:0x82~0x9F。其初始地址(出厂默认值)为:0x81。
罐旁表的编织地址为:0xA2~0xBF。其初始地址(出厂默认值)为:0xA1。
其它地址用于连接其它类型的设备,也可用于液位计、罐区表地址不够时的扩充。
液位计的命令范围为:0x01~0x2F,共47条,将分别用于参数设定、实时测量、诊断测
试、在线编程等。
通信的基本参数为:4800波特率,1个起始位,1个结束位。字节校验为 奇校验。 本协议的数据包是参照 MODBUS RTU通信格式编写,并对其进行了部分修改,以提高数据 传输的速度。另外,还部分参照了
ADDRESS
HART协议。其具体格式如下:
COMMAND Byte Count DATA Check SUM
地址
1 Byte
80~9F
表中,数据的最大字节数为
命令
1 Byte
01~2F
字节数
=n, 1 Byte
00~10
数据
n Byte
0~7F
校验和
1 Byte
0~7F
20个字节。
MSB位清零,使其满足 0~7F
16个。也就是说,整个数据包最长为
“校验和”是其前面所有数据异或得到的数值,然后将该数值
的要求。在验证接收数据包的“校验和”是否正确时,可将所有接收数据
本协议不支持MODBUS中所规定的广播模式。
(包括“校验和”)进行异
或操作,得到的数据应= 0x80。这是因为,只有“地址”的 MSB=1,所以异或结果的 MSB也必 然等于1。
3. 时序安排
在上电后,液位计将先延迟
接着产品进入待机状态并打开
10秒,等待电源稳定。然后,用5秒的时间进行自检和测试数据。
20 RS485通信接口,等待主机的请求。因此,主机应在液位计上电
秒后,再将液位计置为工作状态,进行测量操作。
液位控制器(HMT-900或H-1000 )主要用于液位计的供电和防爆安全隔离。主机可通过
是可以通过主机软件控制的。
在现场应用中,主机软件的工作时序一般应遵循以下几个步骤。
1) 在开主机前,并认真检查各相关设备的电源和电缆连接情况。
2) 在启动主机软件时,打开相应串行端口。使能
3) 软件初始化操作,延迟 20秒。
4) 读液位计的相应参数,然后将液位计置为工作状态。
5) 此时,主机可进入正常的轮训、记录、显示、报警等工作。
主机软件的主要工作是通过 RS485总线和各个液位计进行 DGL格式的数据包通信。因此,通 信时序安排的好坏显得很重要。在本协议中, 主机只能有1个,并完全控制总线,任何从机在没有
主机请求时,必需保持接收状态。 在设计从机电路时, 应保证从机在上电时不能出现对总线的占用 (发送状态),哪怕是很短的时间。以免增加系统功耗,影响其“本质安全”性能。
虽然主机控制着总线, 但在总线空闲状态, 主机也应处于接收状态。 只有在向指定的从机发送 请求数据包时,才进入发送状态。主机的发送接收状态切换由其串口的
MDTR。同样,从机也有一个控制信号,称为
制出数据包传输的时序图如下:
MDTR
RTS
信号控制(HMT-900或H-1000)供给液位计的电源。当 RTS有效时,电源将被打开。因此,液位 计的电源RTS信号,给液位计上电。
DTR信号控制,可称为
SDTR。当主机 DTR无效(转换成TTL电平,MDTR
为高电平)时,端口处于发送状态。当 DTR有效(MDTR为低电平)时,端口处于接收状态。据此, 可绘请求数据包
SDTR
---------------------------------- 应答数据包 -----------
时刻: T1 T2 T3 T4 T5 T6 T7 T8
在T1时刻,主机将 MDTR置为高电平(DTR无效),准备发送数据。T2时刻,主机发送“请 求数据包”。当数据包发送完成(T3时刻)后,随即要将MDTR变为低电平(T4时刻),释放总线,等 待接收“应答数据包”。
在相应从机(液位计)接收到正确的“请求数据包”后,就开始准备“应答数据包”
在T5时刻,从机将 SDTR置为高电平,控制总线。然后,在
对以上各时刻的时序要求可以描述为:
160ms以内。两次数据包通信的间隔应》
通信错误和故障,进行冗错设计。
4. 命令定义
命令0x01 通信协议识别码
。经延时,
T6时刻发送数据包。发送完成(T7
T2-T1=1.9~3.5ms, T3-T2=10~60ms, T4-T3=1~3.5ms,
20ms。
并根据可能出现的各种
时刻)后,随即将SDTR置为低电平,释放总线。这样一次数据包通信就完成了。
T5-T3=8~18ms, T6-T5=1.9~3.5ms, T7-T6=10~60ms, T8-T7=1~3.5ms 。一次通信的最长时间将控制在
根据以上描述和规定,我们就可以精确地进行主机和从机的通信控制。
请求数据:Obyte
应答数据: 3byte 字符串“ DGL ” 44,47,4C
命令 0x02 地址更改
请求数据: 1byte NewAdr-0x80
应答数据: 1byte NewAdr-0x80
注:应答数据中仍保留为原来地址不变
命令 0x03, 0x4 保留
命令 0x05 读厂家名 请求数据: 0byte 应答数据: 10byte 字符串“ ALMRT Ltd. ”
命令 0x06 读产品类型 请求数据: 0byte 无 应答数据: 8byte DT0~7
浮子数 温度测点 外管类型 测杆材料 安装形式 防爆类型 x x
命令 0x07 读产品杆长 请求数据: 0byte 无 应答数据: 2byte DT0 ,DT1
基数:2mm,范围:w
20m, GL= (DT1*128+DT0)*2mm
命令 0x08 读温度测点位置 请求数据: 0byte 应答数据: 5byte DT0~4
对应于 VT1~5 位置相对杆长的百分数( 0~99)
命令 0x09 读产品序列号 请求数据: 0byte 无
应答数据: 4byte 具体待定,存于 MCU EEPROM 中。
命令 0x0A 读电路和程序的版本号 请求数据: 0byte
应答数据: 2byte DT0 电路版本 , DT1 程序版本
命令 0x0B 读零点校准参数数据 请求数据: 0byte 应答数据: 8byte DT0~7
Level1Zero=((DT2*128+DT1)*128+DT0)*0.01mm
Level2Zero=((DT6*128+DT5)*128+DT4)*0.01mm
DT3<>0, 数据求反
DT7<>0, 数据求反
命令 0x0F 设置产品工作状态
请求数据:
应答数
据:
1byte DT0=0 ,产品工作; DT0<>0 ,产品待机;
1byte 和请求数据相同。
命令 0x10 读液位 1( Level1 ,油面)数据
请求数0byte
应答数据:据:
3byte DT0, DT1, DT2
分辨率:0.01m m,范围: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
应答数据: 3byte DT0, DT1, DT2
Level2=((DT2*128+DT1)*128+DT0)*0.01mm
命令 0x12 读两个液位数据
请求数据: 0byte 应答数据: 6byte DT0, 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
应答数据: 10byte DT0?9
分辨率(刻度):KD=0.015625
°C
(2A-6), 范围:-56?130
C
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,即:
0,则
MSB=1。主机(HT-1000)没有地址(也许理论上应该有),主从机通信过程是这样的:主机不断发出 4 个字节的数据包(地址,命令,字节数,校验和)去查询从机的测量情况,其中字节数为
没有数据字节,只需 4 个字节就可构成一个数据包。如下:
81 16 00 17
88 16 00 1E
84 16 00 12
87 16 00 11
8F 16 00 19
以上 5 个数据包就是主机发往从机的数据包,第一个字节是地址,共有 5 个地址,即发往 5
个从机,每发一个数据包,主机会等待从机的回应,然后再发下一个数据包,如果等待超时,则认 为通信错误( HT-1000 上会显示 XX 号罐通信错误) 。若有回应,则主机进行数据处理,在友好的 人机界面上显示相关测量信息。第二个字节 16 是命令字, 16 的具体含义可查询具体命令字信息。 第三个 00代表数据位是零个,
第四个字节是校验和。 (这里设计协议的原则是尽可能是通信的字节 数变少,减少信息在传输过程中的丢失,当然也要考虑扩展性)
一个回应的数据包如下:
88 16 08 69 7F 05 7A 3A 02 23 27 43
共 12 个字节,再根据字段分一下:
88 16 08 69 7F 05 7A 3A 02 23 27 43
第一个字节 88 是从机的地址,由于主机采用“发送 ---等待回应”方式来和从机通信,并且目 前只有一个主机, 因此, 从机发送的数据包中的地址不必是主机地址 (除非有多个主机, 在理解协 议数据包时,
数据包中的地址字段应当是发往目的地的地址, 但事实上从机回应数据包中的地址是 本身的地址,不是目的地主机的地址) ,只需标明自身的地址即可,相当于“这里是 XX 号从机在 回答--- ”。第二个字节 16 是命令字。第三个字节 08表示数据段有 8个字节,接下来的 8个字节是 数据信息,前三个字节 69 7F 05是油位测量值(69是数据的最低数值,7F是次低的数值,05是数 据的高位数值 ),接着三个字节 7A 3A 02
是水位测量值,数据信息最后两个字节 23 27 是温度测量 值,最后一个字节 43 是校验和。
0x16 是 DGL 协议里的一条命令,表示取得探棒的油位,水位和温度
在 DGL 协议里是这么定义的:
其中:
START :起始字节,长度为1
COMM :命令字节:长度为 1
NUM :数据字节数
DATA :数据,具体含义在每个命令中都有详细定义
P:校验位
命令 0x17 读实时电路参数
请求数据:
1byte ; 0
应答数据:
2byte
(保留 ) 电子仓温度,
1 VCC 电压, 2 工作状态
命令 0x18~0x1F 保留
对外保命令 0x20~0x2F
留,
用于参数设置、
产品测试、程序更新等功能。
5. 补充说明
上述关于 DGL 协议的规定可保证它和 MODBUS 协议的兼容性。但不保证当这两种协议的设 备挂接到同一总线上时, 采用 MODBUS 协议的设备之间不会发生冲突。 也不保证和下列设备的兼 容性:其它协议的从机设备、除 Modicon 公司外标称为 MODBUS 的从机设备。
主机通信程序应按照 DGL 协议规定编写。不保证本协议和其它主机设备或软件的兼容性。
DGL 协议仅适用于使用 RS485 接口的数字式磁致伸缩液位计。如作为其它用途,在借鉴或引 用时,应充分考虑情况不同所带来的风险因素。
DGL 协议保留以下从机地址: 0x80, 0xA0, 0xC0, 0xFE, 0xFF 。在现场安装时应特别注意。 控制器发送给中继器的地址如 81、82、等(或包括地址的任何命令) ,回的是 16 进制、每三个字 节是一个数据,分别是油、水、温度(是华氏)
更多推荐
数据,地址,数据包,协议,总线
发布评论