当前位置: 代码迷 >> C# >> 关于一个串口数据校验的有关问题
  详细解决方案

关于一个串口数据校验的有关问题

热度:66   发布时间:2016-05-05 04:07:22.0
关于一个串口数据校验的问题
不太清楚关于这个类型问题放这个版块是否恰当,平时使用C#开发,就先放这里了。
在写一个将本地时间投到led屏幕上的程序,因为led本身投屏软件完全找不到供应商联系人以及厂家了,而现在又需要一个自动投屏功能。我尝试用串口工具将年月日时分秒数据依次替换并进行比较,能得到以下结论:
55 AA C5 10 00 09 00 00 00 0F 00 13 00 01 00 01 00 DF 07 90 75
 命令头               秒       分      时       日      月      星期    年       ???
如上面这句,是在2014年1月13日15:00:09秒截取的,还有
55 AA C5 10 00 08 00 00 00 0F 00 13 00 01 00 01 00 DF 07 F1 0E
是在2014年1月13日15:00:08秒截取的。其他还有:
55 AA C5 10 00 2E 00 02 00 0F 00 13 00 01 00 01 00 DF 07 B3 9E
问题是,最后两位我估计是校验位,通常两位可能是CRC16校验,但是用一般的多项式A001进行计算,并不符合校验结果
于是我就迷茫了,我尝试替换多项式,从0001替换到FFFF,还是不对。
难道我的思路有问题,想询问下还有其他思路没有。
最后年的字段那个DF 07我也不能完全理解,2012年是DC 07,2013年是DD 07,2001年是D1 07,07我猜测是命令结束标示。
不太可能参与最后校验。


------解决思路----------------------
不用猜了,
DF 07 是2015
DD 07 是2013
D1 07 是2001 
他是把int16转换成字节的结果

你转换回来这样


byte[] buffer = new byte[] { 0xDF, 0x07};  
//byte[] buffer = new byte[] { 0xDD, 0x07};  把上面的文本变成这样的值就可以了。

short s = BitConverter.ToInt16(buffer, 0);


后面两位是校检位吧
  相关解决方案