public CN_DataList GetValues(string datastr) //得到监测元素和所对应的时段值--用于功能码2031日、2051分钟、2061小时 { //ST=32;CN=2051;QN=20040516010101001;PW=123456;MN=88888880000001;PNO=1;PNUM=1;CP=&&DataTime=20040516021000;B01-Cou=200;101-Cou=2.5,101-Min=1.1,101-Avg=1.1,101-Max=1.1;102-Cou=2.5,102-Min=2.1,102-Avg=2.1,102-Max=2.1&& CN_DataList model = new CN_DataList(); List <DataModel> DM = new List <DataModel>(); model.CN = GetCN(datastr); model.TM = GetDataTime(datastr); model.ST = GetST(datastr); datastr = datastr.Replace(" ", ""); if (datastr.LastIndexOf("&") == (datastr.Length - 5)) { datastr = datastr.Split(new string[] { "&&" }, StringSplitOptions.None)[1]; } string[] strs1 = datastr.Split(new string[] { "DataTime=" }, StringSplitOptions.None); //20040516021000;B01-Cou=200;101-Cou=2.5,101-Min=1.1,101-Avg=1.1,101-Max=1.1;102-Cou=2.5,102-Min=2.1,102-Avg=2.1,102-Max=2.1 if (strs1.Length == 2 && strs1[1].Length > 7) //7由"**-Avg="来 { string[] strs2 = strs1[1].Split(new char[] { ';', ',' }); DataModel dm; foreach (var item in strs2) { if (item.Contains("-")) { string[] strs3 = item.Split(new char[] { '-', '=' }); if (strs3.Length == 3) { decimal val; if (decimal.TryParse(strs3[2], out val)) { dm = new DataModel(); dm.ItemCode = strs3[0]; dm.KEY = strs3[1]; dm.DATAVALUE = val; DM.Add(dm); } } } } } model.DM = DM; return(model); }
public CN_DataList GetRtdValues(string datastr) //得到监测元素和所对应的实时值--用于功能码2011 { CN_DataList model = new CN_DataList(); List <DataModel> DM = new List <DataModel>(); model.CN = GetCN(datastr); model.TM = GetDataTime(datastr); model.ST = GetST(datastr); datastr = datastr.Replace(" ", ""); if (datastr.LastIndexOf("&") == (datastr.Length - 5)) { datastr = datastr.Split(new string[] { "&&" }, StringSplitOptions.None)[1]; } string[] strs1 = datastr.Split(new string[] { "DataTime=" }, StringSplitOptions.None); if (strs1.Length == 2 && strs1[1].Length > 7) //7由"**-Rtd="来 { string[] strs2 = strs1[1].Split(new char[] { ';', ',' }); DataModel dm; foreach (var item in strs2) { //实时数据 if (item.ToLower().Contains("-rtd")) { string[] strs3 = item.Split(new char[] { '-', '=' }); if (strs3.Length == 3) { decimal val; if (decimal.TryParse(strs3[2], out val)) { dm = new DataModel(); dm.ItemCode = strs3[0]; dm.KEY = "Rtd"; dm.DATAVALUE = val; DM.Add(dm); } else { #region //坐标数据 if (strs3[2].IndexOf('N') == 0 || strs3[2].IndexOf('E') == 0) { if (decimal.TryParse(strs3[2].Substring(1, strs3[2].Length - 1), out val)) { dm = new DataModel(); dm.ItemCode = strs3[0]; dm.KEY = "Rtd"; dm.DATAVALUE = val; DM.Add(dm); } } #endregion } } } //状态数据 else if (item.ToLower().Contains("-flag")) { string[] strs3 = item.Split(new char[] { '-', '=' }); if (strs3.Length == 3) { decimal val; if (decimal.TryParse(strs3[2], out val)) { dm = new DataModel(); dm.ItemCode = strs3[0]; dm.KEY = "Flag"; dm.DATAVALUE = val; DM.Add(dm); } else { dm = new DataModel(); dm.ItemCode = strs3[0]; dm.KEY = "Flag"; dm.DATAVALUE = Convert.ToInt32(Enum.Parse(typeof(Flag), strs3[2])); DM.Add(dm); } } } } model.DM = DM; } return(model); }
/// <summary> /// 上传污染物小时数据 /// </summary> /// <param name="data"></param> /// <param name="NFOINDEX"></param> /// <param name="Server"></param> internal static void Process_2061(string data, Service.ServiceEnum.NFOINDEX NFOINDEX, object Server) { try { if (pd.GetValidataLength(data)) { string MN = pd.GetMN(data); DateTime DOWNDATE = DateTime.Now; CN_DataList CD = pd.GetValues(data); //获得回复---------------------------------- if (true) { #region tcp回复 if ((int)NFOINDEX == 1) { TcpService.TcpServer TS = Server as TcpService.TcpServer; List <TcpService.TcpSocket> Ts = TS.Ts; var tcps = from t in Ts where t.STCD == MN && t.TCPSOCKET != null select t; List <TcpService.TcpSocket> Tcps = tcps.ToList <TcpService.TcpSocket>(); //没有该测站信息,不能向下执行,上“生成回复数据”没成功。 if ("" == null)//生成回复报失败---------------------- { Service.ServiceBussiness.WriteQUIM("TCP", TS.ServiceID, MN, "生成回复报出现异常!", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); return; } if (Tcps.Count() > 0) { byte[] sendData = new byte[] { }; //回复报的内容------------------------------------- Tcps.First().TCPSOCKET.Send(sendData); //回复通知界面 Service.ServiceBussiness.WriteQUIM("TCP", TS.ServiceID, MN, "回复数据", sendData, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); } } #endregion #region udp回复 if ((int)NFOINDEX == 2) { UdpService.UdpServer US = Server as UdpService.UdpServer; List <UdpService.UdpSocket> Us = US.Us; var udps = from u in Us where u.STCD == MN && u.IpEndPoint != null select u; //没有该测站信息,不能向下执行,上“生成回复数据”没成功。 if ("" == null)//生成回复报失败---------------------- { Service.ServiceBussiness.WriteQUIM("UDP", US.ServiceID, MN, "生成回复报出现异常!", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); return; } if (udps.Count() > 0) { byte[] sendData = new byte[] { }; //回复报的内容------------------------------------- US.UDPClient.Send(sendData, sendData.Length, udps.First().IpEndPoint); Service.ServiceBussiness.WriteQUIM("UDP", US.ServiceID, MN, "回复数据", sendData, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); } } #endregion } if (CD.DM.Count() > 0) { for (int i = 0; i < CD.DM.Count(); i++) { string ItemName = null; #region //入实时表 Service.Model.YY_DATA_AUTO model = new Service.Model.YY_DATA_AUTO(); model.STCD = MN; model.TM = CD.TM; //监测时间 model.ItemID = CD.DM[i].ItemCode; //监测项 model.DOWNDATE = DOWNDATE; model.DATAVALUE = CD.DM[i].DATAVALUE; //值 model.CorrectionVALUE = CD.DM[i].DATAVALUE; //存入数据库,2015.8.25添加,请检查数据库YY_DATA_AUTO表是否建立STTYPE字段 model.STTYPE = CD.ST; model.NFOINDEX = (int)NFOINDEX; model.DATATYPE = int.Parse(CD.CN); #region //2061*100 + 1 =206101 =小时数据累计值 (参考HJT212_2005.ParseData.Key) model.DATATYPE = model.DATATYPE * 100 + Convert.ToInt32(Enum.Parse(typeof(HJT212_2005.ParseData.Key), CD.DM[i].KEY)); model.TM = model.TM.AddMilliseconds(10 * Convert.ToInt32(Enum.Parse(typeof(HJT212_2005.ParseData.Key), CD.DM[i].KEY))); //避免主键冲突 #endregion #region 环保212协议特殊添加 string s4 = model.DATATYPE.ToString().Substring(0, 4); string s2 = model.DATATYPE.ToString().Substring(4, 2); switch (s4) { case "2031": ItemName = "日"; break; case "2051": ItemName = "分钟"; break; case "2061": ItemName = "小时"; break; } switch (s2) { case "01": ItemName += "|累计|"; break; case "02": ItemName += "|最大|"; break; case "03": ItemName += "|最小|"; break; case "04": ItemName += "|平均|"; break; } #endregion ItemName += GetItemName(CD.DM[i].ItemCode); Service.PublicBD.db.AddRealTimeData(model); ////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////// ///////////////////////////////////////////////////////// #region tcp通知界面 if ((int)NFOINDEX == 1) { TcpService.TcpServer TS = Server as TcpService.TcpServer; //回复通知界面 Service.ServiceBussiness.WriteQUIM("TCP", TS.ServiceID, MN, "接收到小时数据,数据特征[" + ItemName + "-" + CD.DM[i].ItemCode + "],时间[" + CD.TM + "],值[" + CD.DM[i].DATAVALUE + "]", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); var list = from rtu in TS.Ts where rtu.STCD == MN select rtu; if (list.Count() > 0) { list.First().CanSend = false; } } #endregion #region udp通知界面 if ((int)NFOINDEX == 2) { UdpService.UdpServer US = Server as UdpService.UdpServer; Service.ServiceBussiness.WriteQUIM("UDP", US.ServiceID, MN, "接收到小时数据,数据特征[" + ItemName + "-" + CD.DM[i].ItemCode + "],时间[" + CD.TM + "],值[" + CD.DM[i].DATAVALUE + "]", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); var list = from rtu in US.Us where rtu.STCD == MN select rtu; if (list.Count() > 0) { list.First().CanSend = false; } } #endregion #region gsm通知界面 if ((int)NFOINDEX == 3) { GsmService.GsmServer GS = Server as GsmService.GsmServer; Service.ServiceBussiness.WriteQUIM("GSM", GS.ServiceID, MN, "接收到小时数据,数据特征[" + ItemName + "-" + CD.DM[i].ItemCode + "],时间[" + CD.TM + "],值[" + CD.DM[i].DATAVALUE + "]", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); } #endregion #region com通知界面 if ((int)NFOINDEX == 4) { ComService.ComServer CS = Server as ComService.ComServer; Service.ServiceBussiness.WriteQUIM("COM", CS.ServiceID, MN, "接收到小时数据,数据特征[" + ItemName + "-" + CD.DM[i].ItemCode + "],时间[" + CD.TM + "],值[" + CD.DM[i].DATAVALUE + "]", new byte[] { }, Service.ServiceEnum.EnCoderType.HEX, Service.ServiceEnum.DataType.Text); } #endregion #endregion } } } } catch (Exception ex) { log.Error(DateTime.Now + "2061操作异常" + ex.ToString()); } }