Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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());
            }
        }