// 批量数据flash下行解析 public bool Parse_Flash(String msg, EChannelType ctype, 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_1(data.Substring(6, 2)); // 解析传输类型, 2位 02/03 batch.TransType = ProtocolMaps.TransMap.FindKey(data.Substring(8, 2)); //创建返回的数据对象 var datas = new List <CTimeAndData>(); //ByDay ByHour区分 //02 按天传 03按小时 04按一天整点 switch (batch.TransType) { //按天传 02 case ETrans.ByDay: { int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 //数据处理 data = data.Substring(14); while (data.Length >= 12) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: Int32.Parse(data.Substring(0, 2)), //日 hour: Int32.Parse(data.Substring(2, 2)), //时 minute: Int32.Parse(data.Substring(4, 2)), //分 second: 0 ); string datasegs = data.Substring(6, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(12); } } break; //按小时传 03 case ETrans.ByHour: { //判断是GSM还是GPRS传送方式 //GSM:yymmddhh GPRS:yymm if (ctype == EChannelType.GPRS) { //GPRS类型 int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 //数据处理 data = data.Substring(14); while (data.Length >= 12) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: Int32.Parse(data.Substring(0, 2)), //日 hour: Int32.Parse(data.Substring(2, 2)), //时 minute: Int32.Parse(data.Substring(4, 2)), //分 second: 0 ); string datasegs = data.Substring(6, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(12); } } else if (ctype == EChannelType.GSM) { //GSM类型 int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 int dateDay = Int32.Parse(data.Substring(14, 2)); // 日 int dateHour = Int32.Parse(data.Substring(16, 2)); // 时 //数据处理 data = data.Substring(14); while (data.Length >= 12) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: dateDay, //日 hour: dateHour, //时 minute: Int32.Parse(data.Substring(0, 2)), //分 second: 0 ); string datasegs = data.Substring(2, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(8); } } } break; //按一天整点传 04 case ETrans.ByDayHour: { int dateYear = Int32.Parse("20" + data.Substring(10, 2)); // 年 int dateMonth = Int32.Parse(data.Substring(12, 2)); // 月 int dateDay = Int32.Parse(data.Substring(14, 2)); // 日 //数据处理 data = data.Substring(16); while (data.Length >= 8) { DateTime recvTime = new DateTime( year: dateYear, //年 month: dateMonth, //月 day: dateDay, //日 hour: Int32.Parse(data.Substring(0, 2)), //时 minute: 0, //分 second: 0 ); string datasegs = data.Substring(2, 6); datas.Add(new CTimeAndData { Time = recvTime, Data = datasegs }); data = data.Substring(8); } } break; } batch.Datas = datas; return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("批量数据解析不完整" + exp.Message); } return(false); }