//实时数据 //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); }