Ejemplo n.º 1
0
        /// <summary>
        /// 根据虚拟分组查询结果构造SensorGroup实例数组
        /// </summary>
        /// <param name="table">查询结果</param>
        /// <returns></returns>
        private IList <SensorGroup> QueryVirtuals(DataTable table)
        {
            IList <SensorGroup> virlst = new List <SensorGroup>();

            if (table == null || table.Rows.Count <= 0)
            {
                return(virlst);
            }

            var groups = from g in table.AsEnumerable()
                         group g by g.Field <int>("SENSOR_ID");

            foreach (IGrouping <int, DataRow> item in groups)
            {
                SensorGroup agroup = null;
                try
                {
                    agroup = QueryVirtual(item);
                }
                catch (Exception ex)
                {
                    throw new Exception("构造虚拟传感器分组时异常," + ex.Message);
                }
                if (agroup != null)
                {
                    virlst.Add(agroup);
                }
            }
            return(virlst);
        }
        public void TestSettlementCalc()
        {
            _dactask1    = Acq1(TID1);
            _dactask2    = Acq2(TID1);
            _sensorGroup = InitialSensorGroup();
            var calcMethod = typeof(FS.SMIS_Cloud.DAC.DataCalc.DataCalc).GetMethod("Calc",
                                                                                   BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

            calcMethod.Invoke(null, new object[] { _dactask1, new SensorGroup[] { _sensorGroup } });

            Assert.AreEqual(2, _dactask1.SensorResults.Count);
            Assert.IsFalse(_dactask1.SensorResults[0].IsOK);
            Assert.IsFalse(_dactask1.SensorResults[1].IsOK);

            _sensorGroup = InitialSensorGroup();
            calcMethod.Invoke(null, new object[] { _dactask2, new SensorGroup[] { _sensorGroup } });
            Assert.AreEqual(4, _dactask2.SensorResults.Count);
            Assert.IsFalse(_dactask2.SensorResults[0].IsOK);
            Assert.IsTrue(_dactask2.SensorResults[1].IsOK);
            Assert.IsTrue(_dactask2.SensorResults[2].IsOK);
            Assert.IsTrue(_dactask2.SensorResults[3].IsOK);
            Assert.AreEqual(0.0, _dactask2.SensorResults[1].Data.ThemeValues[0].Value, 0.000000001);
            Assert.AreEqual(-1.5, _dactask2.SensorResults[2].Data.ThemeValues[0].Value, 0.000000001);
            Assert.AreEqual(-2.6, _dactask2.SensorResults[3].Data.ThemeValues[0].Value, 0.000000001);
        }
Ejemplo n.º 3
0
        public static bool Calc(SensorGroup gp, IList <SensorAcqResult> acqs)
        {
            var alv = gp.GetVirtualItems();

            if (alv.Any())
            {
                foreach (var groupItem in alv)
                {
                    if (groupItem.VirtualGroup.GroupType == GroupType.VirtualSensor)
                    {
                        AlgorithmFactory.CreateAlgorithm(groupItem.VirtualGroup).CalcData(acqs);

                        groupItem.Value = (from acq in acqs
                                           where acq.Sensor.SensorID == groupItem.VirtualGroup.VirtualSensor.SensorID
                                           select acq).FirstOrDefault();
                    }
                }

                return(AlgorithmFactory.CreateAlgorithm(gp).CalcData(acqs));
            }
            else
            {
                return(AlgorithmFactory.CreateAlgorithm(gp).CalcData(acqs));
            }
        }
Ejemplo n.º 4
0
        private SensorGroup QueryVirtual(IGrouping <int, DataRow> item)
        {
            if (!item.Any())
            {
                return(null);
            }
            var     agroup = new SensorGroup(item.Key, GroupType.VirtualSensor);
            DataRow row    = item.First();

            // 虚拟传感器的分组信息(公式、参数、子集)
            agroup.FormulaId       = row["FORMAULAID"] == DBNull.Value ? -1 : Convert.ToInt32(row["FORMAULAID"]);
            agroup.FactorTypeId    = row["SAFETY_FACTOR_TYPE_ID"] == DBNull.Value ? -1 : Convert.ToInt32(row["SAFETY_FACTOR_TYPE_ID"]);
            agroup.FactorTypeTable = row["THEMES_TABLE_NAME"] == DBNull.Value ? "" : Convert.ToString(row["THEMES_TABLE_NAME"]);
            agroup.TableColums     = row["THEMES_COLUMNS"] == DBNull.Value ? "" : Convert.ToString(row["THEMES_COLUMNS"]);
            int paraIndex = 1;

            while (!row.IsNull("Parameter" + paraIndex))
            {
                agroup.FormulaParams.Add(Convert.ToDouble(row["Parameter" + paraIndex]));
                paraIndex++;
            }
            foreach (DataRow dr in item)
            {
                if (!dr.IsNull("CorrentSensorId"))
                {
                    agroup.AddItem(new GroupItem
                    {
                        SensorId = Convert.ToInt32(dr["CorrentSensorId"]),
                        DtuId    = Convert.ToUInt32(dr["VDTU_ID"])
                    });
                }
            }

            // 虚拟传感器的基础信息
            var virtualSensor = new Sensor
            {
                DtuID           = Convert.ToUInt32(row["DTU_ID"]),
                SensorID        = Convert.ToUInt32(row["SENSOR_ID"]),
                FormulaID       = row.IsNull("FORMAULAID") ? 0 : Convert.ToUInt32(row["FORMAULAID"]),
                FactorType      = Convert.ToUInt32(row["SAFETY_FACTOR_TYPE_ID"]),
                ProtocolType    = row.IsNull("PROTOCOL_ID") ? 0 : Convert.ToUInt32(row["PROTOCOL_ID"]),
                FactorTypeTable = Convert.ToString(row["THEMES_TABLE_NAME"]),
                TableColums     = Convert.ToString(row["THEMES_COLUMNS"]),
                SensorType      = SensorType.Virtual,
                StructId        = Convert.ToUInt32(row["STRUCT_ID"])
            };

            agroup.VirtualSensor = virtualSensor;

            return(agroup);
        }
        public void TestSettlementCalc_IncompleteAcqWithoutBase()
        {
            _dactask1    = Acq2(TID1);
            _dactask2    = Acq1(TID2);
            _sensorGroup = InitialSensorGroup();
            var calcMethod = typeof(FS.SMIS_Cloud.DAC.DataCalc.DataCalc).GetMethod("Calc",
                                                                                   BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

            calcMethod.Invoke(null, new object[] { _dactask1, new SensorGroup[] { _sensorGroup } });
            Assert.AreEqual(1, _dactask1.SensorResults.Count);
            Assert.IsFalse(_dactask1.SensorResults[0].IsOK);

            _sensorGroup = InitialSensorGroup();
            calcMethod.Invoke(null, new object[] { _dactask2, new SensorGroup[] { _sensorGroup } });
            Assert.AreEqual(2, _dactask2.SensorResults.Count);
            Assert.IsFalse(_dactask2.SensorResults[0].IsOK);
            Assert.IsFalse(_dactask2.SensorResults[1].IsOK);
        }
Ejemplo n.º 6
0
        private IList <SensorGroup> QueryVirtualSensors(uint dtuid)
        {
            IList <SensorGroup> virtualsens = new List <SensorGroup>();

            String virtualSensorQuerySql = string.Format(
                @"select s.SENSOR_ID,s.SAFETY_FACTOR_TYPE_ID,p.FORMAULAID,p.PROTOCOL_ID,
f.Parameter1,f.Parameter2,f.Parameter3,f.Parameter4,f.Parameter5,f.Parameter6,f.Parameter7,c.CorrentSensorId,
sf.THEMES_TABLE_NAME,sf.THEMES_COLUMNS 
from [dbo].[T_DIM_SENSOR] s 
left join [dbo].[T_DIM_SENSOR_PRODUCT] p on s.PRODUCT_SENSOR_ID = p.PRODUCT_ID 
left join [dbo].[T_DIM_FORMULAID_SET] f on s.SENSOR_ID=f.SENSOR_ID 
left join [dbo].[T_DIM_SENSOR_CORRENT] c on c.SensorId=s.SENSOR_ID
left join [dbo].[T_DIM_SAFETY_FACTOR_TYPE] sf on sf.SAFETY_FACTOR_TYPE_ID=s.SAFETY_FACTOR_TYPE_ID
where s.IsDeleted=0 and s.DTU_ID={0} and s.Identification=2", dtuid);

            DataTable table = _dbHelper.Query(virtualSensorQuerySql).Tables[0];

            if (table.Rows.Count > 0)
            {
                var groups = from g in table.AsEnumerable()
                             group g by g.Field <int>("SENSOR_ID");

                foreach (var item in groups)
                {
                    if (!item.Any())
                    {
                        continue;
                    }
                    var     agroup = new SensorGroup(item.Key, GroupType.VirtualSensor);
                    DataRow row    = item.First();

                    // 虚拟传感器的分组信息(公式、参数、子集)
                    agroup.FormulaId       = Convert.ToInt32(row["FORMAULAID"]);
                    agroup.FactorTypeId    = Convert.ToInt32(row["SAFETY_FACTOR_TYPE_ID"]);
                    agroup.FactorTypeTable = Convert.ToString(row["THEMES_TABLE_NAME"]);
                    agroup.TableColums     = Convert.ToString(row["THEMES_COLUMNS"]);
                    int paraIndex = 1;
                    while (!row.IsNull("Parameter" + paraIndex))
                    {
                        agroup.FormulaParams.Add(Convert.ToDouble(row["Parameter" + paraIndex]));
                        paraIndex++;
                    }
                    foreach (DataRow dr in item)
                    {
                        if (!dr.IsNull("CorrentSensorId"))
                        {
                            agroup.AddItem(new GroupItem
                            {
                                SensorId = Convert.ToInt32(dr["CorrentSensorId"])
                            });
                        }
                    }

                    // 虚拟传感器的基础信息
                    var virtualSensor = new Sensor();
                    virtualSensor.DtuID           = dtuid;
                    virtualSensor.SensorID        = Convert.ToUInt32(row["SENSOR_ID"]);
                    virtualSensor.FormulaID       = row.IsNull("FORMAULAID") ? 0 : Convert.ToUInt32(row["FORMAULAID"]);
                    virtualSensor.FactorType      = Convert.ToUInt32(row["SAFETY_FACTOR_TYPE_ID"]);
                    virtualSensor.ProtocolType    = row.IsNull("PROTOCOL_ID") ? 0 : Convert.ToUInt32(row["PROTOCOL_ID"]);
                    virtualSensor.FactorTypeTable = Convert.ToString(row["THEMES_TABLE_NAME"]);
                    virtualSensor.TableColums     = Convert.ToString(row["THEMES_COLUMNS"]);
                    virtualSensor.SensorType      = SensorType.Virtual;
                    agroup.VirtualSensor          = virtualSensor;

                    virtualsens.Add(agroup);
                }
            }

            return(virtualsens);
        }
Ejemplo n.º 7
0
        private IList <SensorGroup> QueryGroups(DataTable table)
        {
            IList <SensorGroup> grouplst = new List <SensorGroup>();

            if (table == null || table.Rows.Count <= 0)
            {
                return(grouplst);
            }
            var groupType = (GroupType)table.AsEnumerable().First().Field <int>("GROUP_TYPE_ID");
            var groups    = from g in table.AsEnumerable()
                            group g by g.Field <int>("GROUP_ID");

            foreach (var g in groups)
            {
                SensorGroup group;
                switch (groupType)
                {
                case GroupType.Inclination:
                    group = new SensorGroup(g.Key, groupType);
                    foreach (DataRow row in g)
                    {
                        var gp = new GroupItem
                        {
                            SensorId = Convert.ToInt32(row["SENSOR_ID"])
                        };
                        gp.Paramters.Add("DEPTH", Convert.ToDouble(row["DEPTH"]));
                        group.Items.Add(gp);
                    }
                    grouplst.Add(group);
                    break;

                case GroupType.Settlement:
                    group = new SensorGroup(g.Key, groupType);
                    foreach (DataRow row in g)
                    {
                        var gp = new GroupItem
                        {
                            SensorId = Convert.ToInt32(row["SENSOR_ID"])
                        };
                        gp.Paramters.Add("IsBase", Convert.ToByte(row["isJIZHUNDIAN"]));
                        group.Items.Add(gp);
                    }
                    grouplst.Add(group);
                    break;

                case GroupType.SaturationLine:
                    group = new SensorGroup(g.Key, groupType);
                    foreach (DataRow row in g)
                    {
                        var gp = new GroupItem
                        {
                            SensorId = Convert.ToInt32(row["SENSOR_ID"])
                        };
                        gp.Paramters.Add("HEIGHT", Convert.ToDouble(row["HEIGHT"]));
                        group.Items.Add(gp);
                    }
                    grouplst.Add(group);
                    break;

                default:
                    break;
                }
            }

            return(grouplst);
        }
Ejemplo n.º 8
0
 public DeepDisplacementAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.DeepDisplaceAlgo;
 }
Ejemplo n.º 9
0
        private IList <SensorGroup> QuerySettlementWithVirtualGroup(uint dtuid)
        {
            IList <SensorGroup> virtualsens = new List <SensorGroup>();

            String virtualSensorQuerySql = string.Format(@"
select cg.*,s.DTU_ID,corr.CorrentSensorId,
s.SAFETY_FACTOR_TYPE_ID,s.STRUCT_ID,sv.DTU_ID as VDTU_ID,p.FORMAULAID,p.PROTOCOL_ID,
f.Parameter1,f.Parameter2,f.Parameter3,f.Parameter4,f.Parameter5,f.Parameter6,f.Parameter7,
sf.THEMES_TABLE_NAME,sf.THEMES_COLUMNS from T_DIM_SENSOR_GROUP_CHENJIANG cg
left join T_DIM_SENSOR_CORRENT corr on corr.SensorId=cg.SENSOR_ID
left join T_DIM_SENSOR s on cg.SENSOR_ID=s.SENSOR_ID
left join T_DIM_SENSOR sv on sv.SENSOR_ID=corr.CorrentSensorId
left join T_DIM_SENSOR_PRODUCT p on s.PRODUCT_SENSOR_ID = p.PRODUCT_ID
left join T_DIM_FORMULAID_SET f on corr.SensorId=f.SENSOR_ID
left join T_DIM_SAFETY_FACTOR_TYPE sf on sf.SAFETY_FACTOR_TYPE_ID=s.SAFETY_FACTOR_TYPE_ID
where cg.GROUP_ID in
(
select A.GROUP_ID from 
(
select sg.* from T_DIM_SENSOR_GROUP_CHENJIANG sg
left join T_DIM_GROUP g on sg.GROUP_ID=g.GROUP_ID 
left join T_DIM_SENSOR s on sg.SENSOR_ID=s.SENSOR_ID 
left join T_DIM_SENSOR_CORRENT corr on corr.SensorId=sg.SENSOR_ID 
left join T_DIM_SENSOR sv on sv.SENSOR_ID=corr.CorrentSensorId
where 
(
sg.GROUP_ID in(
select distinct(GROUP_ID) from T_DIM_SENSOR_GROUP_CHENJIANG sg,T_DIM_SENSOR s
where s.SENSOR_ID=sg.SENSOR_ID and s.IsDeleted=0 and s.DTU_ID={0})
or sv.DTU_ID={0}
)
and corr.SensorId is not null 
) as A
group by GROUP_ID
)
", dtuid);

            DataTable table = _dbHelper.Query(virtualSensorQuerySql).Tables[0];

            if (table.Rows.Count > 0)
            {
                var groups = from g in table.AsEnumerable()
                             group g by g.Field <int>("GROUP_ID");

                foreach (var gitem in groups)
                {
                    if (!gitem.Any())
                    {
                        continue;
                    }
                    var agroup   = new SensorGroup(gitem.Key, GroupType.Settlement);
                    var virtuals = from vg in gitem
                                   group vg by vg.Field <int>("SENSOR_ID");

                    foreach (var vitem in virtuals)
                    {
                        if (!vitem.Any())
                        {
                            continue;
                        }

                        var gp = new GroupItem
                        {
                            SensorId = Convert.ToInt32(vitem.First()["SENSOR_ID"]),
                            DtuId    = Convert.ToUInt32(vitem.First()["DTU_ID"])
                        };
                        gp.Paramters.Add("IsBase", Convert.ToByte(vitem.First()["isJIZHUNDIAN"]));

                        if (vitem.First()["CorrentSensorId"] != DBNull.Value)
                        {
                            gp.VirtualGroup = QueryVirtual(vitem);
                        }

                        agroup.Items.Add(gp);
                    }
                    virtualsens.Add(agroup);
                }
            }
            return(virtualsens);
        }
Ejemplo n.º 10
0
 public SaturationLineAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.SaturationLineAlgo;
 }
Ejemplo n.º 11
0
 public VirtualSensorAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.VirtualSensorAlgo;
 }
 public void SetUp()
 {
     _acqResults  = InitialDataAcqResult();
     _sensorGroup = InitialSensorGroup();
 }
Ejemplo n.º 13
0
 public SettlementAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.SettlementAlgo;
 }