private string QFormat(WaterQuality wq) { //decimal pow = (decimal) Math.Pow(10, (8 - wq.Count)); return(float.Parse((wq.Value / wq.Rate).ToString("G" + wq.Count)).ToString()); //return wq.Value.ToString(); }
private static Dictionary <int, WaterQuality> WaterQualityDic() { Dictionary <int, WaterQuality> dic = new Dictionary <int, WaterQuality>(); WaterQuality wq = new WaterQuality(); wq.Count = 3; wq.Name = "水温"; wq.Rate = 10; dic.Add(0, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "pH 值"; wq.Rate = 100; dic.Add(1, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "溶解氧"; wq.Rate = 10; dic.Add(2, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "高锰酸盐指数"; wq.Rate = 10; dic.Add(3, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "电导率"; wq.Rate = 1; dic.Add(4, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "氧化还原电位"; wq.Rate = 10; dic.Add(5, wq); wq = new WaterQuality(); wq.Count = 3; wq.Name = "浊度"; wq.Rate = 1; dic.Add(6, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "化学需氧量"; wq.Rate = 10; dic.Add(7, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "五日生化需氧量"; wq.Rate = 10; dic.Add(8, wq); wq = new WaterQuality(); wq.Count = 6; wq.Name = "氨氮"; wq.Rate = 100; dic.Add(9, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "总氮"; wq.Rate = 100; dic.Add(10, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "铜"; wq.Rate = 10000; dic.Add(11, wq); wq = new WaterQuality(); wq.Count = 6; wq.Name = "锌"; wq.Rate = 10000; dic.Add(12, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "氟化物"; wq.Rate = 100; dic.Add(13, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "硒"; wq.Rate = 100000; dic.Add(14, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "砷"; wq.Rate = 100000; dic.Add(15, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "汞"; wq.Rate = 100000; dic.Add(16, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "镉"; wq.Rate = 100000; dic.Add(17, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "六价铬"; wq.Rate = 1000; dic.Add(18, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "铅"; wq.Rate = 100000; dic.Add(19, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "氰化物"; wq.Rate = 1000; dic.Add(20, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "挥发酚"; wq.Rate = 1000; dic.Add(21, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "苯酚"; wq.Rate = 100; dic.Add(22, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "硫化物"; wq.Rate = 1000; dic.Add(23, wq); wq = new WaterQuality(); wq.Count = 10; wq.Name = "粪大肠菌群"; wq.Rate = 1; dic.Add(24, wq); wq = new WaterQuality(); wq.Count = 6; wq.Name = "硫酸盐"; wq.Rate = 100; dic.Add(25, wq); wq = new WaterQuality(); wq.Count = 8; wq.Name = "氯化物"; wq.Rate = 100; dic.Add(26, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "硝酸盐氮"; wq.Rate = 100; dic.Add(27, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "铁"; wq.Rate = 100; dic.Add(28, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "锰"; wq.Rate = 100; dic.Add(29, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "石油类"; wq.Rate = 100; dic.Add(30, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "阴离子表面活性剂"; wq.Rate = 100; dic.Add(31, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "六六六"; wq.Rate = 1000000; dic.Add(32, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "滴滴涕"; wq.Rate = 1000000; dic.Add(33, wq); wq = new WaterQuality(); wq.Count = 8; wq.Name = "蓝绿藻"; wq.Rate = 10; dic.Add(34, wq); wq = new WaterQuality(); wq.Count = 12; wq.Name = "总磷"; wq.Rate = 10000000; dic.Add(35, wq); wq = new WaterQuality(); wq.Count = 4; wq.Name = "叶绿素"; wq.Rate = 100; dic.Add(36, wq); wq = new WaterQuality(); wq.Count = 5; wq.Name = "总有机碳"; wq.Rate = 100; dic.Add(37, wq); wq = new WaterQuality(); wq.Count = 7; wq.Name = "余氯"; wq.Rate = 1000000; dic.Add(38, wq); return(dic); }
/// <summary> /// 水质参数报文解析 /// </summary> public void analyzeWaterQuality(byte[] res, SqlConnection conn) { SqlHelper sh = new SqlHelper(); byte[] byte_class = new byte[5]; Array.Copy(res, 10, byte_class, 0, 5); string code = ByteArrayToBinaryString(byte_class); char[] arr_code = code.ToArray(); //Console.WriteLine(code); //Dictionary<int, WaterQuality> dic = WaterQualityDic(); List <WaterQuality> listw = new List <WaterQuality>(); byte[] byte_data = new byte[4]; int index = 0; int indexfive = 0; string str_address = analyzeAddress(res); if (dicAddress.ContainsKey(str_address)) { str_address = dicAddress[str_address]; } StringBuilder sbout = new StringBuilder(); Console.WriteLine("[" + str_address + "]接收水质参数报文:" + BitConverter.ToString(res)); for (int i = 0; i < 40; i++) { if (arr_code[i] == '1') { Array.Clear(byte_data, 0, 4); if (i == 24) { indexfive = 1; } else { indexfive = 0; } Array.Copy(res, indexfive + 15 + index * 4, byte_data, 0, 4); Array.Reverse(byte_data); String bcdstring = converToBCD(byte_data); //Console.WriteLine(bcdstring); int value = int.Parse(bcdstring); WaterQuality wq = null; if (!wqDic.TryGetValue(i, out wq)) { index++; continue; } wq.Value = decimal.Parse(value.ToString()); if (str_address + "." + wq.Name == "管网.浊度") { wq.Value = wq.Value / 1000; } String finallValue = QFormat(wq); sbout.Append(String.Format("{0}:{1},D<{2}>|", wq.Name, finallValue, i)); wq.Name = str_address + "." + wq.Name; //wq.Value = decimal.Parse(finallValue); wq.Value = ChangeDataToD(finallValue); listw.Add(wq); index++; } } if (listw.Count > 0) { Console.WriteLine("[" + str_address + "]接收" + listw.Count + "个水质参数:" + sbout.ToString()); sh.insertFuGuang(conn, listw); } else { Console.WriteLine("[" + str_address + "]虽然收到报文但是没有采集任何参数"); } //Convert.ToString(btye_class, 2).PadLeft(39, '0'); }