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为结束符。

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

  1. IEC104协议规约解析

    [转载自]<IEC104协议规约解析> 一.四遥信息体基地址范围 104调度规约有1997年和2002年两个版本,在流程上没有什么变化,02版只是在97版上扩展了遥测.遥信等信息体基体址, ...

  2. yolo 负样本_SSD——样本正负比控制+多尺度检测 (目标检测)(one-stage)(深度学习)(ECCV 2016)...

    SSD--样本正负比控制+多尺度检测 (目标检测)(one-stage)(深度学习)(ECCV 2016) 发布时间:2018-11-23 20:57, 浏览次数:1399 , 标签: SSD one ...

  3. 电力信息采集的通用型通信规约解析系统研究与设计

    电力信息采集的通用型通信规约解析系统研究与设计 蒋湘涛 http://xueshu.baidu.com/s?wd=paperuri%3A%28a61890f7723743df132caf246fd0a ...

  4. 时标CP56Time2a 时间格式转换 电网101、104规约解析(Java)

    电网101.104规约解析(Java) https://blog.csdn.net/ZhangYu971014/article/details/79841555?utm_medium=distribu ...

  5. 构建系统安全防线!Genmai安全漏洞检测框架全面解析

    01 Genmai是什么? Genmai是由openkylin社区SecurityGovernance SIG为了挖掘.检测.验证麒麟产品的安全漏洞而主导开发的一款开源主机漏洞扫描.网络漏洞扫描以及基 ...

  6. SL651-2014水文检测数据通信规约pdf下载

    前段时间用java写了个水利项目,通讯模式是485RTU的方式通信,通过tcp接入模块,设置心跳包定时上传数据,最难的还是数据翻译这块,以及多设备时的线程处理,里面的数据都是基于SL651-2014水 ...

  7. 水文监测场景的数据通信规约解析和落地实践

    [小 迪 导 读]:江苏云上需要通过云平台接入水文设备来实现水文数据的采集.存储.显示.控制.报警及传输等综合功能. 企业介绍 江苏云上智联物联科技有限公司是专业从事物联网相关产品与解决方案服务的高科 ...

  8. 对于来自范兵提供光电检测带模块解析

    ▌01 光电检测带 1.计时光电检测板 今天收到来自于 逐飞 发送过来的基于光电检测的车模通过检测传感器.这个传感器应用在 2020年第九届四川省大学生智能汽车竞赛 中,很好的服务于比赛现场的队伍. ...

  9. Snort规则检测引擎--架构解析

    1. 规则头和规则选项 snort将所有已知的攻击以规则的形式放在规则库中,规则库中的每条规则条目分为两个部分:规则头(RuleHeader)和规则选项(RuleOption). 规则头包括:规则行为 ...

最新文章

  1. 从Transformer到BERT模型
  2. Python 笔试集(4):True + True == ?
  3. Java学习之do---while语句
  4. PHP中session的工作原理
  5. 第26讲:模拟登录爬取实战案例
  6. [转]自定义序列化对象
  7. centos配置ssh免密码登录后仍要输入密码的解决方法
  8. linux下的单机工具,Linux下单机模式的Hadoop部署
  9. 命令行下Apache日志统计举例
  10. 工作中你都遇到哪些不要脸的同事?
  11. android程序设计排序方法,Android编程实现对文件夹里文件排序的方法
  12. 自学三个月编写简单走迷宫游戏
  13. 视频录制——SurfaceView + MediaRecorder 实现视频录制功能
  14. gwt php,java – 启动GWT项目的PHP程序员的任何好技巧?
  15. WIN7常用使用设置
  16. 从集显到核显!Intel的显卡技术发展史
  17. 转载,gini系数代码对应的公式
  18. 依赖背包dp NOIP2006 vijos 1313 金明的预算方案
  19. C++ 安妮的宠物小屋 练习
  20. 科技热点周刊|马斯克套现 440 亿;苹果推出数字身份证;Meta 与微软合作;华为捐赠欧拉

热门文章

  1. 主流神经网络(3)——径向基神经网络
  2. Vega Protocol:L1 + L2 的混合去中心化衍生品交易所
  3. HTML语言和CSS开发商业站点 错题
  4. 有关IAP使用HEX或BIN文件格式的探讨
  5. Phylip进化树的使用,偏重于文件格式的获取
  6. 解决 java.time.format.DateTimeParseException:Text ‘XXX‘ could not be parsed
  7. windows端口被占用解决方法
  8. 通过winscp软件实现windows与linux目录数据同步
  9. ios快捷指令进行钉钉打卡
  10. 常用坐标系及投影:WGS84\GCJ02\CGCS2000\BD09\Pseudo-Mercator\UTM\BD09MC