首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 解析串口协议,该如何处理

2013-10-18 
C#解析串口协议开始“{” + 数据长度 + 数据内容 + 回应命令(1未通过,0为不通过) +校验位+结尾”}“请问如何解

C# 解析串口协议
开始“{” + 数据长度 + 数据内容 + 回应命令(1未通过,0为不通过) +校验位+结尾”}“

请问如何解析这条命令,要将回应命令取出来

拜托各位了!急求!!!!!!! c#?串口?协议解析
[解决办法]
能详细点么?
[解决办法]
一步一步的拆包,先拆{},再根据 数据长度,找到  回应命令(1未通过,0为不通过) 在字符串内的位置,如果需要校验的,先比对校验值。
[解决办法]
不好意写错了
应该是

 /// <summary>
        /// 
        /// </summary>
        /// <param name="bytes">整个协议的字节</param>
        /// <returns></returns>
        byte getBackCmd(byte[] bytes)
        {
            //假如‘}’占2个字节
            var endlnlen = 2;
            //假如结束检验位占2个字节
            var checkendlen = 2;
            //回应命令假如占1个字节
            var backcmdlen = 1;

            var ret = bytes.Skip(bytes.Length - 2 - 2 - 1).Take(1);
            return ret.FirstOrDefault();

        }
调用:

 var ret = getBackCmd();
            if (ret == 1)
            { }

            else
            { 
            
            }
[解决办法]
串口命令里还包含 "}" ???  神一样的协议.
[解决办法]
既然使用这个协议,为什么不使用 JSON 呢 ?
[解决办法]
1、你接收过来的数据长度是不是固定长度?如果是固定的,那你就把不是的舍弃
2、固定长度,开始“{”(一个字节) + 数据长度(两个个字节) + 数据内容(每次发送600个字节,最后后不满按实际发送)----这部分的长度是不是一定的?
3、如果上面长度是固定的,那是不是可以取回来的数据截取你想要的部分? 就是回应命令,我们做串口的数据采集,基本上返回命令长度是固定的,开头+结尾是固定的,你串口返回的数据,先判断头尾截取到正确的数据区域,再在正确的数据区域,截取你要的固定位置的数据就行了,比如是10-13位数,你明白了?

bytes.Skip(bytes.Length - 2 - 2 - 1).Take(1);
这样判断合适吗?

热点排行