// 数据批量主板下行解析 public bool Parse_Batch(String msg, out CBatchStruct batch) { batch = new CBatchStruct(); UpParser up = new UpParser(); CReportStruct report = new CReportStruct(); try { if (up.Parse(msg.Substring(msg.IndexOf("1G29") + 5), out report)) { batch.StationID = report.Stationid; batch.StationType = report.StationType; List <CTimeAndData> datas = new List <CTimeAndData>(); List <CTimeAndData> rains = new List <CTimeAndData>(); List <CTimeAndData> waters = new List <CTimeAndData>(); if (report.StationType == EStationType.ERainFall) { foreach (var d in report.Datas) { CTimeAndData rain = new CTimeAndData(); rain.Time = d.Time; if (d.Rain != -1) { int rainData = (int)(d.Rain); rain.Data = string.Format("{0:D4}", rainData); datas.Add(rain); } } } else if (report.StationType == EStationType.ERiverWater) { foreach (var d in report.Datas) { CTimeAndData water = new CTimeAndData(); water.Time = d.Time; if (d.Water != -20000 && d.Water != -200) { int waterData = (int)(d.Water * 100); water.Data = string.Format("{0:D6}", waterData); datas.Add(water); } } } else if (report.StationType == EStationType.EHydrology) { foreach (var d in report.Datas) { CTimeAndData rain = new CTimeAndData(); rain.Time = d.Time; CTimeAndData water = new CTimeAndData(); water.Time = d.Time; if (d.Water != -20000 && d.Water != -200) { int waterData = (int)(d.Water * 100); water.Data = string.Format("{0:D6}", waterData); waters.Add(water); } if (d.Rain != -1) { int rainData = (int)(d.Rain); rain.Data = string.Format("{0:D4}", rainData); rains.Add(rain); } } } batch.Datas = datas; batch.Rains = rains; batch.Waters = waters; return(true); } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("批量主板异常:" + e); } return(false); }
// 批量数据UBatch下行解析 public bool Parse(String msg, out CBatchStruct batch) { batch = new CBatchStruct(); try { string data = string.Empty; if (!ProtocolHelpers.DeleteSpecialChar(msg, out data)) { return(false); } // 解析站点ID , 4位 0001 batch.StationID = data.Substring(0, 4); // 解析命令指令 ,2位 1K batch.Cmd = data.Substring(4, 2); // 解析站点类型, 2位 01 batch.StationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(6, 2)); int DataYear = Int32.Parse(data.Substring(8, 2)); int DataMonth = Int32.Parse(data.Substring(10, 2)); int DataDay = Int32.Parse(data.Substring(12, 2)); //创建返回的数据对象 var datas = new List <CTimeAndData>(); var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR); foreach (var item in lists) { string itemData = item; while (itemData.Length > 0) { int DataHour = Int32.Parse(itemData.Substring(0, 2)); int DataMinute = Int32.Parse(itemData.Substring(2, 2)); // 解析出数据时间 DateTime recvTime = new DateTime( year: DataYear, month: DataMonth, day: DataDay, hour: DataHour, minute: DataMinute, second: 0 ); // 解析出16进制的数据 string itemDatas = itemData.Substring(4, 4); // 将16进制数据转化为10进制 itemDatas = int.Parse(itemDatas, System.Globalization.NumberStyles.AllowHexSpecifier).ToString(); // 创建CTimeAndData对象 CTimeAndData result = new CTimeAndData(); result.Time = recvTime; result.Data = itemDatas; // 将对像填充至list中 datas.Add(result); //构成循环 itemData = itemData.Substring(10); } } batch.Datas = datas; return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("批量数据解析不完整" + exp.Message); } return(false); }