//示例: $00010K01yymmddhh#13 public String BuildQuery(string sid, EStationType stationType, ETrans trans, DateTime beginTime, EChannelType ctype) { // 拼接发送指令的字符串 StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0K"); // type : 01:01为水位 02为雨量 sb.Append(ProtocolHelpers.StationType2ProtoStr(stationType)); switch (trans) { case ETrans.ByHour: sb.Append(beginTime.ToString("yyMMddHH")); break; case ETrans.ByDay: sb.Append(beginTime.ToString("yyMMdd")); sb.Append("88"); break; default: throw new Exception("传输格式错误"); } sb.Append('\r'); return(sb.ToString()); }
// ESoil = 3, // 04墒情站 //ESoilRain = 4, // 05墒情雨量站 //ESoilWater = 5, // 06,16墒情水位站 //ESoilHydrology = 6 // 07,17墒情水文站 public static string StationTypeToUIStr(EStationType type) { string result = ""; switch (type) { case EStationType.ERainFall: { result = CS_EStationType_ERainFall_UIStr; } break; case EStationType.ERiverWater: { result = CS_EStationType_ERiverWater_UIStr; } break; case EStationType.EHydrology: { result = CS_EStationType_EHydrology_UIStr; } break; case EStationType.ESoil: { result = CS_EStationType_ESoil_UIStr; } break; case EStationType.ESoilRain: { result = CS_EStationType_ESoilRain_UIStr; } break; case EStationType.ESoilWater: { result = CS_EStationType_ESoilWater_UIStr; } break; case EStationType.ESoilHydrology: { result = CS_EStationType_ESoilHydrology_UIStr; } break; case EStationType.EH: { result = CS_EStationType_RiverHydro_UIStr; } break; case EStationType.RE: { result = CS_EStationType_SK_UIStr; } break; case EStationType.GT: { result = CS_EStationType_ZB_UIStr; } break; case EStationType.RP: { result = CS_EStationType_BZ_UIStr; } break; default: { result = "未知站点类型"; } break; } return(result); }
// 批量数据Flash下行 public String BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype) { String result = String.Empty; String dataProtocol = Manager.XmlStationData.Instance.GetProtocolBySId(sid); //RG30 if (dataProtocol == "RG30") { Down = new Data.RG30.DownParser(); } //时差法 if (dataProtocol == "TDXY") { Down = new Data.TDXY.DownParser(); } //中游局协议 if (dataProtocol == "ZYJBX") { Down = new Data.ZYJBX.DownParser(); } if (dataProtocol == "SM100H") { Down = new Data.SM100H.DownParser(); } result = Down.BuildQuery_Flash(sid, stationType, trans, beginTime, endTime, ctype); return(result); }
public static string StationTypeToDBStr(EStationType type) { switch (type) { case EStationType.ERainFall: return(CS_EStationType_ERainFall_DBStr); case EStationType.ERiverWater: return(CS_EStationType_ERiverWater_DBStr); case EStationType.EHydrology: return(CS_EStationType_EHydrology_DBStr); case EStationType.ESoil: return(CS_EStationType_ESoil_DBStr); case EStationType.ESoilRain: return(CS_EStationType_ESoilRain_DBStr); case EStationType.ESoilWater: return(CS_EStationType_ESoilWater_DBStr); case EStationType.ESoilHydrology: return(CS_EStationType_ESoilHydrology_DBStr); case EStationType.EH: return(CS_EStationType_RiverHydro_DBStr); case EStationType.RE: return(CS_EStationType_SK_DBStr); case EStationType.GT: return(CS_EStationType_ZB_DBStr); case EStationType.RP: return(CS_EStationType_BZ_DBStr); } throw new Exception("StationTypeToDBStr ERROR"); }
//解析数据段 private bool GetData(string data, DateTime recvTime, decimal voltage, EStationType stationType, out CReportData report) { report = new CReportData(); try {// 解析时间 report.Time = recvTime; // 解析电压 2(整数位) + 2(小数位) 单位V report.Voltge = voltage; // 此处根据站点类型类判断是否需要解析相应的数据,避免因为非必要字段导致的异常信息 // 解析水位 4(整数位) + 2(小数位) 单位m // 解析雨量 单位mm,未乘以精度 // 初始化雨量,水位,电压值 // 雨量 包含雨量Rain // 水文 包含雨量Rain,水位Water // 水位 包含水位Water switch (stationType) { case EStationType.ERainFall: { // 雨量 // 解析雨量 单位mm,未乘以精度 Decimal rain = Decimal.Parse(data.Substring(6, 4)); report.Rain = rain; } break; case EStationType.EHydrology: { // 水文 // 解析雨量 单位mm,未乘以精度 Decimal rain = Decimal.Parse(data.Substring(6, 4)); // 解析水位 4(整数位) + 2(小数位) 单位m Decimal water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01; report.Rain = rain; report.Water = water; } break; case EStationType.ERiverWater: { // 水位 // 解析水位 4(整数位) + 2(小数位) 单位m Decimal water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01; report.Water = water; break; } default: break; } return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine(exp.Message); } return(false); }
/// <summary> /// 解析站点数据内容 /// 示例数据:090227080012345600011260 /// 0902270800 10位数据时报 /// 123456 6位水位 /// 0001 4位雨量 /// 1260 4位电压 /// </summary> /// <param name="data">数据</param> /// <param name="stationType">站类</param> /// <param name="report"></param> /// <returns></returns> private bool GetData(string data, EStationType stationType, out CReportData report) { report = new CReportData(); try { // 解析时间 report.Time = new DateTime ( year: Int32.Parse("20" + data.Substring(0, 2)), // 年 month: Int32.Parse(data.Substring(2, 2)), // 月 day: Int32.Parse(data.Substring(4, 2)), // 日 hour: Int32.Parse(data.Substring(6, 2)), // 时 minute: Int32.Parse(data.Substring(8, 2)), // 分 second: 0 // 秒 ); // 解析电压 2(整数位) + 2(小数位) 单位V Decimal Voltge = Decimal.Parse(data.Substring(20, 4)) * (Decimal)0.01; // 解析水位 4(整数位) + 2(小数位) 单位m Decimal water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01; // 解析雨量 单位mm,未乘以精度 Decimal rain = Decimal.Parse(data.Substring(16, 4)); // 初始化雨量,水位,电压值 // 雨量 包含雨量Rain // 水文 包含雨量Rain,水位Water // 水位 包含水位Water switch (stationType) { case EStationType.ERainFall: // 雨量 report.Rain = rain; break; case EStationType.EHydrology: // 水文 report.Rain = rain; report.Water = water; break; case EStationType.ERiverWater: // 水位 report.Water = water; break; default: break; } report.Voltge = Voltge; return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine(exp.Message); } return(false); }
private List <CReportData> GetData(IList <string> dataSegs, EStationType stationType) { var result = new List <CReportData>(); foreach (var item in dataSegs) { CReportData data = new CReportData(); if (GetData(item, stationType, out data)) { result.Add(data); } } return(result); }
// ESoil = 3, // 04墒情站 //ESoilRain = 4, // 05墒情雨量站 //ESoilWater = 5, // 06,16墒情水位站 //ESoilHydrology = 6 // 07,17墒情水文站 public static string StationTypeToUIStr(EStationType type) { string result = ""; switch (type) { case EStationType.ERainFall: { result = CS_EStationType_ERainFall_UIStr; } break; case EStationType.ERiverWater: { result = CS_EStationType_ERiverWater_UIStr; } break; case EStationType.EHydrology: { result = CS_EStationType_EHydrology_UIStr; } break; case EStationType.ESoil: { result = CS_EStationType_ESoil_UIStr; } break; case EStationType.ESoilRain: { result = CS_EStationType_ESoilRain_UIStr; } break; case EStationType.ESoilWater: { result = CS_EStationType_ESoilWater_UIStr; } break; case EStationType.ESoilHydrology: { result = CS_EStationType_ESoilHydrology_UIStr; } break; case EStationType.EP: { result = CS_EStationType_EP_UIStr; } break; case EStationType.EH: { result = CS_EStationType_EH_UIStr; } break; case EStationType.EK: { result = CS_EStationType_EK_UIStr; } break; case EStationType.EZ: { result = CS_EStationType_EZ_UIStr; } break; case EStationType.ED: { result = CS_EStationType_ED_UIStr; } break; case EStationType.ET: { result = CS_EStationType_ET_UIStr; } break; case EStationType.EM: { result = CS_EStationType_EM_UIStr; } break; case EStationType.EG: { result = CS_EStationType_EG_UIStr; } break; case EStationType.EQ: { result = CS_EStationType_EQ_UIStr; } break; case EStationType.EI: { result = CS_EStationType_EI_UIStr; } break; case EStationType.EO: { result = CS_EStationType_EO_UIStr; } break; default: { result = "未知站点类型"; } break; } return(result); }
public static String StationType2ProtoStr_1(EStationType type) { string str = string.Empty; switch (type) { case EStationType.EHydrology: case EStationType.ERiverWater: str = ProtocolMaps.StationType4UIMap.FindValue(EStationType.ERainFall); break; case EStationType.ERainFall: str = ProtocolMaps.StationType4UIMap.FindValue(EStationType.ERiverWater); break; } return(str); }
// 批量数据UBatch下行 public String BuildQuery_UBatch(string sid, EStationType stationType, ETrans trans, DateTime beginTime, EChannelType ctype) { // 构建发送指令的字符串 StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0K"); // stationtype : 01为水位 02为雨量 sb.Append(ProtocolHelpers.StationType2ProtoStr_1(stationType)); // 时间 sb.Append(beginTime.ToString("yyMMddHH")); sb.Append('\r'); return(sb.ToString()); }
public static string StationTypeToDBStr(EStationType type) { switch (type) { case EStationType.ERainFall: return(CS_EStationType_ERainFall_DBStr); case EStationType.ERiverWater: return(CS_EStationType_ERiverWater_DBStr); case EStationType.EHydrology: return(CS_EStationType_EHydrology_DBStr); case EStationType.ESoil: return(CS_EStationType_ESoil_DBStr); case EStationType.ESoilRain: return(CS_EStationType_ESoilRain_DBStr); case EStationType.ESoilWater: return(CS_EStationType_ESoilWater_DBStr); case EStationType.ESoilHydrology: return(CS_EStationType_ESoilHydrology_DBStr); case EStationType.EP: return(CS_EStationType_EP_DBStr); case EStationType.EH: return(CS_EStationType_EH_DBStr); case EStationType.EK: return(CS_EStationType_EK_DBStr); case EStationType.EZ: return(CS_EStationType_EZ_DBStr); case EStationType.ED: return(CS_EStationType_ED_DBStr); case EStationType.ET: return(CS_EStationType_ET_DBStr); case EStationType.EM: return(CS_EStationType_EM_DBStr); case EStationType.EG: return(CS_EStationType_EG_DBStr); case EStationType.EQ: return(CS_EStationType_EQ_DBStr); case EStationType.EI: return(CS_EStationType_EI_DBStr); case EStationType.EO: return(CS_EStationType_EO_DBStr); } throw new Exception("StationTypeToDBStr ERROR"); }
// 批量数据Flash下行 public String BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype) { // 构建发送指令的字符串 StringBuilder sb = new StringBuilder(); sb.Append(ProtocolMaps.ChannelProtocolStartCharMap.FindValue(ctype)); sb.Append(String.Format("{0:D4}", Int32.Parse(sid.Trim()))); sb.Append("0K"); // stationtype : 01为水位 02为雨量 sb.Append(ProtocolHelpers.StationType2ProtoStr_1(stationType)); // dayOrHour : 03为按小时传 02为按天传 // 按小时传 时间格式: yyMMddHH // 按天传 时间格式: yyMMdd // 按一天整点传 时间格式: yyMMddHH sb.Append(ProtocolMaps.TransMap.FindValue(trans)); switch (trans) { case ETrans.ByHour: sb.Append(beginTime.ToString("yyMMddHH")); sb.Append(endTime.ToString("yyMMddHH")); break; case ETrans.ByDay: sb.Append(beginTime.ToString("yyMMdd")); sb.Append(endTime.ToString("yyMMdd")); break; case ETrans.ByDayHour: sb.Append(beginTime.ToString("yyMMddHH")); sb.Append(endTime.ToString("yyMMddHH")); break; default: throw new Exception("传输格式错误"); } sb.Append('\r'); return(sb.ToString()); }
/// <summary> /// 单个数据项读取函数 /// </summary> /// <param name="data">原始数据信息</param> /// <param name="recvtime">接收时间</param> /// <param name="voltage">电压信息</param> /// <param name="stationType">站点类型,作为读取数据的依据</param> /// <param name="report">作为返回的结果</param> /// <returns>填充成功与否</returns> private bool FillData(string data, DateTime recvtime, Decimal voltage, EStationType stationType, out CReportData report) { report = new CReportData(); try { //时间 report.Time = recvtime; //电压 report.Voltge = voltage; //根据站类读取相应的数据 switch (stationType) { //水位站只要读水位信息 case EStationType.ERiverWater: report.Water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01; break; //雨量站只要读雨量信息 case EStationType.ERainFall: report.Rain = Decimal.Parse(data.Substring(6, 4)); break; //水文站要读水位信息和雨量信息 case EStationType.EHydrology: report.Water = Decimal.Parse(data.Substring(0, 6)) * (Decimal)0.01; report.Rain = Decimal.Parse(data.Substring(6, 4)); break; default: System.Diagnostics.Debug.WriteLine("解析XYJBX信息中站点类别有误!"); break; } return(true); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); return(false); } }
public bool Parse(String msg, out CReportStruct report) { //$30011G2512010030yymmddhhmm1297001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100001100; report = null; try { string data = string.Empty; if (!ProtocolHelpers.DeleteSpecialChar(msg, out data)) { return(false); } // 解析站号 String StationId = data.Substring(0, 4); // 解析通信类别 String type = data.Substring(4, 2); //定义报文类别 String reportTypeString = data.Substring(6, 2); //定义站点类别 String stationTypeString = data.Substring(8, 2); // 根据报文类别进行区别处理 switch (reportTypeString) { case "25": { // 解析报文类别 reportTypeString = "22"; EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString); // 解析站点类别 EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString); //解析间隔分钟 int intervalMin = Int32.Parse(data.Substring(10, 2)); //解析数据个数 int dataNum = Int32.Parse(data.Substring(12, 4)); //解析接收时间 DateTime recvTime = new DateTime( year: Int32.Parse("20" + data.Substring(16, 2)), //年 month: Int32.Parse(data.Substring(18, 2)), //月 day: Int32.Parse(data.Substring(20, 2)), //日 hour: Int32.Parse(data.Substring(22, 2)), //时 minute: Int32.Parse(data.Substring(24, 2)), //分 second: 0 ); //解析电压 2(整数位)+ 2(小数位) 单位 V Decimal Voltage = Decimal.Parse(data.Substring(26, 4)) * (Decimal)0.01; //获取数据段,不包括间隔分钟、数据个数、电压等 var lists = data.Substring(30).Split(CSpecialChars.BALNK_CHAR); var datas = GetProData(intervalMin, dataNum, lists, recvTime, Voltage); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; } break; case "22": { // 解析报文类别 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString); // 解析站点类别 EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString); //解析包序号 String PackageNum = data.Substring(10, 4); //解析接收时间 DateTime recvTime = new DateTime( year: Int32.Parse("20" + data.Substring(14, 2)), //年 month: Int32.Parse(data.Substring(16, 2)), //月 day: Int32.Parse(data.Substring(18, 2)), //日 hour: Int32.Parse(data.Substring(20, 2)), //时 minute: 0, //分 second: 0 //秒 ); //把包序号写入缓存 CEntityPackage package = new CEntityPackage() { StrStationID = StationId, PackageNum = PackageNum, time = recvTime }; if (cEntityPackage.ContainsKey(StationId)) { cEntityPackage[StationId] = package; } else { cEntityPackage.Add(StationId, package); } //解析电压 2(整数位)+ 2(小数位) 单位 V Decimal Voltage = Decimal.Parse(data.Substring(22, 4)) * (Decimal)0.01; //获取数据段,不包括间隔分钟、数据个数、电压等 var lists = data.Substring(26).Split(CSpecialChars.BALNK_CHAR); var datas = GetData(lists, recvTime, Voltage, stationType); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; } break; case "21": { if (data.Substring(8, 2) != "11") { // 解析报文类别 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString); // 解析站点类别 EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString); // 解析接收时间 DateTime recvTime = new DateTime( year: Int32.Parse("20" + data.Substring(10, 2)), //年 month: Int32.Parse(data.Substring(12, 2)), //月 day: Int32.Parse(data.Substring(14, 2)), //日 hour: Int32.Parse(data.Substring(16, 2)), //时 minute: Int32.Parse(data.Substring(18, 2)), //分 second: 0 //秒 ); var lists = data.Substring(20).Split(CSpecialChars.BALNK_CHAR); var datas = GetAddData(lists, recvTime, stationType); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; } else { //1G2111为人工水位 // 解析报文类别 EMessageType reportType = EMessageType.EMannual; // 解析站点类别 EStationType stationType = EStationType.ERiverWater; // 解析接收时间 DateTime recvTime = new DateTime( year: DateTime.Now.Year, //年 month: DateTime.Now.Month, //月 day: DateTime.Now.Day, //日 hour: Int32.Parse(data.Substring(10, 2)), //时 minute: Int32.Parse(data.Substring(12, 2)), //分 second: 0 //秒 ); var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR); var datas = GetMannualData(lists, recvTime); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; } } break; case "23": { //1G23为人工流量 // 解析报文类别 EMessageType reportType = EMessageType.EMannual; // 解析站点类别 EStationType stationType = EStationType.ERiverWater; // 解析接收时间 DateTime recvTime = new DateTime( year: DateTime.Now.Year, //年 month: DateTime.Now.Month, //月 day: Int32.Parse(data.Substring(8, 2)), //日 hour: Int32.Parse(data.Substring(10, 2)), //时 minute: Int32.Parse(data.Substring(12, 2)), //分 second: 0 //秒 ); var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR); var datas = GetWaterData(lists, recvTime); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; } break; case "29": { string doubleMsg = data.Substring(8); Parse(doubleMsg, out report); } break; } return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("数据协议解析不完整" + exp.Message); } return(false); }
/// <summary> /// 解析站点数据内容 /// 示例数据:090227080012345600011260 /// 0902270800 10位数据时报 /// 123456 6位水位 /// 0001 4位雨量 /// 1260 4位电压 /// /// </summary> /// <param name="data">数据</param> /// <param name="stationType">站类</param> /// <param name="report"></param> /// <returns></returns> private bool GetData(string data, EStationType stationType, out CReportData report) { report = new CReportData(); try { // 解析时间 report.Time = new DateTime ( year: Int32.Parse("20" + data.Substring(0, 2)), // 年 month: Int32.Parse(data.Substring(2, 2)), // 月 day: Int32.Parse(data.Substring(4, 2)), // 日 hour: Int32.Parse(data.Substring(6, 2)), // 时 minute: Int32.Parse(data.Substring(8, 2)), // 分 second: 0 // 秒 ); Decimal Voltge, rain, water; // 解析电压 2(整数位) + 2(小数位) 单位V try { Voltge = Decimal.Parse(data.Substring(20, 4)) * (Decimal)0.01; }catch (Exception e1) { Voltge = -1; } // cln:20141110修改,此处根据站点类型类判断是否需要解析相应的数据,避免因为非必要字段导致的异常信息 // 解析水位 4(整数位) + 2(小数位) 单位m //Decimal water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01; // 解析雨量 单位mm,未乘以精度 //Decimal rain = Decimal.Parse(data.Substring(16, 4)); // 初始化雨量,水位,电压值 // 雨量 包含雨量Rain // 水文 包含雨量Rain,水位Water // 水位 包含水位Water switch (stationType) { case EStationType.ERainFall: { // 雨量 // 解析雨量 单位mm,未乘以精度 try { rain = Decimal.Parse(data.Substring(16, 4)); }catch (Exception e) { rain = -1; } report.Rain = rain; } break; case EStationType.EHydrology: { // 水文 // 解析雨量 单位mm,未乘以精度 try { rain = Decimal.Parse(data.Substring(16, 4)); } catch (Exception e) { rain = -1; } // 解析水位 4(整数位) + 2(小数位) 单位m try { water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01; }catch (Exception e) { water = -200; } report.Rain = rain; report.Water = water; } break; case EStationType.ERiverWater: { // 水位 // 解析水位 4(整数位) + 2(小数位) 单位m try { water = Decimal.Parse(data.Substring(10, 6)) * (Decimal)0.01; } catch (Exception e) { water = -200; } report.Water = water; break; } default: break; } report.Voltge = Voltge; return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine(exp.Message); } return(false); }
public bool Parse(String msg, out CReportStruct report) { //6013 $60131G2201161111040003046112271367 report = null; try { string data = string.Empty; if (!ProtocolHelpers.DeleteSpecialChar(msg, out data)) { return(false); } // 解析站点ID String stationID = data.Substring(0, 4); // 解析通信类别 String type = data.Substring(4, 2); // 解析报文类别 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(data.Substring(6, 2)); // 解析站点类别 //EStationType stationType = EStationType.EHydrology; //String stationTypeStr = data.Substring(8, 2); //switch (stationTypeStr) //{ // case "01": // 雨量 // stationType = EStationType.ERainFall; // break; // case "02": // 水位 // case "12": // stationType = EStationType.ERiverWater; // break; // case "03": // 水文 // case "13": // stationType = EStationType.EHydrology; // break; //} EStationType stationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(8, 2)); // 解析接收时间 DateTime recvTime = DateTime.Now; // 获取数据段,不包含站号、类别、报类、站类信息 var lists = data.Substring(10).Split(CSpecialChars.BALNK_CHAR); var datas = GetData(lists, stationType); report = new CReportStruct() { Stationid = stationID, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; return(true); } catch (Exception exp) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("上行指令解析数据不完整!" + exp.Message); } return(false); }
private bool DealWithLineData(string str, int lineNumber, ref string strErroInfo, ref List <string> gprs) { Boolean flag = false; //if (str.StartsWith("(") && str.EndsWith(")")) //{ // gm 添加 //string tmp = str.Substring(1, str.Length - 2); string[] arrayStr = str.Split(','); if (arrayStr.Length == 21) { if (arrayStr[0].Length == 4) { try { string stationId = arrayStr[0].Trim(); int subcenterid = 2; try { subcenterid = CDBDataMgr.Instance.GetSubCenterByName(arrayStr[3]).SubCenterID; } #pragma warning disable CS0168 // 声明了变量“ew”,但从未使用过 catch (Exception ew) #pragma warning restore CS0168 // 声明了变量“ew”,但从未使用过 { } if (CDBDataMgr.Instance.GetStationById(stationId) != null) { strErroInfo = string.Format("行:{0} 站点不能重复\"{1}\"", lineNumber, stationId); return(false); } //int subcenterid = int.Parse(arrayStr[1]); string stationname = arrayStr[1].Trim(); EStationType stationtype = CEnumHelper.UIStrToStationType(arrayStr[2]); if (stationtype == EStationType.ERainFall) { float RAccuracy = 0.5f; try { RAccuracy = float.Parse(arrayStr[8]); } #pragma warning disable CS0168 // 声明了变量“e5”,但从未使用过 catch (Exception e5) #pragma warning restore CS0168 // 声明了变量“e5”,但从未使用过 { RAccuracy = 0.5f; } Decimal RChange = 20.0M; try { RChange = Decimal.Parse(arrayStr[9]); } #pragma warning disable CS0168 // 声明了变量“e6”,但从未使用过 catch (Exception e6) #pragma warning restore CS0168 // 声明了变量“e6”,但从未使用过 { RChange = 20.0M; } string Gsm = arrayStr[10].Trim(); string Gprs = arrayStr[11].Trim(); if (Gprs != "" && gprs.Contains(Gprs)) { strErroInfo = string.Format("行:{0} 数据格式错误,GPRS与已有站点重复", lineNumber); return(false); } else { gprs.Add(Gprs); } string BDSatellite = arrayStr[12].Trim(); string BDmember = arrayStr[13].Trim(); float VoltageMin = 11; try { VoltageMin = float.Parse(arrayStr[14]); } #pragma warning disable CS0168 // 声明了变量“er”,但从未使用过 catch (Exception er) #pragma warning restore CS0168 // 声明了变量“er”,但从未使用过 { VoltageMin = 11; } string maintran = arrayStr[15].Trim(); string subtran = arrayStr[16].Trim(); string dataprotocol = arrayStr[17].Trim(); //string watersensor = arrayStr[18].Trim(); string rainsensor = arrayStr[19].Trim(); string reportinterval = arrayStr[20].Trim(); CEntityStation tmp = new CEntityStation(); tmp.StationID = stationId; tmp.SubCenterID = subcenterid; tmp.StationName = stationname; tmp.StationType = stationtype; //tmp.DWaterBase = WBase; //tmp.DWaterMax = WMax; //tmp.DWaterMin = WMin; //tmp.DWaterChange = WChange; tmp.DRainAccuracy = RAccuracy; tmp.DRainChange = RChange; tmp.GSM = Gsm; tmp.GPRS = Gprs; tmp.BDSatellite = BDSatellite; tmp.BDMemberSatellite = BDmember; tmp.DVoltageMin = VoltageMin; //判定maintrain不能为空 if (maintran == "SX-GPRS" || maintran == "HD-GPRS" || maintran == "GSM" || maintran == "Beidou-Normal" || maintran == "Beidou-500") { tmp.Maintran = maintran; } else { strErroInfo = string.Format("行:{0} 数据格式错误,主信道不能为空", lineNumber); return(false); } //判定subtran不能为空 if (subtran == "SX-GPRS" || subtran == "HD-GPRS" || subtran == "GSM" || subtran == "Beidou-Normal" || subtran == "Beidou-500" || subtran == "无") { tmp.Subtran = subtran; } else { strErroInfo = string.Format("行:{0} 数据格式错误,备用信道不能为空", lineNumber); return(false); } //判定数据协议不能为空 if (dataprotocol == "LN" || dataprotocol == "ZYJBX") { tmp.Datapotocol = dataprotocol; } else { strErroInfo = string.Format("行:{0} 数据格式错误,数据协议出错", lineNumber); return(false); } // 判定watersensor不能为空 //if (watersensor == "浮子水位" || watersensor == "气泡水位" || watersensor == "压阻水位" || watersensor == "雷达水位" || watersensor == "无") //{ // tmp.Watersensor = CEnumHelper.WaterSensorTypeToDBStr(maintran).ToString(); //} //else //{ // strErroInfo = string.Format("行:{0} 数据格式错误,水位传感器不能为空", lineNumber); // return false; //} // 判定Rainsensor不能为空 if (rainsensor == "翻斗雨量" || rainsensor == "雨雪雨量" || rainsensor == "无") { tmp.Rainsensor = CEnumHelper.RainSensorTypeToDBStr(rainsensor).ToString(); } else { strErroInfo = string.Format("行:{0} 数据格式错误,雨量传感器不能为空", lineNumber); return(false); } //检测报讯断次 if (reportinterval == "1" || reportinterval == "4" || reportinterval == "8" || reportinterval == "12" || reportinterval == "24" || reportinterval == "48") { tmp.Reportinterval = reportinterval; } else { strErroInfo = string.Format("行:{0} 数据格式错误,报讯断次不能为空", lineNumber); return(false); } tmp.Reportinterval = reportinterval; m_listImport.Add(tmp); flag = true; } else if (stationtype == EStationType.ERiverWater) { Decimal WBase = 0.0M; try { WBase = Decimal.Parse(arrayStr[4]); } #pragma warning disable CS0168 // 声明了变量“e1”,但从未使用过 catch (Exception e1) #pragma warning restore CS0168 // 声明了变量“e1”,但从未使用过 { WBase = 0; } Decimal WMax = 100M; try { WMax = Decimal.Parse(arrayStr[5]); } #pragma warning disable CS0168 // 声明了变量“e2”,但从未使用过 catch (Exception e2) #pragma warning restore CS0168 // 声明了变量“e2”,但从未使用过 { WMax = 100M; } Decimal WMin = 0.1M; try { WMin = Decimal.Parse(arrayStr[6]); } #pragma warning disable CS0168 // 声明了变量“e3”,但从未使用过 catch (Exception e3) #pragma warning restore CS0168 // 声明了变量“e3”,但从未使用过 { WMin = 0.1M; } Decimal WChange = 2.2M; try { WChange = Decimal.Parse(arrayStr[7]); } #pragma warning disable CS0168 // 声明了变量“e4”,但从未使用过 catch (Exception e4) #pragma warning restore CS0168 // 声明了变量“e4”,但从未使用过 { WChange = 2.2M; } //float RAccuracy = 0.5f; //try //{ // RAccuracy = float.Parse(arrayStr[8]); //} //catch (Exception e5) //{ // RAccuracy = 0.5f; //} //Decimal RChange = 20.0M; //try //{ // RChange = Decimal.Parse(arrayStr[9]); //} //catch (Exception e6) //{ // RChange = 20.0M; //} string Gsm = arrayStr[10].Trim(); string Gprs = arrayStr[11].Trim(); if (Gprs != "" && gprs.Contains(Gprs)) { strErroInfo = string.Format("行:{0} 数据格式错误,GPRS与已有站点重复", lineNumber); return(false); } else { gprs.Add(Gprs); } string BDSatellite = arrayStr[12].Trim(); string BDmember = arrayStr[13].Trim(); float VoltageMin = float.Parse(arrayStr[14]); string maintran = arrayStr[15].Trim(); string subtran = arrayStr[16].Trim(); string dataprotocol = arrayStr[17].Trim(); string watersensor = arrayStr[18].Trim(); //string rainsensor = arrayStr[19].Trim(); string reportinterval = arrayStr[20].Trim(); CEntityStation tmp = new CEntityStation(); tmp.StationID = stationId; tmp.SubCenterID = subcenterid; tmp.StationName = stationname; tmp.StationType = stationtype; tmp.DWaterBase = WBase; tmp.DWaterMax = WMax; tmp.DWaterMin = WMin; tmp.DWaterChange = WChange; //tmp.DRainAccuracy = RAccuracy; //tmp.DRainChange = RChange; tmp.GSM = Gsm; tmp.GPRS = Gprs; tmp.BDSatellite = BDSatellite; tmp.BDMemberSatellite = BDmember; tmp.DVoltageMin = VoltageMin; //判定maintrain不能为空 if (maintran == "SX-GPRS" || maintran == "HD-GPRS" || maintran == "GSM" || maintran == "Beidou-Normal" || maintran == "Beidou-500") { tmp.Maintran = maintran; } else { strErroInfo = string.Format("行:{0} 数据格式错误,主信道不能为空", lineNumber); return(false); } //判定subtran不能为空 if (subtran == "SX-GPRS" || subtran == "HD-GPRS" || subtran == "GSM" || subtran == "Beidou-Normal" || subtran == "Beidou-500" || subtran == "无") { tmp.Subtran = subtran; } else { strErroInfo = string.Format("行:{0} 数据格式错误,备用信道不能为空", lineNumber); return(false); } //判定数据协议不能为空 if (dataprotocol == "LN" || dataprotocol == "ZYJBX") { tmp.Datapotocol = dataprotocol; } else { strErroInfo = string.Format("行:{0} 数据格式错误,数据协议出错", lineNumber); return(false); } // 判定watersensor不能为空 if (watersensor == "浮子水位" || watersensor == "气泡水位" || watersensor == "压阻水位" || watersensor == "雷达水位" || watersensor == "无") { tmp.Watersensor = CEnumHelper.WaterSensorTypeToDBStr(watersensor).ToString(); } else { strErroInfo = string.Format("行:{0} 数据格式错误,水位传感器不能为空", lineNumber); return(false); } // 判定Rainsensor不能为空 //if (rainsensor == "翻斗雨量" || rainsensor == "雨雪雨量" || rainsensor == "无") //{ // tmp.Rainsensor = CEnumHelper.RainSensorTypeToDBStr(maintran).ToString(); //} //else //{ // strErroInfo = string.Format("行:{0} 数据格式错误,雨量传感器不能为空", lineNumber); // return false; //} //检测报讯断次 if (reportinterval == "1" || reportinterval == "4" || reportinterval == "8" || reportinterval == "12" || reportinterval == "24" || reportinterval == "48") { tmp.Reportinterval = reportinterval; } else { strErroInfo = string.Format("行:{0} 数据格式错误,报讯断次不能为空", lineNumber); return(false); } //tmp.Reportinterval = reportinterval; m_listImport.Add(tmp); flag = true; } else if (stationtype == EStationType.EHydrology) { Decimal WBase = 0.0M; try { WBase = Decimal.Parse(arrayStr[4]); } #pragma warning disable CS0168 // 声明了变量“e1”,但从未使用过 catch (Exception e1) #pragma warning restore CS0168 // 声明了变量“e1”,但从未使用过 { WBase = 0; } Decimal WMax = 100M; try { WMax = Decimal.Parse(arrayStr[5]); } #pragma warning disable CS0168 // 声明了变量“e2”,但从未使用过 catch (Exception e2) #pragma warning restore CS0168 // 声明了变量“e2”,但从未使用过 { WMax = 100M; } Decimal WMin = 0.1M; try { WMin = Decimal.Parse(arrayStr[6]); } #pragma warning disable CS0168 // 声明了变量“e3”,但从未使用过 catch (Exception e3) #pragma warning restore CS0168 // 声明了变量“e3”,但从未使用过 { WMin = 0.1M; } Decimal WChange = 2.2M; try { WChange = Decimal.Parse(arrayStr[7]); } #pragma warning disable CS0168 // 声明了变量“e4”,但从未使用过 catch (Exception e4) #pragma warning restore CS0168 // 声明了变量“e4”,但从未使用过 { WChange = 2.2M; } float RAccuracy = 0.5f; try { RAccuracy = float.Parse(arrayStr[8]); } #pragma warning disable CS0168 // 声明了变量“e5”,但从未使用过 catch (Exception e5) #pragma warning restore CS0168 // 声明了变量“e5”,但从未使用过 { RAccuracy = 0.5f; } Decimal RChange = 20.0M; try { RChange = Decimal.Parse(arrayStr[9]); } #pragma warning disable CS0168 // 声明了变量“e6”,但从未使用过 catch (Exception e6) #pragma warning restore CS0168 // 声明了变量“e6”,但从未使用过 { RChange = 20.0M; } string Gsm = arrayStr[10].Trim(); string Gprs = arrayStr[11].Trim(); if (Gprs != "" && gprs.Contains(Gprs)) { strErroInfo = string.Format("行:{0} 数据格式错误,GPRS与已有站点重复", lineNumber); return(false); } else { gprs.Add(Gprs); } string BDSatellite = arrayStr[12].Trim(); string BDmember = arrayStr[13].Trim(); float VoltageMin = float.Parse(arrayStr[14]); string maintran = arrayStr[15].Trim(); string subtran = arrayStr[16].Trim(); string dataprotocol = arrayStr[17].Trim(); string watersensor = arrayStr[18].Trim(); string rainsensor = arrayStr[19].Trim(); string reportinterval = arrayStr[20].Trim(); CEntityStation tmp = new CEntityStation(); tmp.StationID = stationId; tmp.SubCenterID = subcenterid; tmp.StationName = stationname; tmp.StationType = stationtype; tmp.DWaterBase = WBase; tmp.DWaterMax = WMax; tmp.DWaterMin = WMin; tmp.DWaterChange = WChange; tmp.DRainAccuracy = RAccuracy; tmp.DRainChange = RChange; tmp.GSM = Gsm; tmp.GPRS = Gprs; tmp.BDSatellite = BDSatellite; tmp.BDMemberSatellite = BDmember; tmp.DVoltageMin = VoltageMin; //判定maintrain不能为空 if (maintran == "SX-GPRS" || maintran == "HD-GPRS" || maintran == "GSM" || maintran == "Beidou-Normal" || maintran == "Beidou-500") { tmp.Maintran = maintran; } else { strErroInfo = string.Format("行:{0} 数据格式错误,主信道不能为空", lineNumber); return(false); } //判定subtran不能为空 if (subtran == "SX-GPRS" || subtran == "HD-GPRS" || subtran == "GSM" || subtran == "Beidou-Normal" || subtran == "Beidou-500" || subtran == "无") { tmp.Subtran = subtran; } else { strErroInfo = string.Format("行:{0} 数据格式错误,备用信道不能为空", lineNumber); return(false); } //判定数据协议不能为空 if (dataprotocol == "LN" || dataprotocol == "ZYJBX") { tmp.Datapotocol = dataprotocol; } else { strErroInfo = string.Format("行:{0} 数据格式错误,数据协议出错", lineNumber); return(false); } // 判定watersensor不能为空 if (watersensor == "浮子水位" || watersensor == "气泡水位" || watersensor == "压阻水位" || watersensor == "雷达水位" || watersensor == "无") { tmp.Watersensor = CEnumHelper.WaterSensorTypeToDBStr(watersensor).ToString(); } else { strErroInfo = string.Format("行:{0} 数据格式错误,水位传感器不能为空", lineNumber); return(false); } // 判定Rainsensor不能为空 if (rainsensor == "翻斗雨量" || rainsensor == "雨雪雨量" || rainsensor == "无") { tmp.Rainsensor = CEnumHelper.RainSensorTypeToDBStr(rainsensor).ToString(); } else { strErroInfo = string.Format("行:{0} 数据格式错误,雨量传感器不能为空", lineNumber); return(false); } //检测报讯断次 if (reportinterval == "1" || reportinterval == "4" || reportinterval == "8" || reportinterval == "12" || reportinterval == "24" || reportinterval == "48") { tmp.Reportinterval = reportinterval; } else { strErroInfo = string.Format("行:{0} 数据格式错误,报讯断次不能为空", lineNumber); return(false); } tmp.Reportinterval = reportinterval; m_listImport.Add(tmp); flag = true; } } catch (Exception e) { strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber); Debug.WriteLine(e.ToString()); return(false); } } } else { strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber); return(false); } return(flag); //if (str.StartsWith("(") && str.EndsWith(")")) //{ // return false; //} //else //{ // // 格式不对 // strErroInfo = (string.Format("行:{0} 开始结束符号\"(\"\")\"格式错误", lineNumber)); // return false; //} }
public bool Parse_New(string msg, out List <CUpReport> upReport) { upReport = new List <CUpReport>(); CUpReport report = null; var msgSegs = msg.Split(CSpecialChars.BALNK_CHAR); foreach (var msgItem in msgSegs) { try { string data = string.Empty; if (!ProtocolHelpers.DeleteSpecialChar(msgItem, out data)) { return(false); } // 解析站点ID String stationID = data.Substring(0, 4); // 解析通信类别 String type = data.Substring(4, 2); // 解析报文类别 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(data.Substring(6, 2)); // 解析站点类别 EStationType stationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(8, 2)); // 解析包序号 string packageNum = data.Substring(10, 4); // 解析接收时间 DateTime recvTime = new DateTime( year: Int32.Parse("20" + data.Substring(14, 2)), //年 month: Int32.Parse(data.Substring(16, 2)), //月 day: Int32.Parse(data.Substring(18, 2)), //日 hour: Int32.Parse(data.Substring(20, 2)), //时 minute: Int32.Parse(data.Substring(22, 2)), //分 second: 0 ); // 解析数据 CUpData upData = new CUpData(); string item = data.Substring(24); while (item.Length > 2) { try { // 数据分为两部分 // 2 Byte 指令 + 剩下的为数据,数据的长度>= 1 // 解析指令类型param ENewParam param = NewTypeMaps.NewParamMap.FindKey(item.Substring(0, 2)); // 如果接收到的数据段长度大于2,表示对应的字段有值 // 默认为String.Empty string info = string.Empty; int length = Int32.Parse(NewTypeMaps.NewParamLengthMap.FindValue(param)); info = item.Substring(2, length); item = item.Substring(2 + length); if (String.IsNullOrEmpty(info) && ProtocolHelpers.isLegalCharacters(info)) { continue; } switch (param) { case ENewParam.Rain: upData.Rain = Decimal.Parse(info); break; case ENewParam.Water1: upData.Water1 = Decimal.Parse(info) * (Decimal)0.01; break; case ENewParam.Water2: upData.Water2 = Decimal.Parse(info) * (Decimal)0.01; break; case ENewParam.Clock: int year = Int32.Parse("20" + info.Substring(0, 2)); int month = Int32.Parse(info.Substring(2, 2)); int day = Int32.Parse(info.Substring(4, 2)); int hour = Int32.Parse(info.Substring(6, 2)); int minute = Int32.Parse(info.Substring(8, 2)); int second = Int32.Parse(info.Substring(10, 2)); upData.Time = new DateTime(year, month, day, hour, minute, second); break; case ENewParam.Voltage: upData.Voltage = (Decimal.Parse(info) * (Decimal)0.01); break; case ENewParam.WaterInterval: int WaterInterval = Int32.Parse(info); break; case ENewParam.RainInterval: int RainInterval = Int32.Parse(info); break; case ENewParam.ETimedNum: int ETimedNum = Int32.Parse(info); break; case ENewParam.ESaveNum: int ESaveNum = Int32.Parse(info); break; case ENewParam.WaterBase1: Decimal WaterBase1 = Decimal.Parse(info) * (Decimal)0.01; break; case ENewParam.WaterBase2: Decimal WaterBase2 = Decimal.Parse(info) * (Decimal)0.01; break; case ENewParam.MannualWater: DateTime MannualWaterTime = new DateTime( year: Int32.Parse(info.Substring(0, 2)), month: Int32.Parse(info.Substring(2, 2)), day: Int32.Parse(info.Substring(4, 2)), hour: Int32.Parse(data.Substring(6, 2)), minute: Int32.Parse(data.Substring(8, 2)), second: 0 ); Decimal MannualWater = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01; upData.WaterList.Add(MannualWaterTime, MannualWater); break; case ENewParam.WaterAddRange: Decimal WaterAddRange = Decimal.Parse(info); break; case ENewParam.RainAddRange: Decimal RainAddRange = Decimal.Parse(info); break; case ENewParam.DestPhoneNum1: string DestPhoneNum1 = info; break; case ENewParam.DestPhoneNum2: string DestPhoneNum2 = info; break; case ENewParam.TerminalNum: string TerminalNum = info; break; case ENewParam.RespWave: string RespWave = info; break; case ENewParam.WavePost: int WavePost = Int32.Parse(info); break; case ENewParam.WorkStatus: EWorkStatus WorkStatus = OldTypeMaps.WorkStatus4ProtoMap.FindKey(info); break; case ENewParam.StandbyChannel: ChannelType MainChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info); System.Diagnostics.Debug.Assert(MainChannel != ChannelType.None, "主用信道不能为NONE"); ChannelType ViceChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info.Substring(2, 2)); break; case ENewParam.GSMSignal: Decimal GSMSignal = Decimal.Parse(info); break; case ENewParam.MannualFlow: DateTime MannualFlowTime = new DateTime( year: Int32.Parse(info.Substring(0, 2)), month: Int32.Parse(info.Substring(2, 2)), day: Int32.Parse(info.Substring(4, 2)), hour: Int32.Parse(data.Substring(6, 2)), minute: Int32.Parse(data.Substring(8, 2)), second: 0 ); upData.Time = MannualFlowTime; upData.WaterFlow = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01; break; case ENewParam.GSMElec: EGSMElec GSMElec = OldTypeMaps.GSMElec4ProtoMap.FindKey(info); break; case ENewParam.WaterTemp: upData.WaterTemp = Decimal.Parse(info) * (Decimal)0.1; break; case ENewParam.FourWaterTemp: var waterTempList = new Dictionary <DateTime, Decimal>(); DateTime WaterTempTime = recvTime; for (int i = 1; i <= 4; i++) { Decimal WaterTemp = Decimal.Parse(info.Substring(0, 4)) * (Decimal)0.1; WaterTempTime = recvTime.AddHours(-6 * (i - 1)); info = info.Substring(4); waterTempList.Add(WaterTempTime, WaterTemp); } upData.TempList = waterTempList; break; case ENewParam.DataPackNum: int DataPackNum = Int32.Parse(info); break; default: break; } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("下行指令解析数据不完整!" + e.Message); break; } //填充基本数据 report = new CUpReport() { Stationid = stationID, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, PackageNum = packageNum, Data = upData }; upReport.Add(report); } } catch (Exception exp) { System.Diagnostics.Debug.WriteLine(exp.Message); continue; } } return(true); }
public bool Parse_Old(string msg, out List <CUpReport> upReport) { upReport = new List <CUpReport>(); var msgSegs = msg.Split(CSpecialChars.BALNK_CHAR); foreach (var msgItem in msgSegs) { try { CUpReport report = null; string data = string.Empty; if (!ProtocolHelpers.DeleteSpecialChar(msgItem, out data)) { return(false); } // 解析站点ID String StationID = data.Substring(0, 4); // 解析通信类别 String type = data.Substring(4, 2); // 解析报文类别 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(data.Substring(6, 2)); // 解析站点类别 EStationType stationType = ProtocolHelpers.ProtoStr2StationType(data.Substring(8, 2)); // 解析接收时间 DateTime recvTime = new DateTime( year: Int32.Parse("20" + data.Substring(10, 2)), //年 month: Int32.Parse(data.Substring(12, 2)), //月 day: Int32.Parse(data.Substring(14, 2)), //日 hour: Int32.Parse(data.Substring(16, 2)), //时 minute: Int32.Parse(data.Substring(18, 2)), //分 second: 0 ); // 解析包序号 string packageNum = data.Substring(20, 2); // 解析数据 string item = data.Substring(22); CUpData upData = new CUpData(); while (item.Length > 2) { try { // 数据分为两部分 // 2 Byte 指令 + 剩下的为数据,数据的长度>= 1 // 解析指令类型param EOldParam param = OldTypeMaps.OldParamMap.FindKey(item.Substring(0, 2)); // 如果接收到的数据段长度大于2,表示对应的字段有值 // 默认为String.Empty string info = string.Empty; int length = Int32.Parse(OldTypeMaps.OldParamLengthMap.FindValue(param)); info = item.Substring(2); if (String.IsNullOrEmpty(info) && ProtocolHelpers.isLegalCharacters(info)) { continue; } switch (param) { case EOldParam.Rain: upData.Rain = Decimal.Parse(info.Substring(0, length)); break; case EOldParam.Water: upData.Water1 = Decimal.Parse(info.Substring(0, length)) * (Decimal)0.01; break; case EOldParam.WaterTimed: // 将水位定时报中的数据储存到list中 var waterList = new Dictionary <DateTime, Decimal>(); int roundNum = Int32.Parse(info.Substring(0, 2)); var watersegs = info; if (roundNum == 01 || roundNum == 02) { roundNum = roundNum == 01 ? 12 : 24; length = roundNum == 24 ? 96 : 48; watersegs = info.Substring(2); } else { roundNum = 12; } recvTime = recvTime.AddMinutes(-5 * roundNum); for (int i = 1; i <= roundNum; i++) { DateTime WaterTime = recvTime.AddMinutes(5); Decimal TimedWater = Decimal.Parse(watersegs.Substring(0, 4)) * (Decimal)0.01; waterList.Add(WaterTime, TimedWater); watersegs = watersegs.Substring(4); } upData.WaterList = waterList; break; case EOldParam.HalfVoltage: // 将电压值存入list中 var halfVoltageList = new Dictionary <DateTime, Decimal>(); DateTime HalfVoltageTime = recvTime; for (int i = 1; i <= 12; i++) { Decimal Voltage = Decimal.Parse(info.Substring(0, 4)) * (Decimal)0.01; HalfVoltageTime = recvTime.AddHours(-1 * (i - 1)); halfVoltageList.Add(HalfVoltageTime, Voltage); info = info.Substring(4); } upData.VoltageList = halfVoltageList; break; case EOldParam.Voltage: upData.Voltage = (Decimal.Parse(info.Substring(0, length)) * (Decimal)0.01); break; case EOldParam.AllVoltage: // 将电压值存入list中 var allVoltageList = new Dictionary <DateTime, Decimal>(); DateTime AllVoltageTime = recvTime; for (int i = 1; i <= 24; i++) { Decimal Voltage = Decimal.Parse(info.Substring(0, 4)) * (Decimal)0.01; AllVoltageTime = recvTime.AddHours(-1 * (i - 1)); allVoltageList.Add(AllVoltageTime, Voltage); info = info.Substring(4); } upData.VoltageList = allVoltageList; break; case EOldParam.Interval: int Interval = Int32.Parse(info.Substring(0, length)); break; case EOldParam.ESaveNum: int ESaveNum = Int32.Parse(info.Substring(0, length)); break; case EOldParam.ETimedNum: int ETimedNum = Int32.Parse(info.Substring(0, length)); break; case EOldParam.WaterBase: decimal WaterBase = Decimal.Parse(info.Substring(0, length)) * (Decimal)0.01; break; case EOldParam.MannualWater: DateTime MannualWaterTime = new DateTime( year: Int32.Parse(info.Substring(0, 2)), month: Int32.Parse(info.Substring(2, 2)), day: Int32.Parse(info.Substring(4, 2)), hour: Int32.Parse(data.Substring(6, 2)), minute: Int32.Parse(data.Substring(8, 2)), second: 0 ); recvTime = MannualWaterTime; Decimal MannualWater = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01; upData.WaterList.Add(MannualWaterTime, MannualWater); break; case EOldParam.WaterAddRange: Decimal WaterAddRange = Decimal.Parse(info.Substring(0, length)); break; case EOldParam.RainAddRange: Decimal RainAddRange = Decimal.Parse(info.Substring(0, length)); break; case EOldParam.DestPhoneNum: string DestPhoneNum = info.Substring(0, length); break; case EOldParam.TerminalNum: string TerminalNum = info.Substring(0, length); break; case EOldParam.RespWave: string RespWave = info.Substring(0, length); break; case EOldParam.WavePost: int WavePost = Int32.Parse(info.Substring(0, length)); break; case EOldParam.WorkStatus: EWorkStatus WorkStatus = OldTypeMaps.WorkStatus4ProtoMap.FindKey(info.Substring(0, length)); break; case EOldParam.StandbyChannel: ChannelType MainChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info.Substring(0, 2)); System.Diagnostics.Debug.Assert(MainChannel != ChannelType.None, "主用信道不能为NONE"); ChannelType ViceChannel = OldTypeMaps.ChannelType4ProtoMap.FindKey(info.Substring(2, 2)); break; case EOldParam.GSMSignal: Decimal GSMSignal = Decimal.Parse(info.Substring(0, length)); break; case EOldParam.MannualFlow: DateTime MannualFlowTime = new DateTime( year: Int32.Parse(info.Substring(0, 2)), month: Int32.Parse(info.Substring(2, 2)), day: Int32.Parse(info.Substring(4, 2)), hour: Int32.Parse(data.Substring(6, 2)), minute: Int32.Parse(data.Substring(8, 2)), second: 0 ); recvTime = MannualFlowTime; upData.WaterFlow = Decimal.Parse(info.Substring(10, 6)) * (Decimal)0.01; break; case EOldParam.GSMElec: EGSMElec GSMElec = OldTypeMaps.GSMElec4ProtoMap.FindKey(info.Substring(0, length)); break; case EOldParam.WaterTemp: upData.WaterTemp = Decimal.Parse(info.Substring(0, length)) * (Decimal)0.1; break; case EOldParam.DataPackNum: int dataPackNum = Int32.Parse(info.Substring(0, length)); break; default: break; } item = item.Substring(2 + length); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("下行指令解析数据不完整!" + e.Message); break; } //填充基本数据 report = new CUpReport() { Stationid = StationID, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, PackageNum = packageNum, Data = upData }; upReport.Add(report); } } catch (Exception exp) { System.Diagnostics.Debug.WriteLine(exp.Message); continue; } } return(true); }
/// <summary> /// 针对后面的连续数据项,逐个数据项进行填充,最后将数据结果作为list返回。 /// </summary> /// <param name="list">原数据字符串</param> /// <param name="recvtime">接收数据时间,作为数据项的起始时间逐个往前推算。</param> /// <param name="voltage">电压值,每个数据项都要填充上电压信息</param> /// <param name="stationType">站点类型,作为读取数据部分的依据:需要读取雨量还是水位信息。</param> /// <returns>列表形式的数据集</returns> private List <CReportData> GetData(string list, DateTime recvtime, Decimal voltage, EStationType stationType) { var result = new List <CReportData>(); string tmp; for (int i = 0; i < 12; i++) { CReportData data = new CReportData(); tmp = list.Substring(i * 10, 10); if (FillData(tmp, recvtime, voltage, stationType, out data)) { result.Add(data); } recvtime = recvtime.AddMinutes(-5); } return(result); }
/// <summary> /// #S1209110500705141749 000.87001.06000.98000.76000.82 /// #S1209110500705141755 000.67000.96000.90 /// </summary> /// <param name="rawStr"></param> /// <param name="soil"></param> /// <returns></returns> /// public bool Parse(string resp, out CEntitySoilData soil, out CReportStruct report) { soil = null; report = null; report = new CReportStruct(); try { string rawStr = resp.Trim(); if (rawStr.StartsWith("#S1")) { soil = new CEntitySoilData(); // 终端机号 soil.StrDeviceNumber = rawStr.Substring(3, 8); // 数据采集时间 int year = Int32.Parse("20" + rawStr.Substring(11, 2)); int month = Int32.Parse(rawStr.Substring(13, 2)); int day = Int32.Parse(rawStr.Substring(15, 2)); int hour = Int32.Parse(rawStr.Substring(17, 2)); int minute = Int32.Parse(rawStr.Substring(19, 2)); soil.DataTime = new DateTime(year, month, day, hour, minute, 0); // #S1209110500705141749 000.87001.06000.98000.76000.82 if (rawStr.Length.Equals(22 + 30)) { soil.Voltage10 = float.Parse(rawStr.Substring(22, 6)); soil.Voltage20 = float.Parse(rawStr.Substring(28, 6)); soil.Voltage30 = float.Parse(rawStr.Substring(34, 6)); soil.Voltage40 = float.Parse(rawStr.Substring(40, 6)); soil.Voltage60 = float.Parse(rawStr.Substring(46, 6)); } // #S1209110500705141755 000.67000.96000.90 if (rawStr.Length.Equals(22 + 18)) { soil.Voltage10 = float.Parse(rawStr.Substring(22, 6)); soil.Voltage20 = float.Parse(rawStr.Substring(28, 6)); soil.Voltage40 = float.Parse(rawStr.Substring(34, 6)); } return(true); } else if (rawStr.StartsWith("$") && "1G" == rawStr.Substring(5, 2)) { soil = new CEntitySoilData(); string StationID = rawStr.Substring(1, 4); soil.StationID = StationID; // $70521G25142523453124 string cmd = rawStr.Substring(7, 2); if ("25" == cmd) { var now = DateTime.Now; soil.DataTime = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0); // $70521G25142523453124 if (21 == rawStr.Length) { soil.Voltage10 = float.Parse(rawStr.Substring(9, 4)) / 100; soil.Voltage20 = float.Parse(rawStr.Substring(13, 4)) / 100; soil.Voltage40 = float.Parse(rawStr.Substring(17, 4)) / 100; } else if (29 == rawStr.Length)// $70521G2514252345312412345678 { soil.Voltage10 = float.Parse(rawStr.Substring(9, 4)) / 100; soil.Voltage20 = float.Parse(rawStr.Substring(13, 4)) / 100; soil.Voltage30 = float.Parse(rawStr.Substring(17, 4)) / 100; soil.Voltage40 = float.Parse(rawStr.Substring(21, 4)) / 100; soil.Voltage60 = float.Parse(rawStr.Substring(25, 4)) / 100; } else { return(false); } return(true); } else if ("22" == cmd || "21" == cmd) { // $70521G2217yymmddhhmm12345600011256000100020003 EStationType stationType = EStationType.EHydrology; decimal water = decimal.Parse(rawStr.Substring(21, 6)) / 100; decimal rain = decimal.Parse(rawStr.Substring(27, 4)); decimal volegate = decimal.Parse(rawStr.Substring(31, 4)) / 100; CReportData reportData = new CReportData(); switch (rawStr.Substring(9, 2)) { case "04": stationType = EStationType.ESoil; if ("21" == cmd) { report.ReportType = EMessageType.EAdditional; } if ("22" == cmd) { report.ReportType = EMessageType.ETimed; } break; case "05": stationType = EStationType.ESoilRain; reportData.Rain = rain; reportData.Voltge = volegate; break; case "06": case "16": stationType = EStationType.ESoilWater; reportData.Water = water; reportData.Voltge = volegate; break; case "07": case "17": reportData.Rain = rain; reportData.Water = water; reportData.Voltge = volegate; stationType = EStationType.ESoilHydrology; break; default: throw new Exception(); break; } int year = Int32.Parse("20" + rawStr.Substring(11, 2)); int month = Int32.Parse(rawStr.Substring(13, 2)); int day = Int32.Parse(rawStr.Substring(15, 2)); int hour = Int32.Parse(rawStr.Substring(17, 2)); int minute = Int32.Parse(rawStr.Substring(19, 2)); DateTime collectTime = new DateTime(year, month, day, hour, minute, 0); soil.DataTime = collectTime; //gm 20161030 下1行 soil.DVoltage = volegate; if (47 == rawStr.Length) { // $7052 1G2217 yymmddhhmm 123456 0001 1256 0001 0002 0003 soil.Voltage10 = float.Parse(rawStr.Substring(35, 4)) / 100; soil.Voltage20 = float.Parse(rawStr.Substring(39, 4)) / 100; soil.Voltage40 = float.Parse(rawStr.Substring(43, 4)) / 100; // report = new CReportStruct(); report.Datas = new List <CReportData>(); report.Stationid = StationID; report.StationType = stationType; report.RecvTime = DateTime.Now; reportData.Time = DateTime.Now; report.Datas.Add(reportData); } else if (47 + 8 == rawStr.Length) { // $70521G2217yymmddhhmm123456 0001 1256 0001 0002 0003 0004 0005 soil.Voltage10 = float.Parse(rawStr.Substring(35, 4)) / 100; soil.Voltage20 = float.Parse(rawStr.Substring(39, 4)) / 100; soil.Voltage30 = float.Parse(rawStr.Substring(43, 4)) / 100; soil.Voltage40 = float.Parse(rawStr.Substring(47, 4)) / 100; soil.Voltage60 = float.Parse(rawStr.Substring(51, 4)) / 100; report = new CReportStruct(); report.Stationid = StationID; report.StationType = stationType; report.RecvTime = DateTime.Now; reportData.Time = DateTime.Now; report.Datas = new List <CReportData>(); report.Datas.Add(reportData); } else { return(false); } return(true); } } } catch (Exception exp) { } return(false); }
public string BuildQuery_Flash(string sid, EStationType stationType, ETrans trans, DateTime beginTime, DateTime endTime, EChannelType ctype) { throw new NotImplementedException(); }
/// <summary> /// 对下游局报讯报文进行处理 /// </summary> /// <param name="msg"></param> /// <param name="report"></param> /// <returns></returns> public bool Parse(String msg, out CReportStruct report) { //$30151G22010201120326001297065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239 report = null; try { string data = string.Empty; //卫星信道报 if (msg.StartsWith("$")) { data = ProtocolHelpers.dealBCD(data); } //去除起始符'$' if (!ProtocolHelpers.DeleteSpecialChar(msg, out data)) { return(false); } //站号(4位) string StationId = data.Substring(0, 4); //类别(2位):1G string type = data.Substring(4, 2); //报类(2位):22-定时报 string reportTypeString = data.Substring(6, 2); //站类(2位) string stationTypeString = data.Substring(8, 2); ///0201120326001297065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239065535323906553532390655353239 //站类区别处理 switch (reportTypeString) { //定时报 case "22": { //获取报类 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString); //获取站类 EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString); //包序号暂不处理 string packageNum = data.Substring(10, 4); //接收时间 DateTime recvTime = new DateTime( year: Int32.Parse("20" + data.Substring(14, 2)), month: Int32.Parse(data.Substring(16, 2)), day: Int32.Parse(data.Substring(18, 2)), hour: Int32.Parse(data.Substring(20, 2)), minute: 0, second: 0 ); //电压值:1297=12.97V Decimal voltage = Decimal.Parse(data.Substring(22, 4)) * (Decimal)0.01; //数据段 var lists = data.Substring(26).Replace(" ", ""); var datas = GetData(lists, recvTime, voltage, stationType); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; break; } //报讯系统加报 case "21": { if (data.Substring(8, 2) != "11") { // 解析报文类别 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString); // 解析站点类别 EStationType stationType = ProtocolHelpers.ProtoStr2StationType(stationTypeString); // 解析接收时间 DateTime recvTime = new DateTime( year: Int32.Parse("20" + data.Substring(10, 2)), //年 month: Int32.Parse(data.Substring(12, 2)), //月 day: Int32.Parse(data.Substring(14, 2)), //日 hour: Int32.Parse(data.Substring(16, 2)), //时 minute: Int32.Parse(data.Substring(18, 2)), //分 second: 0 //秒 ); var lists = data.Substring(20).Split(CSpecialChars.BALNK_CHAR); var datas = GetAddData(lists, recvTime, stationType); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; } else { //1G2111为人工水位 // 解析报文类别 EMessageType reportType = ProtocolMaps.MessageTypeMap.FindKey(reportTypeString); // 解析站点类别 EStationType stationType = EStationType.ERiverWater; // 解析接收时间 DateTime recvTime = new DateTime( year: DateTime.Now.Year, //年 month: DateTime.Now.Month, //月 day: DateTime.Now.Day, //日 hour: Int32.Parse(data.Substring(10, 2)), //时 minute: Int32.Parse(data.Substring(12, 2)), //分 second: 0 //秒 ); var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR); var datas = GetMannualData(lists, recvTime); //处理datas为空情况 if (datas.Count == 0) { return(false); } report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; } break; } //人工报 case "23": { //1G23为人工流量 // 解析报文类别 EMessageType reportType = EMessageType.EMannual; // 解析站点类别 EStationType stationType = EStationType.ERiverWater; // 解析接收时间 DateTime recvTime = new DateTime( year: DateTime.Now.Year, //年 month: DateTime.Now.Month, //月 day: Int32.Parse(data.Substring(8, 2)), //日 hour: Int32.Parse(data.Substring(10, 2)), //时 minute: Int32.Parse(data.Substring(12, 2)), //分 second: 0 //秒 ); var lists = data.Substring(14).Split(CSpecialChars.BALNK_CHAR); var datas = GetWaterData(lists, recvTime); report = new CReportStruct() { Stationid = StationId, Type = type, ReportType = reportType, StationType = stationType, RecvTime = recvTime, Datas = datas }; break; } } return(true); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("数据协议解析不完整" + e.Message); return(false); } }
public bool DealData(string msg, string reportType, out CReportStruct report) { EStationType type = new EStationType(); report = new CReportStruct(); try { string data = msg; // 丢弃流水号(4位) data = data.Substring(4); // 丢弃发报时间(12位) DateTime sendTime = new DateTime( year: int.Parse("20" + data.Substring(0, 2)), month: int.Parse(data.Substring(2, 2)), day: int.Parse(data.Substring(4, 2)), hour: int.Parse(data.Substring(6, 2)), minute: int.Parse(data.Substring(8, 2)), second: int.Parse(data.Substring(10, 2)) ); //删除发送时间 data = data.Substring(12); //删除ST 站号引导符号 data = data.Substring(2); //删除空格 data = data.Substring(1); //获取站点ID string stationId = data.Substring(0, 10); //删除站点ID data = data.Substring(10); //删除空格 data = data.Substring(1); string stationTypeString = data.Substring(0, 1); if (stationTypeString == "H") { type = EStationType.EH; } if (stationTypeString == "P") { type = EStationType.ERainFall; } //删除站点类型 data = data.Substring(1); // report中的数据初始化 List <CReportData> datas = new List <CReportData>(); TimeSpan span = new TimeSpan(0); DateTime dataTime = sendTime; //int dataAccuracyLength; //int dataLength; //Decimal dataAccuracy; //Decimal dayRain; Nullable <Decimal> diffRain = null; Nullable <Decimal> totalRain = null; Nullable <Decimal> waterStage = null; Nullable <Decimal> voltage = null; //string dataDefine, dataDefine1, dataDefine2; //int flag = 0; if (data.Length >= 10) { string[] dataArr = Regex.Split(data, "TT", RegexOptions.IgnoreCase); for (int i = 0; i < dataArr.Length; i++) { string oneGram = dataArr[i].Trim(); List <decimal> rainList = new List <decimal>(); List <decimal> waterList = new List <decimal>(); if (oneGram.Length < 10) { continue; } dataTime = new DateTime( year: int.Parse("20" + oneGram.Substring(0, 2)), month: int.Parse(oneGram.Substring(2, 2)), day: int.Parse(oneGram.Substring(4, 2)), hour: int.Parse(oneGram.Substring(6, 2)), minute: int.Parse(oneGram.Substring(8, 2)), second: 0 ); //观测时间引导符 if (oneGram.Contains("TT")) { } if (oneGram.Contains("RGZS")) { } if (oneGram.Contains("PIC")) { } if (oneGram.Contains("DRP")) { int index = oneGram.IndexOf("DRP"); string rainListStr = oneGram.Substring(index + 4, 24).Trim(); for (int j = 0; j < 12; j++) { rainList.Add((System.Int32.Parse(rainListStr.Substring(j * 2, 2), System.Globalization.NumberStyles.HexNumber)) * (decimal)(0.1)); } } if (oneGram.Contains("DRZ")) { } if (oneGram.Contains("DRZ1")) { int index = oneGram.IndexOf("DRZ1"); string waterListStr = oneGram.Substring(index + 5, 48).Trim(); for (int j = 0; j < 12; j++) { waterList.Add((System.Int32.Parse(waterListStr.Substring(j * 4, 4), System.Globalization.NumberStyles.HexNumber)) * (decimal)0.01); } } if (oneGram.Contains("DATA")) { } if (oneGram.Contains("AC")) { } if (oneGram.Contains("AI")) { } if (oneGram.Contains("C")) { } if (oneGram.Contains("DRxnn")) { } if (oneGram.Contains("DT")) { } if (oneGram.Contains("ED")) { } if (oneGram.Contains("EJ")) { } if (oneGram.Contains("FL")) { } if (oneGram.Contains("GH")) { } if (oneGram.Contains("GN")) { } if (oneGram.Contains("GS")) { } if (oneGram.Contains("GT")) { } if (oneGram.Contains("GTP")) { } if (oneGram.Contains("H")) { } if (oneGram.Contains("HW")) { } if (oneGram.Contains("M10")) { } if (oneGram.Contains("M20")) { } if (oneGram.Contains("M30")) { } if (oneGram.Contains("M40")) { } if (oneGram.Contains("M50")) { } if (oneGram.Contains("M60")) { } if (oneGram.Contains("M80")) { } if (oneGram.Contains("M100")) { } if (oneGram.Contains("MST")) { } if (oneGram.Contains("P1")) { } if (oneGram.Contains("P2")) { } if (oneGram.Contains("P3")) { } if (oneGram.Contains("P6")) { } if (oneGram.Contains("P12")) { } //日降水量 if (oneGram.Contains("PD")) { } //当前降水量 if (oneGram.Contains("PJ")) { int index = oneGram.IndexOf("PJ"); string endStr = oneGram.Substring(index).Trim(); string[] endStrList = endStr.Split(' '); string diffRainString = endStrList[1]; try { diffRain = Decimal.Parse(diffRainString); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); } } //1分钟时段降水量 if (oneGram.Contains("PN01")) { } //5分钟时段降水量 if (oneGram.Contains("PN05")) { } //10分钟时段降水量 if (oneGram.Contains("PN10")) { } //30分钟时段降水量 if (oneGram.Contains("PN30")) { } //暴雨量 if (oneGram.Contains("PR")) { } if (oneGram.Contains("PT")) { int index = oneGram.IndexOf("PT"); string endStr = oneGram.Substring(index).Trim(); string[] endStrList = endStr.Split(' '); string totalRainString = endStrList[1]; try { totalRain = Decimal.Parse(totalRainString); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); } } //瞬时河道水位、潮位 if (oneGram.Contains("Z ")) { int index = oneGram.IndexOf("Z "); string endStr = oneGram.Substring(index).Trim(); string[] endStrList = endStr.Split(' '); string waterStageString = endStrList[1]; try { waterStage = Decimal.Parse(waterStageString); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); } } //电压 if (oneGram.Contains("VT")) { int index = oneGram.IndexOf("VT"); string endStr = oneGram.Substring(index).Trim(); string[] endStrList = endStr.Split(' '); string voltageString = endStrList[1]; try { voltage = Decimal.Parse(voltageString); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); } } //定时报和均匀时段报处理 // 雨量组 和 水位组 均有数据 且数量相等。 if (rainList != null && rainList.Count > 0 && waterList != null && rainList.Count == waterList.Count) { CReportData oneData = new CReportData(); for (int k = 0; k < rainList.Count; k++) { DateTime tmpDate = dataTime.AddMinutes(5 * k); oneData.Time = tmpDate; oneData.DiffRain = rainList[k]; oneData.Water = waterList[k]; datas.Add(DeepClone(oneData)); } } // 雨量组数据 和 水位组数据不匹配 else { // if (rainList != null && rainList.Count > 0) { CReportData oneData = new CReportData(); for (int k = 0; k < rainList.Count; k++) { DateTime tmpDate = dataTime.AddMinutes(5 * k); oneData.Time = tmpDate; oneData.DiffRain = rainList[k]; datas.Add(DeepClone(oneData)); } } if (waterList != null && waterList.Count > 0) { CReportData oneData = new CReportData(); for (int k = 0; k < waterList.Count; k++) { DateTime tmpDate = dataTime.AddMinutes(5 * k); oneData.Time = tmpDate; oneData.Water = waterList[k]; datas.Add(DeepClone(oneData)); } } } //普通报文处理 if (diffRain != null || totalRain != null || voltage != null) { CReportData oneData = new CReportData(); oneData.Time = dataTime; oneData.Rain = totalRain; oneData.DiffRain = diffRain; oneData.Water = waterStage; oneData.Voltge = voltage; datas.Add(DeepClone(oneData)); } } } #region 废码代码 //while (data.Length >= 2) //{ // // 截取要素标识符 // string sign = data.Substring(0, 2); // flag = flag + 1; // if(flag > 100) // { // break; // } // // 根据要素标识符取数据 // switch (sign) // { // case "ST": // // 丢弃标识符 // data = data.Substring(2); // // 丢弃一个字节 // data = data.Substring(1); // // 丢弃一个测站地址 // data = data.Substring(10); // // 丢弃一个字节 // data = data.Substring(1); // // 遥测站分类码,不确定是不是一定在这个后面 // string stationTypeString = data.Substring(0,1); // if(stationTypeString == "H") // { // type = EStationType.EH; // } // if(stationTypeString == "P") // { // type = EStationType.ERainFall; // } // data = data.Substring(1); // //type = stationTypeString == "50" ? EStationType.ERainFall : EStationType.EHydrology; // data = data.Substring(1); // break; // case "TT": // // 丢弃标识符 // data = data.Substring(2); // //丢弃一个字节 // data = data.Substring(1); // dataTime = new DateTime( // year: int.Parse("20" + data.Substring(0, 2)), // month: int.Parse(data.Substring(2, 2)), // day: int.Parse(data.Substring(4, 2)), // hour: int.Parse(data.Substring(6, 2)), // minute: int.Parse(data.Substring(8, 2)), // second: 0 // ); // data = data.Substring(10); // //丢弃一个字节 // data = data.Substring(1); // break; // case "PD": // // 丢弃标识符 // data = data.Substring(2); // // 丢弃数据定义19 3个字节、精度1 // dataDefine1 = Convert.ToString(int.Parse(data.Substring(0, 1)), 2); // dataDefine2 = Convert.ToString(int.Parse(data.Substring(1, 1)), 2); // dataDefine = dataDefine1.PadLeft(4, '0') + dataDefine2.PadLeft(4, '0'); // dataLength = Convert.ToInt32(dataDefine.Substring(0, 5), 2) * 2; // dataAccuracyLength = Convert.ToInt32(dataDefine.Substring(5, 3), 2); // dataAccuracy = 1; // while (dataAccuracyLength > 0) // { // dataAccuracy *= (decimal)0.1; // dataAccuracyLength--; // } // data = data.Substring(2); // string dayRainString = data.Substring(0, dataLength); // data = data.Substring(dataLength); // try // { // dayRain = Decimal.Parse(dayRainString) * dataAccuracy; // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // break; // case "PJ": // // 丢弃标识符 // data = data.Substring(2); // // 丢掉一个字节 // data = data.Substring(1); // string[] rainArr = data.Split('.'); // int rainLen = rainArr[0].Length; // string rainStr = data.Substring(0,rainLen + 2); // data = data.Substring(rainLen + 2); // data = data.Substring(1); // // 丢弃数据定义19 3个字节、精度1 // string diffRainString = rainStr; // try // { // diffRain = Decimal.Parse(diffRainString); // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // break; // case "PT": // // 丢弃标识符 // data = data.Substring(2); // // 丢掉一个字节 // data = data.Substring(1); // string[] dataArr = data.Split('.'); // int tmp = dataArr[0].Length; // string totalRain = data.Substring(0,tmp + 2); // data = data.Substring(tmp + 2); // data = data.Substring(1); // // 根据长度精度解析数据 // if (reportType == "31") // { // for (int i = 0; i < 13; i++) // { // try // { // // 数据截取 // string rainString = totalRain; // if (i != 0) // { // dataTime = dataTime + span; // } // Decimal rain = 0; // rain = Decimal.Parse(rainString); // // 数据封包 // bool isExists = false; // if (datas.Count != 0) // { // foreach (var d in datas) // { // if (d.Time == dataTime) // { // isExists = true; // d.Rain = rain; // } // } // } // if (isExists == false) // { // CReportData reportData = new CReportData // { // Rain = rain, // Time = dataTime // }; // datas.Add(reportData); // } // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // } // } // else if (reportType == "32" || reportType == "33" || reportType == "30") // { // try // { // // 数据截取 // string rainString = totalRain; // Decimal rain = 0; // rain = Decimal.Parse(rainString); // // 数据封包 // bool isExists = false; // if (datas.Count != 0) // { // foreach (var d in datas) // { // if (d.Time == dataTime) // { // isExists = true; // d.Rain = rain; // } // } // } // if (isExists == false) // { // CReportData reportData = new CReportData // { // Rain = rain, // Time = dataTime // }; // datas.Add(reportData); // } // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // } // break; // case "VT": // // 丢弃标识符 // data = data.Substring(2); // //丢掉一个位置 // data = data.Substring(1); // // 丢弃数据定义?? ?个字节、精度? // string[] voltageArr = data.Split('.'); // int voltageLen = voltageArr[0].Length; // string voltageStr = data.Substring(0,voltageLen + 3); // data = data.Substring(voltageLen + 3); // data = data.Substring(1); // // 根据长度精度解析数据 // if (reportType == "31") // { // for (int i = 0; i < 13; i++) // { // try // { // // 数据截取 // string voltageString = voltageStr; // if (i != 0) // { // dataTime = dataTime + span; // } // Decimal voltage = 0; // voltage = Decimal.Parse(voltageString); // // 数据封包 // bool isExists = false; // if (datas.Count != 0) // { // foreach (var d in datas) // { // if (d.Time == dataTime) // { // isExists = true; // d.Voltge = voltage; // } // } // } // if (isExists == false) // { // CReportData reportData = new CReportData // { // Voltge = voltage, // Time = dataTime // }; // datas.Add(reportData); // } // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // } // } // else if (reportType == "32" || reportType == "33" ||reportType == "30") // { // try // { // // 数据截取 // string voltageString = voltageStr; // Decimal voltage = 0; // voltage = Decimal.Parse(voltageString); // // 数据封包 // bool isExists = false; // if (datas.Count != 0) // { // foreach (var d in datas) // { // if (d.Time == dataTime) // { // isExists = true; // d.Voltge = voltage; // } // } // } // if (isExists == false) // { // CReportData reportData = new CReportData // { // Voltge = voltage, // Time = dataTime // }; // datas.Add(reportData); // } // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // } // break; // default: // if (data.StartsWith("Z")) // { // // 丢弃标识符 // data = data.Substring(1); // //丢掉一个字节 // data = data.Substring(1); // string[] dataArr2 = data.Split('.'); // int tmp2 = dataArr2[0].Length; // // 丢弃数据定义23 4个字节、精度3 // string waterStr = data.Substring(0,tmp2 + 4); // data = data.Substring(tmp2 + 4); // data = data.Substring(1); // // 根据长度精度解析数据 // if (reportType == "31") // { // for (int i = 0; i < 13; i++) // { // try // { // // 数据截取 // string waterString = waterStr; // if (i != 0) // { // dataTime = dataTime + span; // } // Decimal water = 0; // water = Decimal.Parse(waterString); // // 数据封包 // bool isExists = false; // if (datas.Count != 0) // { // foreach (var d in datas) // { // if (d.Time == dataTime) // { // isExists = true; // d.Water = water; // } // } // } // if (isExists == false) // { // CReportData reportData = new CReportData // { // Water = water, // Time = dataTime // }; // datas.Add(reportData); // } // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // } // } // else if (reportType == "32" || reportType == "33" || reportType == "30") // { // try // { // // 数据截取 // string waterString = waterStr; // Decimal water = 0; // water = Decimal.Parse(waterString); // // 数据封包 // bool isExists = false; // if (datas.Count != 0) // { // foreach (var d in datas) // { // if (d.Time == dataTime) // { // isExists = true; // d.Water = water; // } // } // } // if (isExists == false) // { // CReportData reportData = new CReportData // { // Water = water, // Time = dataTime // }; // datas.Add(reportData); // } // } // catch (Exception e) // { // System.Diagnostics.Debug.WriteLine("规约协议数据截取错误" + e.ToString()); // } // } // } // else if (data.StartsWith("DRxnn")) // { // // 丢弃标识符 // data = data.Substring(2); // // 丢弃数据定义18 3个字节、精度0 // data = data.Substring(2); // // 时间步长 // string timeSpanString = data.Substring(0, 6); // data = data.Substring(6); // TimeSpan timeSpan = new TimeSpan(Int32.Parse(timeSpanString.Substring(0, 2)), Int32.Parse(timeSpanString.Substring(2, 2)), Int32.Parse(timeSpanString.Substring(4, 2)), 0); // span = span + timeSpan; // } // break; // } //} #endregion foreach (var d in datas) { if (!d.Rain.HasValue) { d.Rain = -1; } if (!d.Water.HasValue) { d.Water = -20000; } if (d.Voltge <= 0) { d.Voltge = -20; } } report = new CReportStruct { StationType = type, Datas = datas }; return(true); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("数据:" + msg); System.Diagnostics.Debug.WriteLine("规约协议正文解析错误" + e.Message); return(false); } }
// 检验输入是否有效 private bool AssertInputValid() { try { // 1. stationId 不能为空, 也不能重复,只能占用四个字节 string stationId = textBox_StationID.Text.Trim(); if (stationId.Equals("")) { MessageBox.Show("测站编号不能为空"); return(false); } // 测站编号不能超过10位 if (stationId.Length > 10) { MessageBox.Show("测站编码不能超过10位"); return(false); } // 判断编号是否为负数 try { int.Parse(stationId); } catch (System.Exception) { MessageBox.Show("站点编号不能含有非法字符"); return(false); } for (int i = 0; i < m_listStationCombination.Count; ++i) { if (m_listStationCombination[i].StationID.Trim() == stationId) { //MessageBox.Show(string.Format("测站站号不能重复!编号 \"{0}\" 与测站 \"{1}\" 重复", // stationId, m_listStationCombination[i].StationName.Trim())); MessageBox.Show(string.Format("水情测站站号不能重复!已存在水情测站{0}", stationId)); return(false); } } //for (int i = 0; i < m_listSoilStation.Count; ++i) //{ // if (m_listSoilStation[i].StationID.Trim() == stationId) // { // MessageBox.Show(string.Format("水情测站站号不能与墒情测站编号一样!已存在墒情测站{0}", // stationId)); // return false; // } //} if (comb_MainRoad.Text.ToString() == "SX-GPRS" || comb_PrepareRoad.Text.ToString() == "SX-GPRS") { string gprs = textBox_GPRS.Text.Trim(); if (gprs.Equals("")) { MessageBox.Show("GPRS号码不能为空!"); return(false); } else { //GPRS号码 // string gprsNum = textBox_GPRS.Text.Trim(); if (!CStringUtil.IsDigit(gprs)) { MessageBox.Show("GPRS号码参数不合法,必须全部是数字!"); return(false); } else { } } for (int i = 0; i < m_listStationCombination.Count; ++i) { if (m_listStationCombination[i].GPRS.Trim() == gprs) { MessageBox.Show(string.Format("水情测站Gprs不能重复!与水情站{0} gprs号码一样 ", m_listStationCombination[i].StationID.Trim())); return(false); } } //for (int i = 0; i < m_listSoilStation.Count; ++i) //{ // if (m_listSoilStation[i].GPRS.Trim() == gprs) // { // MessageBox.Show(string.Format("水情测站Gprs不能重复!与墒情站{0} gprs号码一样 ", // m_listSoilStation[i].StationID.Trim())); // return false; // } //} } if (System.Text.Encoding.Default.GetByteCount(stationId) > 10) { MessageBox.Show("测站ID字符数不能超过10个"); return(false); } // 2. 站名不能为空,不能超过50个字符 if (textBox_StationName.Text.Trim().Equals("")) { MessageBox.Show("站名不能为空"); return(false); } if (System.Text.Encoding.Default.GetByteCount(textBox_StationName.Text.Trim()) > 50) { MessageBox.Show("站名不能超过50个字符"); return(false); } // 3. 站类不能为空 if (cmb_StationType.Text.Equals("")) { MessageBox.Show("站点类型不能为空"); return(false); } // 4. 分中心不能为空 if (cmb_SubCenter.Text.Equals("")) { MessageBox.Show("分中心不能为空"); return(false); } // 5. 雨量精度不能为空,如果是水文站或者雨量站 EStationType type = CEnumHelper.UIStrToStationType(cmb_StationType.Text); if (type == EStationType.EHydrology || type == EStationType.ERainFall) { if (cmb_RainAccuracy.Text.Equals("")) { MessageBox.Show("雨量精度不能为空"); return(false); } } // 6. 水位基值合法 if (!textBox_WaterBase.Text.Equals("")) { try { Decimal.Parse(textBox_WaterBase.Text); } catch (System.Exception ex) { MessageBox.Show("请输入正确的水位基值" + ex.Message); return(false); } } // 7. 水位变化合法 if (!textBox_WaterChange.Text.Equals("")) { try { if (Decimal.Parse(textBox_WaterChange.Text) < 0) { MessageBox.Show("水位阀值不能为负!"); return(false); } } catch (System.Exception ex) { MessageBox.Show("请输入正确的水位变化值" + ex.Message); return(false); } } // 8. 水位最大值合法 if (!textBox_WaterMax.Text.Equals("")) { try { Decimal.Parse(textBox_WaterMax.Text); } catch (System.Exception ex) { MessageBox.Show("请输入正确的水位最大值" + ex.Message); return(false); } } // 9. 水位最小值 if (!textBox_WaterMin.Text.Equals("")) { try { Decimal.Parse(textBox_WaterMin.Text); } catch (System.Exception ex) { MessageBox.Show("请输入正确的水位最小值" + ex.Message); return(false); } } // 10. 雨量变化合法 if (!textBox_RainChange.Text.Equals("")) { try { if (Decimal.Parse(textBox_RainChange.Text) < 0) { MessageBox.Show("雨量阀值不能为负!"); return(false); } } catch (System.Exception ex) { MessageBox.Show("请输入正确的雨量变化值" + ex.Message); return(false); } } // 11. 电压下限合法 if (!textBox_Voltage.Text.Equals("")) { try { if (float.Parse(textBox_Voltage.Text) < 0) { MessageBox.Show("电压阀值不能为负!"); return(false); } } catch (System.Exception) { MessageBox.Show("请输入正确的电压阀值"); return(false); } } return(true); }catch (Exception ex) { return(false); } }
/// <summary> /// 处理6个报文 /// </summary> /// <param name="list"></param> /// <param name="recvtime"></param> /// <param name="voltage"></param> /// <param name="stationType"></param> /// <returns></returns> private List <CReportData> GetData_1(string list, DateTime recvtime, decimal voltage, EStationType stationType) { var result = new List <CReportData>(); string tmp; for (int i = 0; i < 6; i++) { CReportData data = new CReportData(); if (list.Length >= (i * 10 + 10)) { tmp = list.Substring(i * 10, 10); if (FillData(tmp, recvtime, voltage, stationType, out data)) { result.Add(data); } recvtime = recvtime.AddMinutes(-5); } } // 将结果中的数据顺序逆置 result.Reverse(); return(result); }
public void Import(CBatchStruct batch, DateTime DStartTime, DateTime DEndTime, bool isUpdate = false) { DateTime? lastTime = null; ERTDDataState tmpRTDWaterDataState = ERTDDataState.ENormal; ////gm 1024 $60091K02031610220800084505230800084505 //string rawString = rawData; //string startTime = rawString.Substring(11, 10); //string endTime = rawString.Substring(27, 6); //string strYear = 20 + startTime.Substring(0, 2); //string strMonth = startTime.Substring(2, 2); //string strStartDay = startTime.Substring(4, 2); //string strStartHour = startTime.Substring(6, 2); //string strStartMinute = startTime.Substring(8, 2); //string strEndDay = endTime.Substring(0, 2); //string strEndHour = endTime.Substring(2, 2); //string strEndMinute = endTime.Substring(4, 2); ////DateTime DStartTime = new DateTime(int.Parse(strYear), int.Parse(strMonth), int.Parse(strStartDay), int.Parse(strStartHour), int.Parse(strStartMinute), 0); ////DateTime DEndTime = new DateTime(int.Parse(strYear), int.Parse(strMonth), int.Parse(strEndDay), int.Parse(strEndHour), int.Parse(strEndMinute), 0); List <CTimeAndData> datas = batch.Datas; string stationid = batch.StationID; EStationType type = batch.StationType; CEntityStation station = m_proxyStation.QueryById(stationid); // if (type == EStationType.ERainFall) if (type == EStationType.ERiverWater) // if (true) { for (int i = 0; i < datas.Count; i++) { if (lastTime == datas[i].Time) { lastTime = datas[i].Time; continue; } lastTime = datas[i].Time; int status = 1; DateTime dt = datas[i].Time; string data = datas[i].Data.ToString(); int RawtotalRain = int.Parse(data.Substring(0, 4)); Nullable <Decimal> RawrainAccuracy = decimal.Parse((data.Substring(4, 2))); Nullable <Decimal> rainAccuracy = RawrainAccuracy / 10; Nullable <Decimal> totalRain = RawtotalRain * rainAccuracy; CEntityRain LastSharpMes = new CEntityRain(); CEntityRain LastDayMes = new CEntityRain(); //如果是第一条数据,则通过数据库获取上一条数据 if (i == 0) { Nullable <Decimal> lastTotalRain = null, lastDayTotalRain = null, lastSharpClockTotalRain = null; Nullable <DateTime> lastDayTime = null; Nullable <DateTime> lastClockSharpTime = null; Nullable <DateTime> lastDataTime = null; Nullable <Decimal> lastPeriodRain = null; Nullable <EChannelType> lastChannelType = null; Nullable <EMessageType> lastMessageType = null; LastSharpMes = m_proxyRain.GetLastSharpRain(stationid, dt); LastDayMes = m_proxyRain.GetLastDayRain(stationid, dt); lastTotalRain = m_proxyRain.GetLastRain(stationid, dt).TotalRain; lastSharpClockTotalRain = LastSharpMes.TotalRain; lastDayTotalRain = LastDayMes.TotalRain; lastClockSharpTime = LastSharpMes.TimeCollect; lastDayTime = LastDayMes.TimeCollect; //改动 // 查询成功 station.LastTotalRain = lastTotalRain; station.LastDayTotalRain = lastDayTotalRain; station.LastPeriodRain = lastPeriodRain; if (lastDataTime != null && lastDataTime.HasValue) { station.LastDataTime = lastDataTime; } if (lastClockSharpTime != null && lastClockSharpTime.HasValue) { station.LastClockSharpTime = lastClockSharpTime; } if (lastDayTime != null && lastDayTime.HasValue) { station.LastDayTime = lastDayTime; } if (lastChannelType != null && lastChannelType.HasValue) { station.LastChannelType = lastChannelType; } if (lastMessageType != null && lastMessageType.HasValue) { station.LastMessageType = lastMessageType; } //int year = dt.Year; //int month = dt.Month; //int day = dt.Day; //DateTime tmp1 = new DateTime(year, month, day, 8, 0, 0); //DateTime tmp2 = tmp1.Subtract(new TimeSpan(24, 0, 0)); //station.LastDayTime = tmp2; //lastSharpClockTotalRain = m_proxyRain.GetLastClockSharpTotalRain(stationid, dt); //lastDayTotalRain = m_proxyRain.GetLastDayTotalRain(stationid, tmp2); station.LastTotalRain = lastTotalRain; station.LastClockSharpTotalRain = lastSharpClockTotalRain; station.LastClockSharpTime = lastClockSharpTime; station.LastDayTotalRain = lastDayTotalRain; station.LastDayTime = lastDayTime; } CEntityRain rain = new CEntityRain(); rain.StationID = stationid; rain.TimeCollect = dt; rain.TotalRain = totalRain; // rain.DifferneceRain = CalDifferenceRain(rainAccuracy, RawtotalRain, station.LastTotalRain, station.DRainChange, ref status); if ((dt.Minute + dt.Second) == 0) { //rain.PeriodRain = CalPeriodRain(rainAccuracy, RawtotalRain, dt, station.LastClockSharpTotalRain); rain.PeriodRain = CalPeriodRain_2(rainAccuracy, RawtotalRain, dt, station.LastClockSharpTotalRain, station.LastClockSharpTime, station.LastTotalRain); station.LastClockSharpTotalRain = totalRain; station.LastClockSharpTime = dt; } if (dt.Hour == 8) { //rain.DayRain = CalDayRain(rainAccuracy, RawtotalRain, dt, station.LastDayTime, station.LastDayTotalRain); rain.DayRain = CalDayRain_2(rainAccuracy, RawtotalRain, dt, station.LastDayTotalRain, station.LastDayTime); station.LastDayTotalRain = totalRain; station.LastDayTime = dt; } rain.DifferneceRain = CalDifferenceRain_1(rainAccuracy, RawtotalRain, station.LastTotalRain, station.DRainChange, ref status); station.LastTotalRain = totalRain; // 待检测 rain.ChannelType = EChannelType.GPRS; rain.MessageType = EMessageType.Batch; rain.TimeRecieved = DateTime.Now; if (status == 1) { rain.BState = 1; } else { rain.BState = 0; } rainResults.Add(rain); } List <CEntityRain> listInsert = new List <CEntityRain>(); List <CEntityRain> listUpdate = new List <CEntityRain>(); List <DateTime> listDateTime = m_proxyRain.getExistsTime(stationid, DStartTime, DEndTime); for (int i = 0; i < rainResults.Count; i++) { if (listDateTime.Contains(rainResults[i].TimeCollect)) { listUpdate.Add(rainResults[i]); } else { listInsert.Add(rainResults[i]); } } m_proxyRain.AddNewRows(listInsert); //写入数据库 m_proxyRain.UpdateRows(listUpdate); //更新 //m_proxyRain.AddOrUpdate(rainResults); } //操作water表 // if (type == EStationType.ERiverWater) if (type == EStationType.ERainFall) { for (int i = 0; i < datas.Count; i++) { decimal data = 0; DateTime dt = datas[i].Time; try { string strData = datas[i].Data.Trim(); //decimal data = int.Parse(datas[i].Data) / 100; data = decimal.Parse(strData) / 100; } #pragma warning disable CS0168 // 声明了变量“e”,但从未使用过 catch (Exception e) #pragma warning restore CS0168 // 声明了变量“e”,但从未使用过 { break; } //操作water表 CEntityWater water = new CEntityWater(); water.StationID = station.StationID; water.TimeCollect = dt; water.TimeRecieved = DateTime.Now; if (station.DWaterBase.HasValue) { // 减去水位基值 water.WaterStage = data + station.DWaterBase.Value; } else { water.WaterStage = data; } water.WaterFlow = CDBDataMgr.GetInstance().GetWaterFlowByWaterStageAndStation(stationid, data); //此处 waterflow需要计算的 water.ChannelType = EChannelType.GPRS; water.MessageType = EMessageType.Batch; AssertWaterData(water, ref tmpRTDWaterDataState); //if (tmpRTDWaterDataState == ERTDDataState.ENormal) //{ // water.state = 1; //} //if (tmpRTDWaterDataState == ERTDDataState.EError) //{ // water.state = 0; //} //if (tmpRTDWaterDataState == ERTDDataState.EWarning) //{ // water.state = 2; //} waterResults.Add(water); } List <CEntityWater> listInsert = new List <CEntityWater>(); List <CEntityWater> listUpdate = new List <CEntityWater>(); List <DateTime> listDateTime = m_proxyWater.getExistsTime(stationid, DStartTime, DEndTime); for (int i = 0; i < waterResults.Count; i++) { if (listDateTime.Contains(waterResults[i].TimeCollect)) { listUpdate.Add(waterResults[i]); } else { listInsert.Add(waterResults[i]); } } // m_proxyWater.AddNewRows(listInsert); //写入数据库 m_proxyWater.UpdateRows(listUpdate); //更新数据库 //m_proxyWater.AddOrUpdate(waterResults); } }
private List <CReportData> GetAddData(IList <string> dataSegs, DateTime recvTime, EStationType stationType) { var result = new List <CReportData>(); foreach (var item in dataSegs) { CReportData data = new CReportData(); // 解析时间 data.Time = recvTime; // 根据站点类型解析数据 switch (stationType) { case EStationType.ERainFall: { // 雨量 // 解析雨量 单位mm,未乘以精度 Decimal rain = Decimal.Parse(item.Substring(6, 4)); data.Rain = rain; } break; case EStationType.EHydrology: { // 水文 // 解析雨量 单位mm,未乘以精度 Decimal rain = Decimal.Parse(item.Substring(6, 4)); // 解析水位 4(整数位) + 2(小数位) 单位m Decimal water = Decimal.Parse(item.Substring(0, 6)) * (Decimal)0.01; data.Rain = rain; data.Water = water; } break; case EStationType.ERiverWater: { // 水位 // 解析水位 4(整数位) + 2(小数位) 单位m Decimal water = Decimal.Parse(item.Substring(0, 6)) * (Decimal)0.01; data.Water = water; break; } default: break; } //解析电压 2(整数位)+ 2(小数位) 单位 V Decimal voltage = Decimal.Parse(item.Substring(10, 4)) * (Decimal)0.01; data.Voltge = voltage; result.Add(data); } return(result); }
private List <CReportData> GetData(IList <string> lists, DateTime recvtime, decimal voltage, EStationType stationType) { var result = new List <CReportData>(); foreach (var item in lists) { string itemData = item; string itemProcess = item; for (int i = 1; i <= 12; i++) { CReportData data = new CReportData(); itemProcess = itemData.Substring(0, 10); if (GetData(itemProcess, recvtime, voltage, stationType, out data)) { result.Add(data); } recvtime = recvtime.AddMinutes(-5); itemData = itemData.Substring(10); } } return(result); }
private void SendBatchMsg(BatchRequest request) { this.batchMsg = null; this.batchMsg = new BatchMsg() { }; this.batchList = new List <BatchData>(); EStationType stype = request.ReportType == true ? EStationType.ERainFall : EStationType.EHydrology; ETrans trans = request.TransType == true ? ETrans.ByDay : ETrans.ByHour; DateTime st = Convert.ToDateTime(request.StartTime); DateTime et = Convert.ToDateTime(request.EndTime); DateTime beginTime; DateTime endTime; if (trans == ETrans.ByHour) { beginTime = new DateTime( year: st.Year, month: st.Month, day: st.Day, hour: st.Hour, minute: 0, second: 0 ); endTime = new DateTime( year: et.Year, month: et.Month, day: et.Day, hour: et.Hour, minute: 0, second: 0 ); } else { beginTime = new DateTime( year: st.Year, month: st.Month, day: st.Day, hour: 8, minute: 0, second: 0 ); endTime = new DateTime( year: st.Year, month: et.Month, day: et.Day, hour: 8, minute: 0, second: 0 ); } string query = string.Empty; var gprs = CPortDataMgr.Instance.FindGprsByUserid(request.Gprsid); if (gprs != null) { uint dtuID = 0; if (gprs.FindByID(request.Gprsid, out dtuID)) { query = gprs.FlashBatch.BuildQuery(request.StationId, stype, trans, beginTime, endTime, EChannelType.GPRS); gprs.SendDataTwiceForBatchTrans(dtuID, query); } } else { batchMsg = new BatchMsg() { NotOL = true }; BatchData error = new BatchData(); error.StationId = request.StationId; error.NotOL = true; this.batchList.Add(error); BatchData endInfo = new BatchData(); endInfo.StationId = endInfo.StationId; endInfo.End = true; this.batchList.Add(endInfo); } }