Exemplo n.º 1
0
        public bool IsAll()
        {
            if (!DataStrList.Any())
            {
                return(false);
            }

            var len  = DataStrList.Count();
            var body = DataStrList.Take(len - 2);
            var crc  = CrcHelper.GetCrc16(body).ToArray();

            return(crc.Length == 2 && crc[1] == DataStrList.ElementAt(len - 1) && crc[0] == DataStrList.ElementAt(len - 2));
        }
Exemplo n.º 2
0
        private string Deserialize()
        {
            try
            {
                var datas = DataStrList.ToArray();
                //包头 F3
                //功能码 02
                //字节数 4bytes
                //唯一识别码   4bytes
                if (datas.Length == 0 || datas[0] != "f3" || datas[1] != "02")
                {
                    return(DataStrList.Join(","));
                }

                var trueData = datas.Skip(10);
                if (!trueData.Any())
                {
                    return(DataStrList.Join(","));
                }
                //变量数据
                //变量1(4bytes)
                //变量2
                //…
                //变量N
                DeviceData = new DeviceData();
                var i = 0;
                for (i = 0; i < ValNum; i++)
                {
                    var str = trueData.Skip(i * 4).Take(4).Reverse().Join("");
                    var v   = Convert.ToInt32(str, 16);
                    DeviceData.vals.Add(v);
                }
                //I口数据
                //I1~I8(1bytes)
                //I9~I17
                //…
                //IN~I(N + 8)
                trueData = trueData.Skip(i * 4);
                for (i = 0; i < trueData.Count(); i++)
                {
                    if (DeviceData.ins.Count >= InNum)
                    {
                        break;
                    }
                    var str = trueData.Skip(i).Take(1).Join("");
                    var v   = Convert.ToInt32(str, 16);
                    for (var j = 0; j < 8; j++)
                    {
                        if (DeviceData.ins.Count >= InNum)
                        {
                            break;
                        }
                        var temp1 = (byte)((v & 0xff) << (7 - j));
                        var temp2 = (byte)((temp1 >> 7) & 0x01);
                        DeviceData.ins.Add(temp2);
                    }
                }
                //O口数据
                //O1~O8(1bytes)
                //O9~O17
                //…
                //ON~O(N + 8)
                trueData = trueData.Skip(i);
                for (i = 0; i < trueData.Count(); i++)
                {
                    if (DeviceData.outs.Count >= OutNum)
                    {
                        break;
                    }
                    var str = trueData.Skip(i).Take(1).Join("");
                    var v   = Convert.ToInt32(str, 16);
                    for (var j = 0; j < 8; j++)
                    {
                        if (DeviceData.outs.Count >= OutNum)
                        {
                            break;
                        }
                        var temp1 = (byte)((v & 0xff) << (7 - j));
                        var temp2 = (byte)((temp1 >> 7) & 0x01);
                        DeviceData.outs.Add(temp2);
                    }
                }
                //CRC校验   2bytes

                //trueData = trueData.Skip(i);
                //var crc = CrcHelper.GetCrc16(datas.Take(datas.Length - 2));
                return(DeviceData.ToJSON());
            }
            catch (Exception e)
            {
                return("解析错误" + DataStrList.Join(","));
            }
        }