水资源检测数据传输规约解析(SZY206-2016)

0.前言

最近项目中用到了单表数据远程上穿的需求,用的是《水资源检测数据传输规约——SZY206-2016》这个协议,研究了几天,里面很多都是针对数据的位做解析,经常对一个byte的8个位都做了不同的定义,感觉很有意思。本案例需要对照SZY206-2016协议来学习,网上到处都有下载的。

1.帧结构

协议主要分为如图所示几大部分,其中用户数据区域为用户自定义的一些数据,一般包含控制域和地址域,也有特殊情况,比如说在命令回复帧就不一定包含数据地址域,所以在针对CS校验时,针对整个用户数据区进行校验。
在这里插入图片描述
此协议包含控制指令,数据上传指令,时间指令,密码指令等众多指令,所以很难开发出一个可以兼容所有指令的类,本着可拓展的原则,这里定义了ICmd接口,数据解析业务由继承该接口的类进行具体实现。
在这里插入图片描述
现在主要的业务就是上传水质监测数据,暂时不涉及反控指令,也就实现了数据整体组帧SZY206Command,时间组帧TpCmd,WaterFactorCmd因子组帧,后续反控等其他业务有需要再实现。

2.CRC校验

以前也用过CRC校验,感觉CRC校验应该有一个统一的算法。经过这个项目发现,CRC校验也是有不同的算法实现的CRC8、CRC16、CRC32等不同校验长度,另外还有不同的校验算法。我这里的校验算法是x7+x6+x5+x2+1,也就是CRC8校验,转化为二进制为11100101,16进制为0xE5。校验算法再代码中已经给出。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CRC
{
    public class Crc8
    {
        private readonly byte[] table = new byte[256];

        public byte ComputeChecksum(byte[] bytes)
        {
            byte crc = 0;
            if (bytes != null && bytes.Length > 0)
            {
                foreach (byte b in bytes)
                {
                    crc = table[crc ^ b];
                }
            }
            return crc;
        }

        public Crc8(byte poly)
        {
            for (int i = 0; i < 256; ++i)
            {
                int temp = i;
                for (int j = 0; j < 8; ++j)
                {
                    if ((temp & 0x80) != 0)
                    {
                        temp = (temp << 1) ^ poly;
                    }
                    else
                    {
                        temp <<= 1;
                    }
                }
                table[i] = (byte)temp;
            }
        }
    }
}

3.标准帧解析示例

现在以一个水站数据传输帧进行解析,达到快速学习此协议目的。
发送:68 19 68 BA 0 62 39 E1 0 C0 80 0 0 0 0 0 0 0 0 0 0 0 0 17 41 11 12 0 92 16
接收:68 3 68 3A C0 0 A5 16
1.标志颜色的分别为控制域,B为1011,解析规则看下表,A为10,查表的为水质参数。
2.0 62 39 E1 0 为地址域,这里地址域按第二种方式解析,一般由对接平台直接给出。
3.C0 80 0 0 0 0 0 0 0 0 0 0 0 0 17 41 11 12 0为数据域,这里上传的为一个水温参数,第一位的C0为AFN码, 80 0 0 0 0为40个水质状态码,可以解析为40个bool量,后面分别为上传数据,机器状态码,时间码
4.后面92为校验码,16为结束符。
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
水资源szy206-2016通讯协议是一项规范和管理水资源的协议。该协议的目的是为了促进水资源的有效利用和保护环境,以确保水资源的可持续发展。 该协议主要包括以下内容: 1. 数据采集和监测:该协议规定了水资源数据的采集方法和监测标准。确保水资源数据的准确性和完整性,为水资源管理和决策提供可靠的数据支持。 2. 数据传输和存储:协议规定了水资源数据的传输方式和存储要求。通过使用统一的通信协议和数据格式,确保各种水资源监测设备之间能够进行有效的数据交流和共享,并提供合适的数据存储和备份手段。 3. 数据管理和分析:协议要求建立水资源数据管理系统,并提供数据处理和分析功能。通过对水资源数据进行统一管理和分析,能够更好地了解水资源状况,及时采取措施解决问题,提高水资源的利用效率和保护水环境。 4. 报警和应急处理:协议规定了水资源监测设备故障和异常报警的处理程序,以及水资源应急事件的报告和处置要求。通过及时发现和处理水资源问题,保障水资源的安全和可持续利用。 5. 法律和管理体制:协议要求各级政府和相关部门建立健全的水资源管理体制和法律法规,确保协议的实施。 水资源szy206-2016通讯协议的实施将有助于提高水资源的管理和利用效率,保护水环境,实现水资源可持续发展的目标。同时,通过数据采集和传输的标准化,也将促进水资源信息化和智能化的发展,并提供可靠的支持和保障。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值