/// <summary>
        /// 心跳
        /// </summary>
        /// <param name="b"></param>
        /// <param name="bCount"></param>
        /// <param name="client"></param>
        /// <param name="df"></param>
        /// <returns></returns>
        public static byte[] OnResolveHeabert(byte[] b, int bCount, TcpSocketClient client)
        {
            if (bCount != 0x1A)
            {
                return(null);
            }
            gdust_Heartbeat data = new gdust_Heartbeat();
            string          tStr = ConvertData.ToHexString(b, 0, 2);//获取帧头

            if (tStr != "7A7A")
            {
                return(null);
            }
            byte[] t = new byte[8];
            for (int i = 8, j = 0; i < 16; i++, j++)
            {
                t[j] = b[i];
            }
            data.sn = Encoding.ASCII.GetString(t);
            tStr    = ConvertData.ToHexString(b, 16, 6);//获取时间
            DateTime getdate = DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
            DateTime now     = System.DateTime.Now;
            double   compare = (now - getdate).TotalMinutes;

            byte[] bytes = new byte[19];
            if (compare > 1 || compare < 0)  //需要
            {
                bytes = new byte[19];
                //数据长度
                bytes[6] = 0x07;
                bytes[7] = 0x00;
                //////////时间校准标示////
                bytes[8] = 0x01;
                //时间
                bytes[9]  = byte.Parse(now.Year.ToString().Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
                bytes[10] = byte.Parse(now.Month.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[11] = byte.Parse(now.Day.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[12] = byte.Parse(now.Hour.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[13] = byte.Parse(now.Minute.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[14] = byte.Parse(now.Second.ToString(), System.Globalization.NumberStyles.HexNumber);
                //校验和
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(bytes, 8, 7));
                bytes[15] = crc16[0];//0x00;//算校验和
                bytes[16] = crc16[1];
                //结束
                bytes[17] = 0x7B;
                bytes[18] = 0x7B;
                data.Rtc  = now.ToString("yyyy-MM-dd HH:mm:ss");
            }
            else   //不需要
            {
                bytes = new byte[13];

                //长度 //7A7A0100000001000000007B7B
                bytes[6] = 0x01;
                bytes[7] = 0x00;
                //数据区
                bytes[8] = 0x00;
                //校验和
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(bytes, 8, 1));
                bytes[9]  = crc16[0];//0x00;//算校验和
                bytes[10] = crc16[1];
                //结束
                bytes[11] = 0x7B;
                bytes[12] = 0x7B;
                data.Rtc  = DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture).ToString("yyyy-MM-dd HH:mm:ss");
            }

            bytes[0] = 0x7A;
            bytes[1] = 0x7A;
            //协议版本
            bytes[2] = 0x01;
            bytes[3] = 0x00;
            bytes[4] = 0x04;
            //命令字
            bytes[5] = 0x00;
            //包装

            //更新在线时间
            Dust_noise_operation.Update_equminet_last_online_time(data.sn, DPC.DPC_Tool.GetTimeStamp(DateTime.Now));
            return(bytes);
        }
        //实时数据
        //0000005E0000000200000000CFCDDE09595329CE000D94900000177000001996000000000050000002A300000D5C000001570000002000000000000000000000000000016697000000000000000000000000000000000000000000000000
        private static byte[] OnResolveRealData(byte[] b, int c)
        {
            //设备一分钟传输一次数据,如果一分钟之内有可能是重复数据
            try
            {
                // int Total_Length = int.Parse(ConvertData.ToHexString(b, 0, 4)); //4	Unsigned Integer消息总长度(含消息头及消息体)
                Zhgd_iot_dust_noise_current data = new Zhgd_iot_dust_noise_current();
                short Command_Id = short.Parse(ConvertData.ToHexString(b, 4, 4));//4	Unsigned Short命令或响应类型0x0802; //(监控数据)7
                // data.Sequence_Id = ConvertDataInt32(ConvertData.ToHexString(b, 8, 4));//4	Unsigned Integer消息流水号(保留未启用)
                //int sss = ConvertDataInt32(ConvertData.ToHexString(b, 12, 4));//4Unsigned Integer设备编号
                data.sn        = ConvertDataUInt32(ConvertData.ToHexString(b, 12, 4)).ToString(); //4Unsigned Integer设备编号
                data.timestamp = ConvertDataInt32(ConvertData.ToHexString(b, 16, 4));             //4Unisgned时间戳(unixtime)
                data.timestamp = data.timestamp * 1000;
                // data.Data_type = short.Parse(ConvertData.ToHexString(b, 18, 4));//4	Unsigned Short数据类型类型

                //data.SPM = ((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 20, 4))) / (Decimal)10000;//4	Unsigned Integer粉尘数据(需要除10000)
                data.tsp   = (double)(((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 20, 4))) / (Decimal)10000) / 1000; //4	Unsigned Integer粉尘数据(需要除10000) 歌瑞丽单位ug/m3  所以还得除以1000
                data.pm2_5 = (double)((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 24, 4)) / (Decimal)100);            //4	Unsigned IntegerPM2.5
                data.pm10  = (double)((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 28, 4)) / (Decimal)100);            //4	Unsigned IntegerPM10

                // data.TYPE = Convert.ToInt16(("0x" + ConvertData.ToHexString(b, 32, 2)), 16);//2	UnsignedShort0:SPM有效
                //1:PM2.5有效
                //2:PM10 有效
                //3:3个都有效
                //data.windDirection = (Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 34, 4)) / (Decimal)100;//4	Unsigned Integer风向角度0,后台显示正北
                //data.windSpeed = (Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 38, 4)) / (Decimal)10;	//4	Unsigned Integer风速为0,后台显示0m/S


                //风速和风向先调整一下
                data.wind_direction = (double)((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 38, 4)) / (Decimal)10);  //4	现在是风角度
                data.wind_speed     = (double)((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 34, 4)) / (Decimal)100); //4	现在是风速 2016/10/31号更改成除以100
                // data.windSpeed = (Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 34, 4)) / (Decimal)10;	//4	现在是风速

                data.temperature = (double)((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 42, 4)) / (Decimal)100); //4	Unsigned Integer温度数据(2661 表示 26.61度)
                data.humidity    = (double)((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 46, 4)) / (Decimal)10);  //4	Unsigned Integer湿度数据(7661 表示76.61)
                data.noise       = (double)((Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 50, 4)) / (Decimal)10);  //4	Unsigned Integer噪音等效值(763噪音值为76.3)
                //  data.maxNoise = (Decimal)ConvertDataInt32(ConvertData.ToHexString(b, 54, 4)) / (Decimal)10;//4	Unsigned Integer噪音峰值(927噪音峰值为92.7)

                #region 创塔的协议
                //data.GPS_Y = HexToDouble(ConvertData.ToHexString(b, 58, 8));//8	DoubleGPS经度
                //data.GPS_X = HexToDouble(ConvertData.ToHexString(b, 66, 8));//8	DoubleGPS纬度
                //data.Pressure = HexToFloat(ConvertData.ToHexString(b, 74, 4));//78Float大气压值
                //data.Remark = ConvertData.ToHexString(b, 152, 16);//16UnsignedChar保留字段(16BYTE)
                #endregion
                #region 格瑞利等其它
                //data.GPS_Y = (double)ConvertDataInt32(ConvertData.ToHexString(b, 58, 4)) / 1000000d;//8	DoubleGPS经度
                //data.GPS_X = (double)ConvertDataInt32(ConvertData.ToHexString(b, 62, 4)) / 1000000d;//8	DoubleGPS纬度
                //data.Pressure = (float)ConvertDataInt32(ConvertData.ToHexString(b, 66, 4));//78Float大气压值
                //data.Remark = ConvertData.ToHexString(b, 152, 16);//16UnsignedChar保留字段(16BYTE)
                #endregion


                byte[] replayrb = new byte[12];
                replayrb[0] = 0;
                replayrb[1] = 0;
                replayrb[2] = 0;
                replayrb[3] = 12;
                replayrb[4] = 0x80;
                replayrb[5] = 0x20;
                replayrb[6] = 0;
                replayrb[7] = 0;
                replayrb[8] = 0;
                replayrb[9] = 0;
                //byte[] replayrb = new byte[10];
                //replayrb[0] = b[0];//长度怎么这样赋值呢??????????
                //replayrb[1] = b[1];
                //replayrb[2] = b[2];
                //replayrb[3] = b[3];
                //replayrb[4] = 0x80;
                //replayrb[5] = 0x20;
                //replayrb[6] = b[6];
                //replayrb[7] = b[7];
                //replayrb[8] = b[8];
                //replayrb[9] = b[9];


                Dust_noise_operation.Send_dust_noise_Current(data);

                return(replayrb);
            }
            catch (Exception ex)
            {
                ToolAPI.XMLOperation.WriteLogXmlNoTail(System.Windows.Forms.Application.StartupPath + @"\CT", "创塔设备实时数据解析异常:", ex.Message);
                return(null);
            }
        }
        /// <summary>
        /// 实时数据
        /// </summary>
        /// <param name="b"></param>
        /// <param name="bCount"></param>
        /// <param name="client"></param>
        /// <param name="df"></param>
        public static void OnResolveCurrent(byte[] b, int bCount, TcpSocketClient client)
        {
            string tStr = ConvertData.ToHexString(b, 0, 2);

            if (tStr != "7A7A")
            {
                return;
            }
            Zhgd_iot_dust_noise_current current = new  Zhgd_iot_dust_noise_current();

            byte[] t = new byte[8];
            for (int i = 8, j = 0; i < 16; i++, j++)
            {
                t[j] = b[i];
            }
            current.sn = Encoding.ASCII.GetString(t);
            tStr       = ConvertData.ToHexString(b, 16, 6);
            try
            {
                current.timestamp = DPC_Tool.GetTimeStamp(DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture));
            }
            catch
            {
                current.timestamp = DPC_Tool.GetTimeStamp(DateTime.Now);
            }
            UShortValue s = new UShortValue();

            s.bValue1 = b[22];
            s.bValue2 = b[23];
            if (s.sValue.ToString() == "0")
            {
                current.pm2_5 = 5;
            }
            else
            {
                current.pm2_5 = s.sValue;
            }
            s.bValue1 = b[24];
            s.bValue2 = b[25];
            if (s.sValue.ToString() == "0")
            {
                current.pm10 = 5;
            }
            else
            {
                current.pm10 = s.sValue;
            }
            s.bValue1              = b[26];
            s.bValue2              = b[27];
            current.noise          = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[28];
            s.bValue2              = b[29];
            current.temperature    = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[30];
            s.bValue2              = b[31];
            current.humidity       = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[32];
            s.bValue2              = b[33];
            current.wind_speed     = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[34];
            s.bValue2              = b[35];
            current.wind_direction = s.sValue;
            //    current.GprsSignal = ((sbyte)b[36]).ToString();
            // current.automatic = b[37].ToString();
            //current.Manual = b[38].ToString();
            s.bValue1            = b[39];
            s.bValue2            = b[40];
            current.air_pressure = double.Parse((float.Parse(s.sValue.ToString()) / 100).ToString("0.00"));
            s.bValue1            = b[41];
            s.bValue2            = b[42];
            current.tsp          = s.sValue;
            Dust_noise_operation.Send_dust_noise_Current(current);
        }