使用 C# 实现 CJ-T188 水表协议和 DL-T645 电表协议的解析与编码

本文介绍了如何使用 C# 编程实现 CJ/T188 水表和 DL/T645 电表通信协议的解析和编码,包括协议定义、数据帧结构、前导字节的处理,以及工具类的编码功能如累加和计算、BCD 数据转换。同时,文章提供了协议实现的代码示例和下载链接。
摘要由CSDN通过智能技术生成

一、协议的定义

要对某种协议进行编解码操作,就必须知道协议的基本定义,首先我们来看一下 CJ/T188 的数据帧定义(协议定义),了解请求数据与响应数据的基本结构。

1.1 CJ/T188 水表通讯协议

请求帧:

字节 描述
0 0x68 数据帧开始标识。
1 T 表计类型代码,详细信息请参考 表计类型表
2-8 A0-A6 表计地址,水表设备的具体地址,这里是 BCD 形式。
9 CTR_01 协议控制码,例如 0x1 就是读表数据。
10 0x3 数据域长度。
11-12 0x1F,0x90 数据标识 DI0-DI1。
13 0x00 序列号,一般为 0x00,序列号也被作为整个数据域的长度。
14 CS 表示校验和数据,即 0-13 位置的所有字节的累加和。
15 0x16 数据帧的结束标识。

例如有以下请求帧数据(读取水表数据):

68 10 01 00 00 05 08 00 00 01 03 1F 90 00 39 16

对应的解释如下。

顺序 0 1 2-8 9 10 11-12 13 14 15
说明 帧头 类型 地址 CTR_0 长度 数据标识 序列号 校验和 帧尾
实例 68 10 01 00 00 05 08 00 00 01 03 1F 90 00 39 16

表计类型表:

含义
10 冷水水表
11 生活热水水表
12 直饮水水表
13 中水水表
20 热量表 (记热量)
21 热量表 (记冷量)
30 燃气表
40 电度表

响应帧(读表操作):

字节 描述
0 0x68 数据帧开始标识。
1 T 表计类型代码,详细信息请参考 表计类型表
2-8 A0-A6 表计地址,水表设备的具体地址,这里是 BCD 形式。
9 CTR_1 协议控制码,在返回帧含义即是请求帧的控制码加上 0x80。
10 L 数据域长度。
11-12 0x1F,0x90 数据标识 DI0-DI1。
13 0x00 序列号,一般为 0x00。
14-17 ALL DATA 累计用量,以 BCD 形式进行存储。
18 单位 计量单位,具体含义可以参考 计量单位表
19-22 MONTH DATA 本月用量,以 BCD 形式进行存储。
23 单位 计量单位,具体含义可以参考 计量单位表
24-30 时间 表示实际时间,以 BCD 形式存储,格式为 ss mm HH dd MM yy yy。
31 状态 1 状态字段。
32 状态 2 保留字节,一般置为 0xFF。
33 CS 表示校验和数据,即 0-32 位置的所有字节的累加和。
34 0x16 数据帧的结束标识。

例如有以下响应帧数据:

68 10 44 33 22 11 00
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值