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