Ejemplo n.º 1
0
        //
        //根据通道编号获取传感器信息
        public static IDataProcess GetDataProcess(string data, out string dataType)
        {
            try
            {
                string tdno   = common.GetTdno(data);
                Device device = common.GetDeviceByTdno(tdno);
                dataType = device.type;

                IDataProcess dataProcess = null;
                switch (device.type)
                {
                //震弦式
                case "轴力-单弦":
                case "土压":
                case "轴力-三弦":
                case "锚索-三弦":
                case "表面应变":
                case "钢筋":
                case "渗压":
                    dataProcess = new DataProcessZX(); break;

                    //485式
                }
                return(dataProcess);
            }
            catch (Exception ex)
            {
                FileOperation.WriteAppenFile("判断传感器类型失败," + ex.Message);
                throw ex;
            }
        }
Ejemplo n.º 2
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);
            }
        }