/// <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); }
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)); } }
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); }
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); }
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); }
public DeepDisplacementAlgorithm(SensorGroup group) { this._sensorGroup = group; this.AlgorithmName = AlgorithmNames.DeepDisplaceAlgo; }
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); }
public SaturationLineAlgorithm(SensorGroup group) { this._sensorGroup = group; this.AlgorithmName = AlgorithmNames.SaturationLineAlgo; }
public VirtualSensorAlgorithm(SensorGroup group) { this._sensorGroup = group; this.AlgorithmName = AlgorithmNames.VirtualSensorAlgo; }
public void SetUp() { _acqResults = InitialDataAcqResult(); _sensorGroup = InitialSensorGroup(); }
public SettlementAlgorithm(SensorGroup group) { this._sensorGroup = group; this.AlgorithmName = AlgorithmNames.SettlementAlgo; }