From 959c2c8c5ed83c2500a0a4b5b2ecc084e0b2bb10 Mon Sep 17 00:00:00 2001 From: MingboPeng Date: Mon, 29 May 2023 12:15:18 -0400 Subject: [PATCH] fix(Schedule): fix schedule type with a constant value --- .../Ironbug/Schedules/Ironbug_Schedule.cs | 20 +++---- .../Schedules/IB_ScheduleRuleset.cs | 45 +++++++------- src/Ironbug.HVAC_Tests/HVACComponentsTest.cs | 58 +++++++++++++++++++ 3 files changed, 92 insertions(+), 31 deletions(-) diff --git a/src/Ironbug.Grasshopper/Component/Ironbug/Schedules/Ironbug_Schedule.cs b/src/Ironbug.Grasshopper/Component/Ironbug/Schedules/Ironbug_Schedule.cs index 01b9f9a0..65a25b07 100644 --- a/src/Ironbug.Grasshopper/Component/Ironbug/Schedules/Ironbug_Schedule.cs +++ b/src/Ironbug.Grasshopper/Component/Ironbug/Schedules/Ironbug_Schedule.cs @@ -35,7 +35,6 @@ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager protected override void SolveInstance(IGH_DataAccess DA) { - var attributes = HVAC.Schedules.IB_ScheduleRuleset_FieldSet.Value; var objAttris = new Dictionary() { }; var name = string.Empty; @@ -44,7 +43,7 @@ protected override void SolveInstance(IGH_DataAccess DA) objAttris.Add(attributes.Name, name); } - + var ghObjs = new List(); DA.GetDataList(1, ghObjs); var sch = new HVAC.Schedules.IB_ScheduleRuleset(); @@ -55,17 +54,15 @@ protected override void SolveInstance(IGH_DataAccess DA) if (values.Count == 1) { sch = new HVAC.Schedules.IB_ScheduleRuleset(values[0]); - sch.SetFieldValues(objAttris); - DA.SetData(0, sch); - return; } + else + { + if (values.Count != 24) AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Need 24 valves"); + var day = new HVAC.Schedules.IB_ScheduleDay(values); + var schRule = new HVAC.Schedules.IB_ScheduleRule(day); - if (values.Count != 24) AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Need 24 valves"); - var day = new HVAC.Schedules.IB_ScheduleDay(values); - var schRule = new HVAC.Schedules.IB_ScheduleRule(day); - - sch.Rules.Add(schRule); - + sch.Rules.Add(schRule); + } } else if (ghObjs[0].Value is HVAC.Schedules.IB_ScheduleRule) { @@ -87,6 +84,7 @@ protected override void SolveInstance(IGH_DataAccess DA) sch.SetFieldValues(objAttris); DA.SetData(0, sch); + } protected override System.Drawing.Bitmap Icon => Properties.Resources.Schedule; diff --git a/src/Ironbug.HVAC/Schedules/IB_ScheduleRuleset.cs b/src/Ironbug.HVAC/Schedules/IB_ScheduleRuleset.cs index 36b5b39a..815718b7 100644 --- a/src/Ironbug.HVAC/Schedules/IB_ScheduleRuleset.cs +++ b/src/Ironbug.HVAC/Schedules/IB_ScheduleRuleset.cs @@ -84,35 +84,40 @@ public override ModelObject ToOS(Model model) else { obj = new ScheduleRuleset(model); - name = name.StartsWith("Constant Temperature") ? name : $"Constant value {this.constantNumber}"; + //name = name.StartsWith("Constant Temperature") ? name : $"Constant value {this.constantNumber}"; var defaultDay = obj.defaultDaySchedule(); + defaultDay.addValue(new Time(0, 24), this.constantNumber); + //Check Schedule type - var optionalType = model.getScheduleTypeLimitsByName($"Dimensionless max {Math.Round(constantNumber) + 1}"); - if (optionalType.isNull()) + if (this.ScheduleTypeLimits == null) { - var type = new ScheduleTypeLimits(model); - type.setUnitType("Dimensionless"); - type.setNumericType("Continuous"); - type.setName($"Dimensionless max {Math.Round(constantNumber) + 1}"); - type.setLowerLimitValue(0); - type.setUpperLimitValue(Math.Round(constantNumber) + 1); - obj.setScheduleTypeLimits(type); + // create a new default dimensionless ScheduleTypeLimits + var optionalType = model.getScheduleTypeLimitsByName($"Dimensionless max {Math.Round(constantNumber) + 1}"); + if (optionalType.isNull()) // create a new one + { + + var type = new ScheduleTypeLimits(model); + type.setUnitType("Dimensionless"); + type.setNumericType("Continuous"); + type.setName($"Dimensionless max {Math.Round(constantNumber) + 1}"); + type.setLowerLimitValue(0); + type.setUpperLimitValue(Math.Round(constantNumber) + 1); + obj.setScheduleTypeLimits(type); + } + else // use the previously created one + { + obj.setScheduleTypeLimits(optionalType.get()); + } + } - else + else // reset the type limits so that it can apply a new one later { - obj.setScheduleTypeLimits(optionalType.get()); + obj.resetScheduleTypeLimits(); } - - - defaultDay.addValue(new Time(0, 24), this.constantNumber); + } - //obj = new ScheduleRuleset(model); - - - - //obj.setName(name); } if (this.ScheduleTypeLimits != null) diff --git a/src/Ironbug.HVAC_Tests/HVACComponentsTest.cs b/src/Ironbug.HVAC_Tests/HVACComponentsTest.cs index dd478956..1b047cd2 100644 --- a/src/Ironbug.HVAC_Tests/HVACComponentsTest.cs +++ b/src/Ironbug.HVAC_Tests/HVACComponentsTest.cs @@ -154,5 +154,63 @@ public void IB_Schedule24Hrs() Assert.True(saved); } + [Test] + public void IB_ScheduleType() + { + + try + { + // create an availability schedule + var sch = new HVAC.Schedules.IB_ScheduleRuleset(); + + var values = new List() + { + 0.1,0,0,0,0,0,0,0.2,0.5,1,2,2,2,1,1,1,1,0.2,0,0,0,0,0,0 + }; + var day = new HVAC.Schedules.IB_ScheduleDay(values); + var day2 = new HVAC.Schedules.IB_ScheduleDay(1); + + var schRule = new HVAC.Schedules.IB_ScheduleRule(day2); + //schRule.AddCustomAttribute(HVAC.Schedules.IB_ScheduleRule_FieldSet.Value.ApplyMonday, true); + //schRule.AddCustomAttribute(HVAC.Schedules.IB_ScheduleRule_FieldSet.Value.ApplyTuesday, true); + //schRule.AddCustomAttribute(HVAC.Schedules.IB_ScheduleRule_FieldSet.Value.ApplyWednesday, true); + //schRule.AddCustomAttribute(HVAC.Schedules.IB_ScheduleRule_FieldSet.Value.ApplyThursday, true); + //schRule.AddCustomAttribute(HVAC.Schedules.IB_ScheduleRule_FieldSet.Value.ApplyFriday, true); + //schRule.AddCustomAttribute(HVAC.Schedules.IB_ScheduleRule_FieldSet.Value.ApplySaturday, true); + //schRule.AddCustomAttribute(HVAC.Schedules.IB_ScheduleRule_FieldSet.Value.ApplySunday, true); + sch.Rules.Add(schRule); + + var type = new HVAC.Schedules.IB_ScheduleTypeLimits(); + type.AddCustomAttribute(HVAC.Schedules.IB_ScheduleTypeLimits_FieldSet.Value.UnitType, "Availability"); + type.AddCustomAttribute(HVAC.Schedules.IB_ScheduleTypeLimits_FieldSet.Value.NumericType, "Discrete"); + type.AddCustomAttribute(HVAC.Schedules.IB_ScheduleTypeLimits_FieldSet.Value.LowerLimitValue, 0); + type.AddCustomAttribute(HVAC.Schedules.IB_ScheduleTypeLimits_FieldSet.Value.UpperLimitValue, 1); + //type.set + sch.ScheduleTypeLimits = type; + + + // create + var bd = new HVAC.IB_ZoneHVACBaseboardConvectiveElectric(); + var schField = new IB_Field("AvailabilitySchedule", ""); + bd.AddCustomAttribute(schField, sch); + + var md1 = new OpenStudio.Model(); + //var bdops = new OpenStudio.ZoneHVACBaseboardConvectiveElectric(md1); + //bdops.setAvailabilitySchedule(); + + bd.ToOS(md1); + + //string saveFile = GenFileName; + //var saved = md1.Save(saveFile); + //Assert.True(saved); + } + catch (Exception e) + { + + throw; + } + + } + } }