public override int GetHashCode() { unchecked { var hashCode = CharValue.GetHashCode(); hashCode = (hashCode * 397) ^ ByteValue.GetHashCode(); hashCode = (hashCode * 397) ^ SByteValue.GetHashCode(); hashCode = (hashCode * 397) ^ ShortValue.GetHashCode(); hashCode = (hashCode * 397) ^ UShortValue.GetHashCode(); hashCode = (hashCode * 397) ^ IntValue; hashCode = (hashCode * 397) ^ (int)UIntValue; hashCode = (hashCode * 397) ^ LongValue.GetHashCode(); hashCode = (hashCode * 397) ^ ULongValue.GetHashCode(); hashCode = (hashCode * 397) ^ FloatValue.GetHashCode(); hashCode = (hashCode * 397) ^ DoubleValue.GetHashCode(); hashCode = (hashCode * 397) ^ DecimalValue.GetHashCode(); hashCode = (hashCode * 397) ^ DateTimeValue.GetHashCode(); hashCode = (hashCode * 397) ^ GuidValue.GetHashCode(); hashCode = (hashCode * 397) ^ StringValue.GetHashCode(); return(hashCode); } }
/// <summary> /// 实时数据 /// </summary> /// <param name="b"></param> /// 发送7e 7e 0e 01 00 12 34 56 00 00 00 00 17 09 27 10 12 10 01 00 00 00 02 00 00 00 03 00 04 00 05 00 06 00 01 00 02 00 03 00 04 00 05 00 02 00 00 00 00 00 00 01 00 02 00 03 00 00 00 04 00 00 00 00 7d 7d public static Byte[] OnResolveRealData(byte[] b, int bCount, TcpSocketClient client) { string tStr = ConvertData.ToHexString(b, 0, 2); if (tStr != "7E7E") { return(null); } Zhgd_iot_tower_current data = new Zhgd_iot_tower_current(); #region 原协议 //设备号 data.sn = ConvertData.ToHexString(b, 5, 3); //司机卡号 data.driver_id_code = ConvertData.ToHexString(b, 8, 4); //日期 tStr = ConvertData.ToHexString(b, 12, 6); try { data.@timestamp = DPC_Tool.GetTimeStamp(DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture)); } catch { data.@timestamp = DPC_Tool.GetTimeStamp(); } IntValue iv = new IntValue(); //经度 iv.bValue1 = b[18]; iv.bValue2 = b[19]; iv.bValue3 = b[20]; iv.bValue4 = b[21]; //data.Current.Longitude = (iv.iValue / 100000.0).ToString("0.00"); //纬度 iv.bValue1 = b[22]; iv.bValue2 = b[23]; iv.bValue3 = b[24]; iv.bValue4 = b[25]; //data.Current.Latitude = (iv.iValue / 100000.0).ToString("0.00"); UShortValue s = new UShortValue(); //高度 s.bValue1 = b[26]; s.bValue2 = b[27]; data.height = double.Parse((s.sValue / 100.00).ToString("0.00")); //幅度 s.bValue1 = b[28]; s.bValue2 = b[29]; data.range = double.Parse((s.sValue / 100.00).ToString("0.00")); ShortValue sv = new ShortValue(); //转角 sv.bValue1 = b[30]; sv.bValue2 = b[31]; data.rotation = double.Parse((sv.sValue / 10.00).ToString("0.00")); //重量 s.bValue1 = b[32]; s.bValue2 = b[33]; data.weight = double.Parse((s.sValue / 100.00).ToString("0.00")); //风速 s.bValue1 = b[34]; s.bValue2 = b[35]; data.wind_speed = double.Parse((s.sValue / 100.00).ToString("0.00")); data.wind_grade = ConvertWind.WindToLeve(s.sValue / 100.0f); if (data.wind_grade >= 13) { data.wind_grade = 12; } //倾角X sv.bValue1 = b[36]; sv.bValue2 = b[37]; data.dip_x = double.Parse((sv.sValue / 100.00).ToString("0.00")); //倾角Y sv.bValue1 = b[38]; sv.bValue2 = b[39]; data.dip_y = double.Parse((sv.sValue / 100.00).ToString("0.00")); //安全力矩 s.bValue1 = b[40]; s.bValue2 = b[41]; //data.Current.Safetorque = (s.sValue / 10.00).ToString("0.00"); //安全起重量 s.bValue1 = b[42]; s.bValue2 = b[43]; //data.Current.SafeWeight = (s.sValue / 100.00).ToString("0.00"); //倍率 //data.Current.Times = Convert.ToInt32(b[44]).ToString(); //限位控制器状态 //s.bValue1 = b[51]; //s.bValue2 = b[52]; //data.Current.LimitStatus = Convert.ToString(s.sValue, 2).PadLeft(16, '0'); //LimitFlag(data, data.Current.LimitStatus); ////传感器状态 //s.bValue1 = b[53]; //s.bValue2 = b[54]; //data.Current.SensorStatus = Convert.ToString(s.sValue, 2).PadLeft(16, '0'); //预警告码 IntValue i = new IntValue(); //i.bValue1 = b[55]; //i.bValue2 = b[56]; //i.bValue3 = b[57]; //i.bValue4 = b[58]; //string WarnType = Convert.ToString(i.iValue, 2).PadLeft(32, '0'); //WarnFlag(data, WarnType); //报警告码 i.bValue1 = b[59]; i.bValue2 = b[60]; i.bValue3 = b[61]; i.bValue4 = b[62]; string AlarmType = Convert.ToString(i.iValue, 2).PadLeft(32, '0'); //总共是32位右对齐 AlarmFlag(data, AlarmType); //报警码解析 tStr = ConvertData.ToHexString(b, 64, 2); if (tStr != "7D7D") { return(null); } #endregion //进行数据put Tower_operation.Send_tower_Current(data); return(null); }
//参数配置 //7A 7A 01 00 02 04 32 00 31 32 33 34 35 36 37 38 17 10 31 17 34 00 17 10 31 01 00 01 01 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0a 00 0b 00 0c 00 0d 00 31 32 33 D4 18 7b 7b //7a 7a 01 00 02 04 00 00 00 00 7b 7b static public void ReceiveDispose_ParameterConfig(byte[] data, TcpSocketClient client) { try { Frame_ParameterConfig dataFrame = new Frame_ParameterConfig(); //设备编号 byte[] sn = new byte[8]; //设备编号 for (int i = 0; i < 8; i++) { sn[i] = data[i]; } dataFrame.DeviceNo = Encoding.ASCII.GetString(sn); //获取设备编号ASCII //参数修改时间 string tStr = ConvertData.ToHexString(data, 8, 6); try { dataFrame.ParameterUpdateTime = DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture); } catch (Exception) { dataFrame.ParameterUpdateTime = DateTime.Now; } //安装时间 tStr = ConvertData.ToHexString(data, 14, 3); try { dataFrame.InstallDate = DateTime.ParseExact(tStr, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture); } catch (Exception) { dataFrame.InstallDate = DateTime.Now; } //额定载荷 UShortValue us = new UShortValue(); us.bValue1 = data[17]; us.bValue2 = data[18]; dataFrame.LoadRating = us.sValue; //预警系数 dataFrame.EarlyAlarmCoefficient = data[19]; //报警系数 dataFrame.AlarmCoefficient = data[20]; //空载AD1 ShortValue s = new ShortValue(); s.bValue1 = data[21]; s.bValue2 = data[22]; dataFrame.EmptyAD1 = s.sValue; //空载AD2 s.bValue1 = data[23]; s.bValue2 = data[24]; dataFrame.EmptyAD2 = s.sValue; //空载AD3 s.bValue1 = data[25]; s.bValue2 = data[26]; dataFrame.EmptyAD3 = s.sValue; //空载AD4 s.bValue1 = data[27]; s.bValue2 = data[28]; dataFrame.EmptyAD4 = s.sValue; //空载AD s.bValue1 = data[29]; s.bValue2 = data[30]; dataFrame.EmptyAD = s.sValue; //标准重物AD1 s.bValue1 = data[31]; s.bValue2 = data[32]; dataFrame.StandardLoadAD1 = s.sValue; //标准重物AD2 s.bValue1 = data[33]; s.bValue2 = data[34]; dataFrame.StandardLoadAD2 = s.sValue; //标准重物AD3 s.bValue1 = data[35]; s.bValue2 = data[36]; dataFrame.StandardLoadAD3 = s.sValue; //标准重物AD4 s.bValue1 = data[37]; s.bValue2 = data[38]; dataFrame.StandardLoadAD1 = s.sValue; //标准重物AD s.bValue1 = data[39]; s.bValue2 = data[40]; dataFrame.StandardLoadAD = s.sValue; //标准重物 s.bValue1 = data[41]; s.bValue2 = data[42]; dataFrame.StandardLoad = s.sValue; //倾角预警值 s.bValue1 = data[43]; s.bValue2 = data[44]; dataFrame.AngleEarlyAlarm = s.sValue; //倾角报警值 s.bValue1 = data[45]; s.bValue2 = data[46]; dataFrame.AngleAlarm = s.sValue; //软件版本号 ASCII byte[] SoftVersion = new byte[data.Length - 47]; for (int i = 47, j = 0; i < data.Length; i++, j++) { SoftVersion[j] = data[i]; } dataFrame.SoftVersion = Encoding.ASCII.GetString(SoftVersion); //拼接应答 byte[] result = SendJoint_ParameterConfig(dataFrame); if (result != null) { client.SendBuffer(result); } } catch (Exception) { } }
//实时数据 //7A 7A 01 00 02 01 15 00 31 32 33 34 35 36 37 38 17 10 31 17 34 00 01 00 02 00 03 00 01 15 03 7B 7B //有报警7A 7A 01 00 02 01 15 00 31 32 33 34 35 36 37 38 17 10 31 17 34 00 01 00 02 00 03 00 0f DB E2 7B 7B static public void ReceiveDispose_Current(byte[] data, TcpSocketClient client, bool isCurrent) { try { Zhgd_iot_discharge_current dataFrame = new Zhgd_iot_discharge_current(); //设备编号 byte[] sn = new byte[8]; //设备编号 for (int i = 0; i < 8; i++) { sn[i] = data[i]; } dataFrame.sn = Encoding.ASCII.GetString(sn); //获取设备编号ASCII //RTC string tStr = ConvertData.ToHexString(data, 8, 6); try { dataFrame.timestamp = DPC_Tool.GetTimeStamp(DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture)); } catch (Exception) { dataFrame.timestamp = DPC_Tool.GetTimeStamp(DateTime.Now); } //当前载重 UShortValue us = new UShortValue(); us.bValue1 = data[14]; us.bValue2 = data[15]; dataFrame.weight = us.sValue; //倾角X ShortValue s = new ShortValue(); s.bValue1 = data[16]; s.bValue2 = data[17]; dataFrame.dip_x = (double)((double)(s.sValue) / 100d); //倾角Y s.bValue1 = data[18]; s.bValue2 = data[19]; dataFrame.dip_y = (double)((double)(s.sValue) / 100d); //报警状态 string state = Convert.ToString(data[20], 2).PadLeft(8, '0'); List <string> vs = new List <string>(); dataFrame.is_warning = "N"; // dataFrame.WeightWarning = (byte)(state[7] - 48); if ((byte)(state[6] - 48) == 1) { vs.Add(Warning_type.重量告警); dataFrame.is_warning = "Y"; } //dataFrame.WeightAlarm = (byte)(state[6] - 48); // dataFrame.AngleWarning = (byte)(state[5] - 48); if ((byte)(state[4] - 48) == 1) { vs.Add(Warning_type.重量告警); dataFrame.is_warning = "Y"; } //dataFrame.AngleAlarm = (byte)(state[4] - 48); //离线数据应答 if (!isCurrent) { byte[] result = SendJoint_OffLine(); if (result != null) { client.SendBuffer(result); } } //进行数据put Discharge_operation.Send_discharge_Current(dataFrame); } catch (Exception) { } }
/// <summary> /// 实时数据 /// </summary> /// <param name="b"></param> /// 7A7A0103000144003132333435363738000000000000000000000000000102000841000000000000000000000000000000000F0000000000000000000000000000000000000000000000000006637B7B7A7A010300000E003132333435363738000102000841DC7F7B7B public static Byte[] OnResolveRealData(byte[] b, int bCount) { string tStr = ConvertData.ToHexString(b, 0, 2); if (tStr != "7A7A") { return(null); } Zhgd_iot_lift_current data = new Zhgd_iot_lift_current(); //设备编号 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); string str1 = b[19].ToString("X2") + b[18].ToString("X2") + b[17].ToString("X2") + b[16].ToString("X2"); //司机工号 for (int i = 20, j = 0; i < 28; i++, j++) { t[j] = b[i]; } //日期 tStr = ConvertData.ToHexString(b, 28, 6); try { data.timestamp = DPC.DPC_Tool.GetTimeStamp(DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture)); } catch { data.timestamp = DPC.DPC_Tool.GetTimeStamp(DateTime.Now); } //重量 吨 UShortValue s = new UShortValue(); string str = b[35].ToString("X2") + b[34].ToString("X2"); int result = int.Parse(str, System.Globalization.NumberStyles.HexNumber); data.weight = double.Parse((result / 1000.00).ToString("0.00"));//设备发送单位:吨 //当前额定载荷 str = b[37].ToString("X2") + b[36].ToString("X2"); result = int.Parse(str, System.Globalization.NumberStyles.HexNumber); //data.RatedWeight = (result / 1000.00).ToString("0.00");//设备发送单位:吨 //高度 m s.bValue1 = b[38]; s.bValue2 = b[39]; data.height = double.Parse((s.sValue / 10.00).ToString("0.00"));//设备发送单位:分米 //速度 m/秒 s.bValue1 = b[40]; s.bValue2 = b[41]; data.speed = double.Parse((s.sValue / 10.00).ToString("0.00"));//设备发送单位:分米//设备发送单位:分米/秒 //楼层 s.bValue1 = b[42]; data.floor = int.Parse(s.sValue.ToString("0")); //人数 s.bValue1 = b[43]; data.peoples = int.Parse(s.sValue.ToString("0")); //传感器状态 s.bValue1 = b[44]; s.bValue2 = b[45]; // data.SensorSet = Convert.ToString(s.sValue, 2).PadLeft(16, '0'); //报警码 s.bValue1 = b[46]; s.bValue2 = b[47]; //2字节: 0-重量预警 1-重量报警 2-顶层预警 3-顶层报警 4-蹲底 5-门打开 6-风速预警 7-风速报警 9-人数报警 10-防坠器报警 //data.AlarmType = Convert.ToString(s.sValue, 2).PadLeft(16, '0');//2字节:0-顶层预警 1-底层预警 2-顶层报警 3-底层报警 4-重量预警 5-重量报警 6-偏载 7-风速预警 8-风速报警 9-门未关好 string alarm = Convert.ToString(s.sValue, 2).PadLeft(16, '0'); List <string> vs = new List <string>(); data.is_warning = "N"; if (alarm[14] == '1') { vs.Add(Warning_type.重量告警); data.is_warning = "Y"; } if (alarm[8] == '1') { vs.Add(Warning_type.风速报警); data.is_warning = "Y"; } if (alarm[7] == '1') { vs.Add(Warning_type.人数报警); data.is_warning = "Y"; } if (alarm[6] == '1') { vs.Add(Warning_type.防坠器报警); data.is_warning = "Y"; } data.warning_type = vs.ToArray(); //继电器状态 s.bValue1 = b[48]; // data.PowerStatu = s.sValue.ToString("0"); //GPRS信号强度 // data.GprsSignal = ((sbyte)b[49]).ToString(); ///门状态 data.door_status = (b[50] + Convert.ToByte(64)).ToString();//b[50].ToString();/// 加192 Convert.ToInt32("11000000",2) //风力等级 data.wind_grade = b[51]; //风速 s.bValue1 = b[52]; s.bValue2 = b[53]; data.wind_speed = double.Parse((s.sValue / 100.00).ToString("0.00")); //设备发送单位:cm/s 除以100得出m/s //倾角X short X = Convert.ToInt16(("0x" + b[55].ToString("X2") + b[54].ToString("X2")), 16); data.dip_x = double.Parse((X / 100.00).ToString("0.00")); //倾角X 协议要求除以100 //倾角Y short Y = Convert.ToInt16(("0x" + b[57].ToString("X2") + b[56].ToString("X2")), 16); data.dip_y = double.Parse((Y / 100.00).ToString("0.00")); //倾角Y 协议要求除以100 tStr = ConvertData.ToHexString(b, 78, 2); //身份证号处理 byte[] d = new byte[18]; for (int i = 58, j = 0; i < 76; i++, j++) { d[j] = b[i]; } data.driver_id_code = Encoding.ASCII.GetString(d).Replace("\0", ""); if (tStr != "7B7B") { return(null); } //进行数据put Lift_operation.Send_Lift_Current(data); 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); }