Ejemplo n.º 1
0
        //从字符串中提取有效数据
        public bool AnalysisData(string data, string port, string dataType, int xmno = 0)
        {
            List <Model> models = new List <Model>();

            try
            {
                #region 根据协议解析数据
                string tmp        = Regex.Match(data, @"DY=\d+.\d+V").Value;
                int    startIndex = tmp.IndexOf('=') + 1;
                int    endIndex   = tmp.Length - 2;
                string dy         = tmp.Substring(startIndex, endIndex - startIndex + 1);


                string          pattern2 = @"\w+:\s+(\w+\s+){2}\d{4}/\d{2}/\d{2}\s+\d{2}:\d{2}:\d{2}\s+\w+\s+\d+.\d+\s+((\d+.\d+)|\d+)\s*";
                MatchCollection match2   = Regex.Matches(data, pattern2);
                if (match2.Count == 0)
                {
                    string info = "未能提取有效数据";
                    FileOperation.WriteAppenFile(info);
                    return(false);
                }
                else
                {
                    string info = string.Format("收到{0}条有效数据", match2.Count);
                    FileOperation.WriteAppenFile(info);
                }
                #endregion

                #region 遍历每条数据 将原始数据写入到文本中
                foreach (Match item in match2)
                {
                    Match           match1     = Regex.Match(item.Value, @"\w+:\s");
                    MatchCollection collection = Regex.Matches(item.Value, @"\d+\.\d");
                    string[]        fields     = Regex.Split(item.Value, @"\s+");

                    Model model = new Model()
                    {
                        xmno     = xmno,
                        sno      = fields[0].Substring(0, fields[0].Length - 1),
                        number   = fields[1],
                        cycle    = fields[2],
                        time     = DateTime.Parse(fields[3] + " " + fields[4]),
                        tdno     = fields[5].Substring(2),
                        valueOne = Double.Parse(fields[6]),
                        dy       = Double.Parse(dy),
                        port     = port,
                        valueTwo = Double.Parse(fields[7])
                    };
                    //将收到的数据保存到文本
                    FileOperation.WriteReceiveData(model.ToString());

                    models.Add(model);
                }
                #endregion

                #region  添加其他信息并根据公式计算得到结果
                // List<Model> resModels = dataProcessCommon.Calculate(models);
                foreach (var item in models)
                {
                    //获取该条数据所属的传感器类型
                    item.dataType = dataProcessCommon.GetDeviceByTdno(item.tdno).type;
                    //计算数据
                    item.res = dataProcessCommon.Calculate(item);

                    //获取点名
                    //model.pointName = dataProcessCommon.GetPointName(model.sno, model.tdno);
                }
                #endregion

                #region 将计算结果保存到数据库
                if (SaveData(models, 0))
                {
                    string info = string.Format("成功保存来自端口{0}的数据", port);
                    FileOperation.WriteAppenFile(info);
                    FileOperation.WriteAppenFile(info);
                    dataProcessCommon.ShowDataInfo(models);
                    return(true);
                }
                else
                {
                    return(false);
                }
                #endregion
            }
            catch (Exception ex)
            {
                string info = string.Format("保存数据失败," + ex.Message);
                FileOperation.WriteAppenFile(info);
                return(false);
            }
        }
Ejemplo n.º 2
0
        //解析通过Tcp获取的数据
        public bool AnalysisData(string data, string port, string dataType, int xmno = 0)
        {
            List <Model> models = new List <Model>();

            try
            {
                #region 根据协议解析数据
                string tmp        = Regex.Match(data, @"DY=\d+.\d+V").Value;
                int    startIndex = tmp.IndexOf('=') + 1;
                int    endIndex   = tmp.Length - 2;
                string dy         = tmp.Substring(startIndex, endIndex - startIndex + 1);

                string pattern = @"\w+:\s+\w+\s+\d{4}/\d{2}/\d{2}\s+\d{2}:\d{2}:\d{2}\s+\w+\s+((\d+.\d+\s+){1,2})";

                MatchCollection match2 = Regex.Matches(data, pattern);
                if (match2.Count == 0)
                {
                    string info = "未提取有效数据";
                    Console.WriteLine(info);
                    FileOperation.WriteAppenFile(info);
                    return(false);
                }
                #endregion

                #region 遍历每条数据 并把数据存入List
                foreach (Match item in match2)
                {
                    Match           match1     = Regex.Match(item.Value, @"\w+:\s");
                    MatchCollection collection = Regex.Matches(item.Value, @"\d+\.\d");
                    string[]        fields     = Regex.Split(item.Value, @"\s+");

                    Model model = new Model()
                    {
                        xmno     = xmno,
                        sno      = fields[0].Substring(0, fields[0].Length - 1),
                        cycle    = fields[1],
                        time     = DateTime.Parse(fields[2] + " " + fields[3]),
                        tdno     = fields[4],
                        valueOne = Double.Parse(fields[5]),
                        dy       = Double.Parse(dy),
                        port     = port,
                        dataType = dataType
                    };

                    //传递过来的有value1和value2
                    if (fields.Length > 6)
                    {
                        if (fields[6] == "")
                        {
                            model.valueTwo = 0;
                        }
                        else
                        {
                            model.valueTwo = Double.Parse(fields[6]);
                        }
                    }
                    else
                    {
                        model.valueTwo = 0;
                    }

                    //将受到的数据保存到文本
                    FileOperation.WriteAppenFile("../../data.txt", model.ToString());
                    models.Add(model);
                }
                #endregion

                #region  根据公式计算得到结果
                List <Model> resModels = dataProcessCommon.Calculate(models, dataType);
                if (resModels == null)
                {
                    string info = string.Format("计算来自端口{0}的{1}数据失败", port, dataType);
                    FileOperation.WriteAppenFile(info);
                    return(false);
                }
                #endregion

                #region 将计算结果保存到数据库
                if (SaveData(resModels, 0))
                {
                    dataProcessCommon.ShowDataInfo(resModels);
                    return(true);
                }
                else
                {
                    return(false);
                }
                #endregion
            }
            catch (Exception ex)
            {
                string info = string.Format("保存数据失败, {0}", ex.Message);
                FileOperation.WriteAppenFile(info);
                return(false);
            }
        }