public static void Main() { AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Thermostat thermostat = new Thermostat(); Heater heater = new Heater(60); Cooler cooler = new Cooler(80); string temperature; // Using C# 2.0 or later syntax. thermostat.OnTemperatureChange += heater.OnTemperatureChanged; // Using C# 3.0. Change to anonymous method // if using C# 2.0 thermostat.OnTemperatureChange += (newTemperature) => { throw new InvalidOperationException(); }; thermostat.OnTemperatureChange += cooler.OnTemperatureChanged; Console.Write("Enter temperature: "); temperature = Console.ReadLine(); thermostat.CurrentTemperature = int.Parse(temperature); }
public void MakeAlert(Object sender, Heater.BoiledEventArgs e) { Heater heater = (Heater)sender; //这里是不是很熟悉呢? //访问 sender 中的公共字段 Console.WriteLine("Alarm:{0} - {1}: ", heater.area, heater.type); Console.WriteLine("Alarm: 嘀嘀嘀,水已经 {0} 度了:", e.temperature); Console.WriteLine(); }
/* 1.若多次添加同一个事件处理函数时,触发时处理函数是否也会多次触发? 2.若添加了一个事件处理函数,却执行了两次或多次”取消事件“,是否会报错? 3.如何认定两个事件处理函数是一样的? 如果是匿名函数呢? 4.如果不手动删除事件函数,系统会帮我们回收吗? 5.在多线程环境下,挂接事件时和对象创建所在的线程不同,那事件处理函数中的代码将在哪个线程中执行? 6.当代码的层复杂时,开放委托和事件是不是会带来更大的麻烦? */ static void Main(string[] args) { var test = new Heater(); test.OnBoiled += TestOnBoiled; //给类的事件订阅方法 test.OnBoiled += TestOnBoiled; test.Begin(); Console.ReadKey(); }
private void button2_Click(object sender, EventArgs e) { Heater heater = new Heater(); Alarm alarm = new Alarm(); heater.Boiled += alarm.MakeAlert; //注册方法 heater.Boiled += (new Alarm()).MakeAlert; //给匿名对象注册方法 heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert); //也可以这么注册 heater.Boiled += Display.ShowMsg; //注册静态方法 heater.BoilWater(); //烧水,会自动调用注册过对象的方法 }
public static void Main() { Thermostat thermostat = new Thermostat(); Heater heater = new Heater(60); Cooler cooler = new Cooler(80); // Note: Use new Action(cooler.OnTemperatureChanged) // for C# 1.0 syntax. thermostat.OnTemperatureChange += heater.OnTemperatureChanged; thermostat.OnTemperatureChange += cooler.OnTemperatureChanged; // Bug: Should not be allowed thermostat.OnTemperatureChange(42); }
public static void Main() { Thermostat thermostat = new Thermostat(); Heater heater = new Heater(60); Cooler cooler = new Cooler(80); string temperature; // Note: Use new Action(cooler.OnTemperatureChanged) // for C# 1.0 syntax. thermostat.OnTemperatureChange = heater.OnTemperatureChanged; // Bug: Assignment operator overrides // previous assignment. thermostat.OnTemperatureChange = cooler.OnTemperatureChanged; Console.Write("Enter temperature: "); temperature = Console.ReadLine(); thermostat.CurrentTemperature = int.Parse(temperature); }
public static void Main() { Thermostat thermostat = new Thermostat(); Heater heater = new Heater(60); Cooler cooler = new Cooler(80); Action<float> delegate1; Action<float> delegate2; Action<float> delegate3; // use Constructor syntax for C# 1.0. delegate1 = heater.OnTemperatureChanged; delegate2 = cooler.OnTemperatureChanged; Console.WriteLine("Invoke both delegates:"); delegate3 = delegate1; delegate3 += delegate2; delegate3(90); Console.WriteLine("Invoke only delegate2"); delegate3 -= delegate1; delegate3(30); }
public static void Main() { try { Thermostat thermostat = new Thermostat(); Heater heater = new Heater(60); Cooler cooler = new Cooler(80); string temperature; // Using C# 2.0 or later syntax. thermostat.OnTemperatureChange += heater.OnTemperatureChanged; // Using C# 3.0. Change to anonymous method // if using C# 2.0 thermostat.OnTemperatureChange += (newTemperature) => { throw new InvalidOperationException(); }; thermostat.OnTemperatureChange += cooler.OnTemperatureChanged; Console.Write("Enter temperature: "); temperature = Console.ReadLine(); thermostat.CurrentTemperature = int.Parse(temperature); } catch(AggregateException exception) { Console.WriteLine(exception.Message); foreach(Exception item in exception.InnerExceptions) { Console.WriteLine("\t{0}: {1}", item.GetType(), item.Message); } } }
/*if switch is on and temperature is low, according to common sense, return true*/ public void LowTempWithSwitchOn(float temp, bool expected) { bool result = Heater.SetState(temp, switch_on); Assert.AreEqual(expected, result); }
private static async Task DoMerge(byte module, string json) { if (module == 2) { // Deserialize extended response (temporary) var response = new { status = 'I', coords = new { axesHomed = new byte[0], xyz = new float[0], machine = new float[0], extr = new float[0] }, speeds = new { requested = 0.0F, top = 0.0F }, currentTool = -1, output = new { beepDuration = 0, beepFrequency = 0, message = "", msgBox = new { msg = "", title = "", seq = 0, timeout = 0, controls = 0 } }, Params = new { atxPower = 0, fanPercent = new float[0], fanNames = new string[0], speedFactor = 0.0F, extrFactors = new float[0], babystep = 0.0F }, sensors = new { probeValue = 0, probeSecondary = new int[0], fanRPM = new int[0] }, temps = new { bed = new { active = 0.0F, standby = 0.0F, state = 0, heater = 0 }, chamber = new { active = 0.0F, standby = 0.0F, state = 0, heater = 0 }, current = new float[0], state = new byte[0], names = new string[0], tools = new { active = new[] { new float[0] }, standby = new[] { new float[0] } }, extra = new[] { new { name = "", temp = 0.0F } } }, coldExtrudeTemp = 160.0F, coldRetractTemp = 90.0F, compensation = "", controllableFans = 0, tempLimit = 0.0F, tools = new[] { new { number = 0, name = "", heaters = new int[0], extruders = new int[0], fan = 0, filament = "", offsets = new float[0] } }, mcutemp = new { min = 0.0F, cur = 0.0F, max = 0.0F }, vin = new { min = 0.0F, cur = 0.0F, max = 0.0F }, firmwareName = "", mode = "FFF" }; response = JsonConvert.DeserializeAnonymousType(json, response); using (await Provider.AccessReadWriteAsync()) { // - Electronics - Provider.Get.Electronics.Firmware.Name = response.firmwareName; Provider.Get.Electronics.McuTemp.Current = response.mcutemp.cur; Provider.Get.Electronics.McuTemp.Min = response.mcutemp.min; Provider.Get.Electronics.McuTemp.Max = response.mcutemp.max; Provider.Get.Electronics.VIn.Current = response.vin.cur; Provider.Get.Electronics.VIn.Min = response.vin.min; Provider.Get.Electronics.VIn.Max = response.vin.max; // - Fans - for (int fan = 0; fan < response.Params.fanPercent.Length; fan++) { Fan fanObj; if (fan >= Provider.Get.Fans.Count) { fanObj = new Fan(); Provider.Get.Fans.Add(fanObj); } else { fanObj = Provider.Get.Fans[fan]; } fanObj.Name = response.Params.fanNames[fan]; fanObj.Rpm = (response.sensors.fanRPM.Length > fan && response.sensors.fanRPM[fan] > 0) ? (int?)response.sensors.fanRPM[fan] : null; fanObj.Value = response.Params.fanPercent[fan] / 100; } for (int fan = Provider.Get.Fans.Count; fan > response.Params.fanPercent.Length; fan--) { Provider.Get.Fans.RemoveAt(fan - 1); } // - Move - Provider.Get.Move.Compensation = response.compensation; Provider.Get.Move.CurrentMove.RequestedSpeed = response.speeds.requested; Provider.Get.Move.CurrentMove.TopSpeed = response.speeds.top; Provider.Get.Move.SpeedFactor = response.Params.speedFactor / 100; Provider.Get.Move.BabystepZ = response.Params.babystep; // Update drives int numDrives = response.coords.xyz.Length + response.coords.extr.Length; for (int drive = 0; drive < numDrives; drive++) { Drive driveObj; if (drive >= Provider.Get.Move.Drives.Count) { driveObj = new Drive(); Provider.Get.Move.Drives.Add(driveObj); } else { driveObj = Provider.Get.Move.Drives[drive]; } driveObj.Position = (drive < response.coords.xyz.Length) ? response.coords.xyz[drive] : response.coords.extr[drive - response.coords.xyz.Length]; } for (int drive = Provider.Get.Move.Drives.Count; drive > numDrives; drive--) { Provider.Get.Move.Drives.RemoveAt(drive - 1); } // Update axes for (int axis = 0; axis < response.coords.xyz.Length; axis++) { Axis axisObj; if (axis >= Provider.Get.Move.Axes.Count) { axisObj = new Axis(); Provider.Get.Move.Axes.Add(axisObj); } else { axisObj = Provider.Get.Move.Axes[axis]; } axisObj.Letter = GetAxisLetter(axis); axisObj.Homed = response.coords.axesHomed[axis] != 0; axisObj.MachinePosition = response.coords.machine[axis]; } for (int axis = Provider.Get.Move.Axes.Count; axis > response.coords.xyz.Length; axis--) { Provider.Get.Move.Axes.RemoveAt(axis - 1); } // Update extruder drives Extruder extruderObj; for (int extruder = 0; extruder < response.coords.extr.Length; extruder++) { if (extruder >= Provider.Get.Move.Extruders.Count) { extruderObj = new Extruder(); Provider.Get.Move.Extruders.Add(extruderObj); } else { extruderObj = Provider.Get.Move.Extruders[extruder]; } extruderObj.Factor = response.Params.extrFactors[extruder] / 100; if (extruderObj.Drives.Count == 1) { extruderObj.Drives[0] = response.coords.xyz.Length + extruder; } else { extruderObj.Drives.Add(response.coords.xyz.Length + extruder); } } for (int extruder = Provider.Get.Move.Extruders.Count; extruder > response.coords.extr.Length; extruder--) { Provider.Get.Move.Extruders.RemoveAt(extruder - 1); } // - Heat - Provider.Get.Heat.ColdExtrudeTemperature = response.coldExtrudeTemp; Provider.Get.Heat.ColdRetractTemperature = response.coldRetractTemp; // Update heaters for (int heater = 0; heater < response.temps.current.Length; heater++) { Heater heaterObj; if (heater >= Provider.Get.Heat.Heaters.Count) { heaterObj = new Heater(); Provider.Get.Heat.Heaters.Add(heaterObj); } else { heaterObj = Provider.Get.Heat.Heaters[heater]; } heaterObj.Current = response.temps.current[heater]; heaterObj.Max = response.tempLimit; heaterObj.Name = response.temps.names[heater]; heaterObj.Sensor = heater; heaterObj.State = (HeaterState)response.temps.state[heater]; } for (int heater = Provider.Get.Heat.Heaters.Count; heater > response.temps.current.Length; heater--) { Provider.Get.Heat.Heaters.RemoveAt(heater - 1); } // Update beds if (response.temps.bed != null) { BedOrChamber bedObj; if (Provider.Get.Heat.Beds.Count == 0) { bedObj = new BedOrChamber(); Provider.Get.Heat.Beds.Add(bedObj); } else { bedObj = Provider.Get.Heat.Beds[0]; } if (bedObj.Heaters.Count == 0) { bedObj.Active.Add(response.temps.bed.active); bedObj.Standby.Add(response.temps.bed.standby); bedObj.Heaters.Add(response.temps.bed.heater); } else { bedObj.Active[0] = response.temps.bed.active; bedObj.Standby[0] = response.temps.bed.standby; bedObj.Heaters[0] = response.temps.bed.heater; } } else if (Provider.Get.Heat.Beds.Count > 0) { Provider.Get.Heat.Beds.Clear(); } // Update chambers if (response.temps.chamber != null) { BedOrChamber chamberObj; if (Provider.Get.Heat.Chambers.Count == 0) { chamberObj = new BedOrChamber(); Provider.Get.Heat.Chambers.Add(chamberObj); } else { chamberObj = Provider.Get.Heat.Chambers[0]; } if (chamberObj.Heaters.Count == 0) { chamberObj.Active.Add(response.temps.chamber.active); chamberObj.Standby.Add(response.temps.chamber.standby); chamberObj.Heaters.Add(response.temps.chamber.heater); } else { chamberObj.Active[0] = response.temps.chamber.active; chamberObj.Standby[0] = response.temps.chamber.standby; chamberObj.Heaters[0] = response.temps.chamber.heater; } } else if (Provider.Get.Heat.Chambers.Count > 0) { Provider.Get.Heat.Chambers.Clear(); } // Update extra heaters for (int extra = 0; extra < response.temps.extra.Length; extra++) { ExtraHeater extraObj; if (extra >= Provider.Get.Heat.Extra.Count) { extraObj = new ExtraHeater(); Provider.Get.Heat.Extra.Add(extraObj); } else { extraObj = Provider.Get.Heat.Extra[extra]; } extraObj.Current = response.temps.extra[extra].temp; extraObj.Name = response.temps.extra[extra].name; } for (int extra = Provider.Get.Heat.Extra.Count; extra > response.temps.extra.Length; extra--) { Provider.Get.Heat.Extra.RemoveAt(extra - 1); } // - Sensors - Probe probeObj; if (Provider.Get.Sensors.Probes.Count == 0) { probeObj = new Probe(); Provider.Get.Sensors.Probes.Add(probeObj); } else { probeObj = Provider.Get.Sensors.Probes[0]; } probeObj.Value = response.sensors.probeValue; if (response.sensors.probeSecondary != null) { ListHelpers.SetList(probeObj.SecondaryValues, response.sensors.probeSecondary); } // - State - Provider.Get.State.AtxPower = (response.Params.atxPower == -1) ? null : (bool?)(response.Params.atxPower != 0); if (response.output != null) { if (response.output.beepFrequency != 0 && response.output.beepDuration != 0) { Provider.Get.State.Beep.Frequency = response.output.beepFrequency; Provider.Get.State.Beep.Duration = response.output.beepDuration; _ = Task.Run(async() => { await Task.Delay(response.output.beepDuration); using (await Provider.AccessReadWriteAsync()) { Provider.Get.State.Beep.Duration = 0; Provider.Get.State.Beep.Frequency = 0; } }, Program.CancelSource.Token); } Provider.Get.State.DisplayMessage = response.output.message; } Provider.Get.State.CurrentTool = response.currentTool; Provider.Get.State.Status = GetStatus(response.status); if (Provider.Get.State.Status == MachineStatus.Idle && FileExecution.MacroFile.DoingMacroFile) { // RRF does not always know whether a macro file is being executed Provider.Get.State.Status = MachineStatus.Busy; } Provider.Get.State.Mode = (MachineMode)Enum.Parse(typeof(MachineMode), response.mode, true); // - Tools - Tool toolObj; for (int tool = 0; tool < response.tools.Length; tool++) { if (tool >= Provider.Get.Tools.Count) { toolObj = new Tool(); Provider.Get.Tools.Add(toolObj); } else { toolObj = Provider.Get.Tools[tool]; } toolObj.Filament = response.tools[tool].filament; toolObj.Name = (response.tools[tool].name == "") ? null : response.tools[tool].name; toolObj.Number = response.tools[tool].number; ListHelpers.SetList(toolObj.Heaters, response.tools[tool].heaters); ListHelpers.SetList(toolObj.Active, response.temps.tools.active[tool]); ListHelpers.SetList(toolObj.Standby, response.temps.tools.standby[tool]); if (toolObj.Fans.Count == 0) { toolObj.Fans.Add(response.tools[tool].fan); } else { toolObj.Fans[0] = response.tools[tool].fan; } ListHelpers.SetList(toolObj.Offsets, response.tools[tool].offsets); } for (int tool = Provider.Get.Tools.Count; tool > response.tools.Length; tool--) { Provider.Get.Tools.RemoveAt(tool - 1); } } } // Deserialize print status response else if (module == 3) { var printResponse = new { currentLayer = 0, currentLayerTime = 0F, filePosition = 0L, firstLayerDuration = 0F, extrRaw = new float[0], printDuration = 0F, warmUpDuration = 0F, timesLeft = new { file = 0F, filament = 0F, layer = 0F } }; printResponse = JsonConvert.DeserializeAnonymousType(json, printResponse); using (await Provider.AccessReadWriteAsync()) { Provider.Get.Job.Layer = printResponse.currentLayer; Provider.Get.Job.LayerTime = (printResponse.currentLayer == 1) ? printResponse.firstLayerDuration : printResponse.currentLayerTime; Provider.Get.Job.FilePosition = printResponse.filePosition; ListHelpers.SetList(Provider.Get.Job.ExtrudedRaw, printResponse.extrRaw); Provider.Get.Job.Duration = printResponse.printDuration; Provider.Get.Job.WarmUpDuration = printResponse.warmUpDuration; Provider.Get.Job.TimesLeft.File = (printResponse.timesLeft.file > 0F) ? (float?)printResponse.timesLeft.file : null; Provider.Get.Job.TimesLeft.Filament = (printResponse.timesLeft.filament > 0F) ? (float?)printResponse.timesLeft.filament : null; Provider.Get.Job.TimesLeft.Layer = (printResponse.timesLeft.layer > 0F) ? (float?)printResponse.timesLeft.layer : null; } } // Reset everything if the controller is halted using (await Provider.AccessReadOnlyAsync()) { if (Provider.Get.State.Status == MachineStatus.Halted) { await SPI.Interface.InvalidateData("Firmware halted"); } } // Notify subscribers IPC.Processors.Subscription.ModelUpdated(); // Notify waiting threads about the last module updated _moduleUpdateEvents[module].Set(); _moduleUpdateEvents[module].Reset(); lock (_moduleUpdateEvents) { _lastUpdatedModule = module; } // Force manual garbage collection (maybe the GC cannot keep up with the speed of the update loop) GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); }
/*if switch is off and temperatrue is high,according to common sense, return false*/ public void HighTempWithSwitchOff(float temp, bool expected) { bool result = Heater.SetState(temp, switch_off); Assert.AreEqual(expected, result); }
public void InitializeVariableLabels(Heater uo) { this.labelPressureDrop.InitializeVariable(uo.PressureDrop); this.labelHeatLoss.InitializeVariable(uo.HeatLoss); this.labelHeatInput.InitializeVariable(uo.HeatInput); }
public HeaterLabelsControl(Heater uo) : this() { this.InitializeVariableLabels(uo); }
public void Display() { Controls.Clear(); if (Page != null) { deviceDictionary = (Dictionary <int, Device>)Page.Session["Devices"]; } string tempPower; heaterPlaceHolder = new PlaceHolder(); heaterPlaceHolder.ID = "heaterPlaceHolder" + i; heaterErrPlaceHolder = new PlaceHolder(); heaterErrPlaceHolder.ID = "heaterErrPlaceHolder" + i; Controls.Add(heaterPlaceHolder); if (deviceDictionary[i].Power) { tempPower = "включен"; } else { tempPower = "выключен"; } heaterDelButton = MyButton(""); heaterDelButton.ID = "heaterDelButton" + i; heaterDelButton.CssClass = "delButton"; heaterDelButton.Click += HeaterDelButton_Click; heaterPlaceHolder.Controls.Add(heaterDelButton); heaterPlaceHolder.Controls.Add(Span("Устройство: " + deviceDictionary[i].Name + "<br />")); heaterPlaceHolder.Controls.Add(Span("Состояние: " + tempPower + "<br />")); Heater tempDevice = (Heater)deviceDictionary[i]; SliderExtender temperatureSliderExtender = SliderExtender(tempDevice.Temperature.MinValue, tempDevice.Temperature.MaxValue); temperatureSliderExtender.ID = "temperatureSliderExtender" + i; heaterTemperatureTarget = TextBox(); heaterTemperatureBound = TextBox(); heaterTemperatureTarget.Text = tempDevice.Temperature.CurrentValue.ToString(); heaterTemperatureBound.Text = tempDevice.Temperature.CurrentValue.ToString(); Table temperatureTable = MyTable(tempDevice.Temperature.SliderName + ": ", heaterTemperatureBound, heaterTemperatureTarget); temperatureTable.ID = "temperatureTable" + i; heaterTemperatureTarget.ID = "HeaterTarget" + i; heaterTemperatureBound.ID = "HeaterBound" + i; temperatureSliderExtender.TargetControlID = heaterTemperatureTarget.ID; temperatureSliderExtender.BoundControlID = heaterTemperatureBound.ID; heaterPlaceHolder.Controls.Add(temperatureTable); heaterPlaceHolder.Controls.Add(temperatureSliderExtender); heaterPlaceHolder.Controls.Add(Span("<br />")); heaterApplyButton = MyButton("Применить"); heaterApplyButton.ID = "heaterApplyButton" + i; heaterApplyButton.Click += HeaterApplyButton_Click; heaterApplyButton.CssClass = "applyButton"; heaterPlaceHolder.Controls.Add(heaterApplyButton); heaterOnOffButton = MyButton("Вкл/Выкл"); heaterOnOffButton.ID = "heaterOnOffButton" + i; heaterOnOffButton.Click += HeaterOnOffButton_Click; heaterOnOffButton.CssClass = "onOffButton"; heaterPlaceHolder.Controls.Add(heaterOnOffButton); heaterPlaceHolder.Controls.Add(Span("<br />")); heaterPlaceHolder.Controls.Add(heaterErrPlaceHolder); }
public void iterates_over_available_heaters(byte iteration, bool state1, bool state2, bool state3, bool state4) { // Arrange var heater1 = new Heater { HeaterId = 1, UsagePerHour = 0.9m }; var heater2 = new Heater { HeaterId = 2, UsagePerHour = 0.9m }; var heater3 = new Heater { HeaterId = 3, UsagePerHour = 0.9m }; var heater4 = new Heater { HeaterId = 4, UsagePerHour = 0.9m }; var heaterState1 = new HeaterState { Heater = heater1, OutputState = true }; var heaterState2 = new HeaterState { Heater = heater2, OutputState = true }; var heaterState3 = new HeaterState { Heater = heater3, OutputState = true }; var heaterState4 = new HeaterState { Heater = heater4, OutputState = true }; var powerZoneState = new PowerZoneState { NextIntervalOffset = iteration, PowerZone = new PowerZone { MaxUsage = 2.1m, Heaters = new List <Heater> { heater1, heater2, heater3, heater4 } } }; var controllerState = new ControllerState { HeaterIdToState = new Dictionary <int, HeaterState> { [1] = heaterState1, [2] = heaterState2, [3] = heaterState3, [4] = heaterState4 } }; // Act var powerZoneOutputAllowanceCalculator = new PowerZoneOutputLimiter(); powerZoneOutputAllowanceCalculator.Limit(powerZoneState, controllerState); // Assert Assert.Equal(state1, heaterState1.OutputState); Assert.Equal(state2, heaterState2.OutputState); Assert.Equal(state3, heaterState3.OutputState); Assert.Equal(state4, heaterState4.OutputState); }
static void Main(string[] args) { Heater heater = null; ConsoleEx.WriteLineWithDate("AquariumController is running"); ConsoleEx.WriteLineWithDate("Setting up I2C..."); I2cConnectionSettings settings = new I2cConnectionSettings(BUSID, I2CADDRESS); I2cDevice device = I2cDevice.Create(settings); ConsoleEx.WriteLineWithDate("Setting up UFire EC Probe..."); Iot.Device.UFire.UFire_pH uFire_pH = new Iot.Device.UFire.UFire_pH(device); uFire_pH.UseTemperatureCompensation(true); ConsoleEx.WriteLineWithDate("Setting up MySql db...."); MySqlConnection conn = new MySqlConnection(ConfigurationManager.AppSettings.Get("ConnectionString")); conn.Open(); ConsoleEx.WriteLineWithDate("Setting up Heater...."); heater = new Heater(conn); Timer saveTemperturTimer = Settings.SetupSaveInterval(conn, "TemperatureSaveInterval", Tempertur.SaveTempertur); Timer savePhTimer = Settings.SetupSaveInterval(conn, "PHSaveInterval", Ph.SavePh); //read setting every 5 minute. AutoResetEvent saveTemperturAutoResetEvent = new AutoResetEvent(false); Timer readSetupTimer = new Timer(Settings.ReadSetup, saveTemperturAutoResetEvent, 0, 5 * 60 * 1000); ConsoleEx.WriteLineWithDate("Setting up GpioController...."); _Controller = new GpioController(); _Controller.OpenPin(AIRPUMPPIN, PinMode.Output); ConsoleEx.WriteLineWithDate("Setting up Lcd1602...."); using (Lcd1602 lcd = new Lcd1602(registerSelectPin: LCDRSPIN, enablePin: LCDENABLEPIN, dataPins: LCDDATA, shouldDispose: true)) { LcdConsole console = new LcdConsole(lcd, "A00", false) { LineFeedMode = LineWrapMode.Wrap, ScrollUpDelay = new TimeSpan(0, 0, 1) }; SetCharacters.FishCharacters(lcd); SetCharacters.TemperatureCharacters(lcd); lcd.SetCursorPosition(0, 0); int _fishCount = 0; bool _revers = false; int _positionCount = 0; while (!Console.KeyAvailable) { try { Tempertur.TemperturValue = Convert.ToDouble(uFire_pH.MeasureTemp()) + Tempertur.TemperturCalibrateOffSet; Ph.PH = Math.Round(uFire_pH.MeasurepH(), 1); string tempterturText = Math.Round(Tempertur.TemperturValue, 1, MidpointRounding.AwayFromZero).ToString() + (char)SetCharacters.TemperatureCharactersNumber; string pHText = Ph.PH + "pH"; console.ReplaceLine(0, tempterturText + " " + pHText); Animation.ShowFishOnLine2(console, ref _fishCount, ref _revers, ref _positionCount); Heater.SetHeaterControlOnOff(conn, Tempertur.TemperturValue); heater.HeaterOnOff(conn); //Blink display if tempertur is over max tempertur if (Tempertur.TemperturValue > Tempertur.TemperatureMax) { console.BlinkDisplay(1); } AirPump.AirPumpOnOff(conn, _Controller, AIRPUMPPIN); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { ConsoleEx.WriteLineWithDate("Got an error: " + ex.Message + "StackTrace: " + ex.StackTrace); if (ex.InnerException != null) { ConsoleEx.WriteLineWithDate("Error InnerException: " + ex.InnerException.Message); } } finally { Thread.Sleep(1000); } #pragma warning restore CA1031 // Do not catch general exception types } console.Dispose(); } saveTemperturTimer.Dispose(); savePhTimer.Dispose(); readSetupTimer.Dispose(); conn.Close(); conn.Dispose(); _Controller.Dispose(); }
/// <summary> /// Process status updates in the background /// </summary> /// <returns></returns> public static async Task ProcessUpdates() { while (await _statusUpdates.OutputAvailableAsync(Program.CancelSource.Token)) { Tuple <byte, byte[]> statusUpdate = await _statusUpdates.TakeAsync(Program.CancelSource.Token); try { if (statusUpdate.Item1 == 2) { AdvancedStatusResponse response = (AdvancedStatusResponse)JsonSerializer.Deserialize(statusUpdate.Item2, typeof(AdvancedStatusResponse), JsonHelper.DefaultJsonOptions); List <Tool> addedTools = new List <Tool>(); using (await Provider.AccessReadWriteAsync()) { // - Electronics - Provider.Get.Electronics.McuTemp.Current = response.mcutemp.cur; Provider.Get.Electronics.McuTemp.Min = response.mcutemp.min; Provider.Get.Electronics.McuTemp.Max = response.mcutemp.max; Provider.Get.Electronics.VIn.Current = response.vin.cur; Provider.Get.Electronics.VIn.Min = response.vin.min; Provider.Get.Electronics.VIn.Max = response.vin.max; // - Fans - for (int fan = 0; fan < [email protected]; fan++) { Fan fanObj; if (fan >= Provider.Get.Fans.Count) { fanObj = new Fan(); Provider.Get.Fans.Add(fanObj); } else { fanObj = Provider.Get.Fans[fan]; } fanObj.Name = [email protected][fan]; fanObj.Rpm = (response.sensors.fanRPM.Count > fan && response.sensors.fanRPM[fan] > 0) ? (int?)response.sensors.fanRPM[fan] : null; fanObj.Value = [email protected][fan] / 100F; fanObj.Thermostatic.Control = (response.controllableFans & (1 << fan)) == 0; } for (int fan = Provider.Get.Fans.Count; fan > [email protected]; fan--) { Provider.Get.Fans.RemoveAt(fan - 1); } // - Move - Provider.Get.Move.Compensation = response.compensation; Provider.Get.Move.CurrentMove.RequestedSpeed = response.speeds.requested; Provider.Get.Move.CurrentMove.TopSpeed = response.speeds.top; Provider.Get.Move.SpeedFactor = [email protected] / 100; Provider.Get.Move.BabystepZ = [email protected]; Provider.Get.Move.CurrentWorkplace = response.coords.wpl; // Update drives and endstops for (int drive = 0; drive < Provider.Get.Move.Drives.Count; drive++) { Drive driveObj = Provider.Get.Move.Drives[drive]; if (drive < response.axes) { driveObj.Position = response.coords.xyz[drive]; } else if (drive < response.axes + response.coords.extr.Count) { driveObj.Position = response.coords.extr[drive - response.axes]; } else { driveObj.Position = null; } Endstop endstopObj; if (drive >= Provider.Get.Sensors.Endstops.Count) { endstopObj = new Endstop(); Provider.Get.Sensors.Endstops.Add(endstopObj); } else { endstopObj = Provider.Get.Sensors.Endstops[drive]; } endstopObj.Triggered = (response.endstops & (1 << drive)) != 0; } // Update axes int axis; for (axis = 0; axis < response.totalAxes; axis++) { Axis axisObj; if (axis >= Provider.Get.Move.Axes.Count) { axisObj = new Axis(); Provider.Get.Move.Axes.Add(axisObj); } else { axisObj = Provider.Get.Move.Axes[axis]; } axisObj.Letter = response.axisNames[axis]; if (axis < response.coords.xyz.Count) { axisObj.Homed = response.coords.axesHomed[axis] != 0; axisObj.MachinePosition = response.coords.machine[axis]; axisObj.Visible = true; } else { axisObj.Homed = true; axisObj.MachinePosition = null; axisObj.Visible = false; } axisObj.MinEndstop = axis; axisObj.MaxEndstop = axis; } for (axis = Provider.Get.Move.Axes.Count; axis > response.totalAxes; axis--) { Provider.Get.Move.Axes.RemoveAt(axis - 1); } // Update extruder drives int extruder; for (extruder = 0; extruder < response.coords.extr.Count; extruder++) { Extruder extruderObj; if (extruder >= Provider.Get.Move.Extruders.Count) { extruderObj = new Extruder(); Provider.Get.Move.Extruders.Add(extruderObj); } else { extruderObj = Provider.Get.Move.Extruders[extruder]; } extruderObj.Factor = [email protected][extruder] / 100F; if (extruderObj.Drives.Count == 1) { int drive = response.coords.xyz.Count + extruder; if (extruderObj.Drives[0] != drive) { extruderObj.Drives[0] = drive; } } else { extruderObj.Drives.Add(response.coords.xyz.Count + extruder); } } for (extruder = Provider.Get.Move.Extruders.Count; extruder > response.coords.extr.Count; extruder--) { Provider.Get.Move.Extruders.RemoveAt(extruder - 1); } // - Heat - Provider.Get.Heat.ColdExtrudeTemperature = response.coldExtrudeTemp; Provider.Get.Heat.ColdRetractTemperature = response.coldRetractTemp; // Update heaters int heater; for (heater = 0; heater < response.temps.current.Count; heater++) { Heater heaterObj; if (heater >= Provider.Get.Heat.Heaters.Count) { heaterObj = new Heater(); Provider.Get.Heat.Heaters.Add(heaterObj); } else { heaterObj = Provider.Get.Heat.Heaters[heater]; } heaterObj.Current = response.temps.current[heater]; heaterObj.Max = response.tempLimit; heaterObj.Name = response.temps.names[heater]; heaterObj.Sensor = heater; heaterObj.State = (HeaterState)response.temps.state[heater]; } for (heater = Provider.Get.Heat.Heaters.Count; heater > response.temps.current.Count; heater--) { Provider.Get.Heat.Heaters.RemoveAt(heater - 1); } // Update beds if (response.temps.bed != null) { BedOrChamber bedObj; if (Provider.Get.Heat.Beds.Count == 0) { bedObj = new BedOrChamber(); Provider.Get.Heat.Beds.Add(bedObj); } else { bedObj = Provider.Get.Heat.Beds[0]; } if (bedObj.Heaters.Count == 0) { bedObj.Active.Add(response.temps.bed.active); bedObj.Standby.Add(response.temps.bed.standby); bedObj.Heaters.Add(response.temps.bed.heater); } else { if (bedObj.Active[0] != response.temps.bed.active) { bedObj.Active[0] = response.temps.bed.active; } if (bedObj.Standby[0] != response.temps.bed.standby) { bedObj.Standby[0] = response.temps.bed.standby; } if (bedObj.Heaters[0] != response.temps.bed.heater) { bedObj.Heaters[0] = response.temps.bed.heater; } } } else if (Provider.Get.Heat.Beds.Count > 0) { Provider.Get.Heat.Beds.Clear(); } // Update chambers if (response.temps.chamber != null) { BedOrChamber chamberObj; if (Provider.Get.Heat.Chambers.Count == 0) { chamberObj = new BedOrChamber(); Provider.Get.Heat.Chambers.Add(chamberObj); } else { chamberObj = Provider.Get.Heat.Chambers[0]; } if (chamberObj.Heaters.Count == 0) { chamberObj.Active.Add(response.temps.chamber.active); chamberObj.Standby.Add(response.temps.chamber.standby); chamberObj.Heaters.Add(response.temps.chamber.heater); } else { if (chamberObj.Active[0] != response.temps.chamber.active) { chamberObj.Active[0] = response.temps.chamber.active; } if (chamberObj.Standby[0] != response.temps.chamber.standby) { chamberObj.Standby[0] = response.temps.chamber.standby; } if (chamberObj.Heaters[0] != response.temps.chamber.heater) { chamberObj.Heaters[0] = response.temps.chamber.heater; } } } else if (Provider.Get.Heat.Chambers.Count > 0) { Provider.Get.Heat.Chambers.Clear(); } // Update extra heaters int extra; for (extra = 0; extra < response.temps.extra.Count; extra++) { ExtraHeater extraObj; if (extra >= Provider.Get.Heat.Extra.Count) { extraObj = new ExtraHeater(); Provider.Get.Heat.Extra.Add(extraObj); } else { extraObj = Provider.Get.Heat.Extra[extra]; } extraObj.Current = response.temps.extra[extra].temp; extraObj.Name = response.temps.extra[extra].name; } for (extra = Provider.Get.Heat.Extra.Count; extra > response.temps.extra.Count; extra--) { Provider.Get.Heat.Extra.RemoveAt(extra - 1); } // - Sensors - if (response.probe.type != 0) { Probe probeObj; if (Provider.Get.Sensors.Probes.Count == 0) { probeObj = new Probe(); Provider.Get.Sensors.Probes.Add(probeObj); } else { probeObj = Provider.Get.Sensors.Probes[0]; } probeObj.Type = (ProbeType)response.probe.type; probeObj.Value = response.sensors.probeValue; probeObj.Threshold = response.probe.threshold; probeObj.TriggerHeight = response.probe.height; if (response.sensors.probeSecondary != null) { ListHelpers.SetList(probeObj.SecondaryValues, response.sensors.probeSecondary); } } else if (Provider.Get.Sensors.Probes.Count != 0) { Provider.Get.Sensors.Probes.Clear(); } // - Output - int beepDuration = 0, beepFrequency = 0; MessageBoxMode?messageBoxMode = null; string displayMessage = string.Empty; if (response.output != null) { if (response.output.beepFrequency != 0 && response.output.beepDuration != 0) { beepDuration = response.output.beepFrequency; beepFrequency = response.output.beepDuration; } displayMessage = response.output.message; if (response.output.msgBox != null) { messageBoxMode = (MessageBoxMode)response.output.msgBox.mode; Provider.Get.MessageBox.Title = response.output.msgBox.title; Provider.Get.MessageBox.Message = response.output.msgBox.msg; for (int i = 0; i < 9; i++) { if ((response.output.msgBox.controls & (1 << i)) != 0) { if (!Provider.Get.MessageBox.AxisControls.Contains(i)) { Provider.Get.MessageBox.AxisControls.Add(i); } } else if (Provider.Get.MessageBox.AxisControls.Contains(i)) { Provider.Get.MessageBox.AxisControls.Remove(i); } } Provider.Get.MessageBox.Seq = response.output.msgBox.seq; } } Provider.Get.State.Beep.Duration = beepDuration; Provider.Get.State.Beep.Frequency = beepFrequency; Provider.Get.State.DisplayMessage = displayMessage; Provider.Get.MessageBox.Mode = messageBoxMode; // - State - Provider.Get.State.AtxPower = ([email protected] == -1) ? null : (bool?)([email protected] != 0); Provider.Get.State.CurrentTool = response.currentTool; Provider.Get.State.Status = GetStatus(response.status); Provider.Get.State.Mode = (MachineMode)Enum.Parse(typeof(MachineMode), response.mode, true); Provider.Get.Network.Name = response.name; // - Tools - int tool; for (tool = 0; tool < response.tools.Count; tool++) { Tool toolObj; if (tool >= Provider.Get.Tools.Count) { toolObj = new Tool(); Provider.Get.Tools.Add(toolObj); addedTools.Add(toolObj); } else { toolObj = Provider.Get.Tools[tool]; } // FIXME: The filament drive is not part of the status response / OM yet toolObj.FilamentExtruder = (response.tools[tool].drives.Count > 0) ? response.tools[tool].drives[0] : -1; toolObj.Filament = string.IsNullOrEmpty(response.tools[tool].filament) ? null : response.tools[tool].filament; toolObj.Name = string.IsNullOrEmpty(response.tools[tool].name) ? null : response.tools[tool].name; toolObj.Number = response.tools[tool].number; ListHelpers.SetList(toolObj.Heaters, response.tools[tool].heaters); ListHelpers.SetList(toolObj.Extruders, response.tools[tool].drives); ListHelpers.SetList(toolObj.Active, response.temps.tools.active[tool]); ListHelpers.SetList(toolObj.Standby, response.temps.tools.standby[tool]); List <int> fanIndices = new List <int>(); for (int i = 0; i < [email protected]; i++) { if ((response.tools[tool].fans & (1 << i)) != 0) { fanIndices.Add(i); } } ListHelpers.SetList(toolObj.Fans, fanIndices); ListHelpers.SetList(toolObj.Offsets, response.tools[tool].offsets); } for (tool = Provider.Get.Tools.Count; tool > response.tools.Count; tool--) { Utility.FilamentManager.ToolRemoved(Provider.Get.Tools[tool - 1]); Provider.Get.Tools.RemoveAt(tool - 1); } } // Notify FilamentManager about added tools. Deal with them here to avoid deadlocks foreach (Tool toolObj in addedTools) { await Utility.FilamentManager.ToolAdded(toolObj); } } else if (statusUpdate.Item1 == 3) { // Deserialize print status response PrintStatusResponse printResponse = (PrintStatusResponse)JsonSerializer.Deserialize(statusUpdate.Item2, typeof(PrintStatusResponse), JsonHelper.DefaultJsonOptions); using (await Provider.AccessReadWriteAsync()) { if (printResponse.currentLayer > Provider.Get.Job.Layers.Count + 1) { // Layer complete Layer lastLayer = (Provider.Get.Job.Layers.Count > 0) ? Provider.Get.Job.Layers[Provider.Get.Job.Layers.Count - 1] : new Layer() { Filament = new List <float>(printResponse.extrRaw.Count) }; float lastHeight = 0F, lastDuration = 0F, lastProgress = 0F; float[] lastFilamentUsage = new float[printResponse.extrRaw.Count]; foreach (Layer l in Provider.Get.Job.Layers) { lastHeight += l.Height; lastDuration += l.Duration; lastProgress += l.FractionPrinted; for (int i = 0; i < Math.Min(lastFilamentUsage.Length, l.Filament.Count); i++) { lastFilamentUsage[i] += l.Filament[i]; } } float[] filamentUsage = new float[printResponse.extrRaw.Count]; for (int i = 0; i < filamentUsage.Length; i++) { filamentUsage[i] = printResponse.extrRaw[i] - lastFilamentUsage[i]; } float printDuration = printResponse.printDuration - printResponse.warmUpDuration; Layer layer = new Layer { Duration = printDuration - lastDuration, Filament = new List <float>(filamentUsage), FractionPrinted = (printResponse.fractionPrinted / 100F) - lastProgress, Height = (printResponse.currentLayer > 2) ? _currentHeight - lastHeight : printResponse.firstLayerHeight }; Provider.Get.Job.Layers.Add(layer); // FIXME: In case Z isn't mapped to the 3rd axis... _currentHeight = printResponse.coords.xyz[2]; } else if (printResponse.currentLayer < Provider.Get.Job.Layers.Count && GetStatus(printResponse.status) == MachineStatus.Processing) { // Starting a new print job Provider.Get.Job.Layers.Clear(); _currentHeight = 0F; } Provider.Get.Job.Layer = printResponse.currentLayer; Provider.Get.Job.LayerTime = (printResponse.currentLayer == 1) ? printResponse.firstLayerDuration : printResponse.currentLayerTime; Provider.Get.Job.FilePosition = printResponse.filePosition; ListHelpers.SetList(Provider.Get.Job.ExtrudedRaw, printResponse.extrRaw); Provider.Get.Job.Duration = printResponse.printDuration; Provider.Get.Job.WarmUpDuration = printResponse.warmUpDuration; Provider.Get.Job.TimesLeft.File = (printResponse.timesLeft.file > 0F) ? (float?)printResponse.timesLeft.file : null; Provider.Get.Job.TimesLeft.Filament = (printResponse.timesLeft.filament > 0F) ? (float?)printResponse.timesLeft.filament : null; Provider.Get.Job.TimesLeft.Layer = (printResponse.timesLeft.layer > 0F) ? (float?)printResponse.timesLeft.layer : null; } // Notify waiting threads about the model update _updateEvent.Set(); _updateEvent.Reset(); } else if (statusUpdate.Item1 == 5) { // Deserialize config response ConfigResponse configResponse = (ConfigResponse)JsonSerializer.Deserialize(statusUpdate.Item2, typeof(ConfigResponse), JsonHelper.DefaultJsonOptions); if (configResponse.axisMins == null) { Console.WriteLine("[warn] Config response unsupported. Update your firmware!"); return; } using (await Provider.AccessReadWriteAsync()) { // - Axes - for (int axis = 0; axis < Math.Min(Provider.Get.Move.Axes.Count, configResponse.axisMins.Count); axis++) { Provider.Get.Move.Axes[axis].Min = configResponse.axisMins[axis]; Provider.Get.Move.Axes[axis].Max = configResponse.axisMaxes[axis]; } // - Drives - int drive; for (drive = 0; drive < configResponse.accelerations.Count; drive++) { Drive driveObj; if (drive >= Provider.Get.Move.Drives.Count) { driveObj = new Drive(); Provider.Get.Move.Drives.Add(driveObj); } else { driveObj = Provider.Get.Move.Drives[drive]; } driveObj.Acceleration = configResponse.accelerations[drive]; driveObj.Current = configResponse.currents[drive]; driveObj.MinSpeed = configResponse.minFeedrates[drive]; driveObj.MaxSpeed = configResponse.maxFeedrates[drive]; } for (drive = Provider.Get.Move.Drives.Count; drive > configResponse.accelerations.Count; drive--) { Provider.Get.Move.Drives.RemoveAt(drive - 1); Provider.Get.Sensors.Endstops.RemoveAt(drive - 1); } // - Electronics - Provider.Get.Electronics.Name = configResponse.firmwareElectronics; Provider.Get.Electronics.ShortName = configResponse.boardName; switch (Provider.Get.Electronics.ShortName) { case "MBP05": Provider.Get.Electronics.Revision = "0.5"; break; case "MB6HC": Provider.Get.Electronics.Revision = "0.6"; break; } Provider.Get.Electronics.Firmware.Name = configResponse.firmwareName; Provider.Get.Electronics.Firmware.Version = configResponse.firmwareVersion; Provider.Get.Electronics.Firmware.Date = configResponse.firmwareDate; // - Move - Provider.Get.Move.Idle.Factor = configResponse.idleCurrentFactor / 100F; Provider.Get.Move.Idle.Timeout = configResponse.idleTimeout; } // Check if the firmware is supposed to be updated only. When this finishes, DCS is terminated. if (configResponse.boardName != null && Program.UpdateOnly && !_updatingFirmware) { _updatingFirmware = true; Code updateCode = new Code { Type = DuetAPI.Commands.CodeType.MCode, MajorNumber = 997, Flags = DuetAPI.Commands.CodeFlags.IsPrioritized }; _ = updateCode.Execute(); } } } catch (JsonException e) { Console.WriteLine($"[err] Failed to merge JSON: {e}"); } } }
public void runSelfTest_returnsTrue() { var uut = new Heater(); Assert.That(uut.RunSelfTest(), Is.True); }
public void ObserveModelObjectCollection() { int numEvents = 0; PropertyChangeType recordedChangeType = PropertyChangeType.Property; object[] recordedPath = null; object recordedValue = null; void onPropertyChanged(object[] path, PropertyChangeType changeType, object value) { numEvents++; recordedChangeType = changeType; recordedPath = path; recordedValue = value; TestContext.Out.WriteLine("Change {0} ({1}) -> {2}", string.Join('.', path), changeType, value); } DuetControlServer.Model.Observer.OnPropertyPathChanged += onPropertyChanged; // Add first item TestContext.Out.WriteLine("Add item"); Heater newHeater = new Heater(); Provider.Get.Heat.Heaters.Add(newHeater); Assert.AreEqual(1, numEvents); Assert.AreEqual(PropertyChangeType.ObjectCollection, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 0, new object[1]) }, recordedPath); Assert.AreSame(newHeater, recordedValue); // Reset numEvents = 0; recordedPath = null; recordedValue = null; TestContext.Out.WriteLine(); // Add second item TestContext.Out.WriteLine("Add item"); newHeater = new Heater(); Provider.Get.Heat.Heaters.Add(newHeater); Assert.AreEqual(1, numEvents); Assert.AreEqual(PropertyChangeType.ObjectCollection, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 1, new object[2]) }, recordedPath); Assert.AreSame(newHeater, recordedValue); // Reset numEvents = 0; recordedPath = null; recordedValue = null; TestContext.Out.WriteLine(); // Modify first item TestContext.Out.WriteLine("Modify first item"); Provider.Get.Heat.Heaters[0].Active = 123F; Assert.AreEqual(1, numEvents); Assert.AreEqual(PropertyChangeType.Property, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 0, new object[2]), "active" }, recordedPath); Assert.AreEqual(123F, recordedValue); // Reset numEvents = 0; recordedPath = null; recordedValue = null; TestContext.Out.WriteLine(); // Move item TestContext.Out.WriteLine("Move item"); Provider.Get.Heat.Heaters.Move(1, 0); Assert.AreEqual(2, numEvents); Assert.AreEqual(PropertyChangeType.ObjectCollection, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 1, new object[2]) }, recordedPath); Assert.AreSame(Provider.Get.Heat.Heaters[1], recordedValue); // Reset numEvents = 0; recordedPath = null; recordedValue = null; TestContext.Out.WriteLine(); // Replace item TestContext.Out.WriteLine("Replace item"); newHeater = new Heater { Active = 10F }; Provider.Get.Heat.Heaters[0] = newHeater; Assert.AreEqual(1, numEvents); Assert.AreEqual(PropertyChangeType.ObjectCollection, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 0, new object[2]) }, recordedPath); Assert.AreSame(newHeater, recordedValue); // Reset numEvents = 0; recordedPath = null; recordedValue = null; TestContext.Out.WriteLine(); // Insert item TestContext.Out.WriteLine("Insert item"); newHeater = new Heater { Standby = 20F }; Provider.Get.Heat.Heaters.Insert(0, newHeater); Assert.AreEqual(3, numEvents); Assert.AreEqual(PropertyChangeType.ObjectCollection, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 2, new object[3]) }, recordedPath); Assert.AreEqual(Provider.Get.Heat.Heaters[2], recordedValue); // Reset numEvents = 0; recordedPath = null; recordedValue = null; TestContext.Out.WriteLine(); // Remove item TestContext.Out.WriteLine("Remove item"); Provider.Get.Heat.Heaters.RemoveAt(0); Assert.AreEqual(3, numEvents); Assert.AreEqual(PropertyChangeType.ObjectCollection, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 1, new object[2]) }, recordedPath); Assert.AreEqual(Provider.Get.Heat.Heaters[1], recordedValue); // Reset numEvents = 0; recordedPath = null; recordedValue = null; TestContext.Out.WriteLine(); // Clear items TestContext.Out.WriteLine("Clear items"); Provider.Get.Heat.Heaters.Clear(); Assert.AreEqual(1, numEvents); Assert.AreEqual(PropertyChangeType.ObjectCollection, recordedChangeType); Assert.AreEqual(new object[] { "heat", new ItemPathNode("heaters", 0, Array.Empty <object>()) }, recordedPath); Assert.AreEqual(null, recordedValue); // End DuetControlServer.Model.Observer.OnPropertyPathChanged -= onPropertyChanged; }
public void Assigned() { MachineModel original = new MachineModel(); BedOrChamber bed = new BedOrChamber { Name = "Bed Name" }; bed.Active.Add(123F); bed.Standby.Add(456F); bed.Heaters.Add(0); original.Heat.Beds.Add(null); original.Heat.Beds.Add(bed); BedOrChamber chamber = new BedOrChamber { Name = "Chamber Name" }; chamber.Active.Add(321F); chamber.Standby.Add(654F); chamber.Heaters.Add(4); chamber.Heaters.Add(6); original.Heat.Chambers.Add(null); original.Heat.Chambers.Add(chamber); original.Heat.ColdExtrudeTemperature = 678F; original.Heat.ColdRetractTemperature = 987F; ExtraHeater extraHeater = new ExtraHeater { Current = 123, Name = "Extra Heater", Sensor = 4, State = HeaterState.Tuning }; original.Heat.Extra.Add(extraHeater); Heater heater = new Heater { Current = 567, Max = 578, Sensor = 6, State = HeaterState.Standby }; heater.Model.DeadTime = 322; heater.Model.Gain = 673; heater.Model.MaxPwm = 0.45F; heater.Model.TimeConstant = 32; original.Heat.Heaters.Add(heater); MachineModel assigned = new MachineModel(); assigned.Assign(original); Assert.AreEqual(2, original.Heat.Beds.Count); Assert.AreEqual(original.Heat.Beds[0], null); Assert.AreEqual(original.Heat.Beds[1].Active, assigned.Heat.Beds[1].Active); Assert.AreEqual(original.Heat.Beds[1].Standby, assigned.Heat.Beds[1].Standby); Assert.AreEqual(original.Heat.Beds[1].Name, assigned.Heat.Beds[1].Name); Assert.AreEqual(original.Heat.Beds[1].Heaters, assigned.Heat.Beds[1].Heaters); Assert.AreEqual(2, original.Heat.Chambers.Count); Assert.AreEqual(original.Heat.Chambers[0], null); Assert.AreEqual(original.Heat.Chambers[1].Active, assigned.Heat.Chambers[1].Active); Assert.AreEqual(original.Heat.Chambers[1].Standby, assigned.Heat.Chambers[1].Standby); Assert.AreEqual(original.Heat.Chambers[1].Name, assigned.Heat.Chambers[1].Name); Assert.AreEqual(original.Heat.Chambers[1].Heaters, assigned.Heat.Chambers[1].Heaters); Assert.AreEqual(original.Heat.ColdExtrudeTemperature, assigned.Heat.ColdExtrudeTemperature); Assert.AreEqual(original.Heat.ColdRetractTemperature, assigned.Heat.ColdRetractTemperature); Assert.AreEqual(1, original.Heat.Extra.Count); Assert.AreEqual(original.Heat.Extra[0].Current, assigned.Heat.Extra[0].Current); Assert.AreEqual(original.Heat.Extra[0].Name, assigned.Heat.Extra[0].Name); Assert.AreEqual(original.Heat.Extra[0].Sensor, assigned.Heat.Extra[0].Sensor); Assert.AreEqual(original.Heat.Extra[0].State, assigned.Heat.Extra[0].State); Assert.AreEqual(1, original.Heat.Heaters.Count); Assert.AreEqual(original.Heat.Heaters[0].Current, assigned.Heat.Heaters[0].Current); Assert.AreEqual(original.Heat.Heaters[0].Max, assigned.Heat.Heaters[0].Max); Assert.AreEqual(original.Heat.Heaters[0].Sensor, assigned.Heat.Heaters[0].Sensor); Assert.AreEqual(original.Heat.Heaters[0].State, assigned.Heat.Heaters[0].State); Assert.AreEqual(original.Heat.Heaters[0].Model.DeadTime, assigned.Heat.Heaters[0].Model.DeadTime); Assert.AreEqual(original.Heat.Heaters[0].Model.Gain, assigned.Heat.Heaters[0].Model.Gain); Assert.AreEqual(original.Heat.Heaters[0].Model.MaxPwm, assigned.Heat.Heaters[0].Model.MaxPwm); Assert.AreEqual(original.Heat.Heaters[0].Model.TimeConstant, assigned.Heat.Heaters[0].Model.TimeConstant); Assert.AreNotSame(original.Heat.Beds[1].Active, assigned.Heat.Beds[1].Active); Assert.AreNotSame(original.Heat.Beds[1].Standby, assigned.Heat.Beds[1].Standby); Assert.AreNotSame(original.Heat.Beds[1].Name, assigned.Heat.Beds[1].Name); Assert.AreNotSame(original.Heat.Beds[1].Heaters, assigned.Heat.Beds[1].Heaters); Assert.AreNotSame(original.Heat.Chambers[1].Active, assigned.Heat.Chambers[1].Active); Assert.AreNotSame(original.Heat.Chambers[1].Standby, assigned.Heat.Chambers[1].Standby); Assert.AreNotSame(original.Heat.Chambers[1].Name, assigned.Heat.Chambers[1].Name); Assert.AreNotSame(original.Heat.Chambers[1].Heaters, assigned.Heat.Chambers[1].Heaters); Assert.AreNotSame(original.Heat.ColdExtrudeTemperature, assigned.Heat.ColdExtrudeTemperature); Assert.AreNotSame(original.Heat.ColdRetractTemperature, assigned.Heat.ColdRetractTemperature); Assert.AreNotSame(original.Heat.Extra[0].Current, assigned.Heat.Extra[0].Current); Assert.AreNotSame(original.Heat.Extra[0].Name, assigned.Heat.Extra[0].Name); Assert.AreNotSame(original.Heat.Extra[0].Sensor, assigned.Heat.Extra[0].Sensor); Assert.AreNotSame(original.Heat.Extra[0].State, assigned.Heat.Extra[0].State); Assert.AreNotSame(original.Heat.Heaters[0].Current, assigned.Heat.Heaters[0].Current); Assert.AreNotSame(original.Heat.Heaters[0].Max, assigned.Heat.Heaters[0].Max); Assert.AreNotSame(original.Heat.Heaters[0].Sensor, assigned.Heat.Heaters[0].Sensor); Assert.AreNotSame(original.Heat.Heaters[0].State, assigned.Heat.Heaters[0].State); Assert.AreNotSame(original.Heat.Heaters[0].Model.DeadTime, assigned.Heat.Heaters[0].Model.DeadTime); Assert.AreNotSame(original.Heat.Heaters[0].Model.Gain, assigned.Heat.Heaters[0].Model.Gain); Assert.AreNotSame(original.Heat.Heaters[0].Model.MaxPwm, assigned.Heat.Heaters[0].Model.MaxPwm); Assert.AreNotSame(original.Heat.Heaters[0].Model.TimeConstant, assigned.Heat.Heaters[0].Model.TimeConstant); }
public HeaterControl(Flowsheet flowsheet, Point location, Heater heater) : base(flowsheet, location, heater) { }
static void Main(string[] args) { #region test_观察者模式 //XiaoMei xiao_mei = new XiaoMei(); //XiaoMi xiao_mi = new XiaoMi(); //XiaoLan xiao_lan = new XiaoLan(); ////小米和小蓝在小美那里都注册了一下 //xiao_mei.AddPerson(xiao_mi); //xiao_mei.AddPerson(xiao_lan); ////小美向小米和小蓝发送消息 //xiao_mei.NotifyPerson(); //Console.ReadLine(); #endregion #region test_装饰者模式 #region 装饰手机demo //// 我买了个苹果手机 //Phone phone = new ApplePhone(); //// 现在想贴膜了 //Decorator applePhoneWithSticker = new Sticker(phone); //// 扩展贴膜行为 //applePhoneWithSticker.Print(); //Console.WriteLine("----------------------\n"); //// 现在我想有挂件了 //Decorator applePhoneWithAccessories = new Accessories(phone); //// 扩展手机挂件行为 //applePhoneWithAccessories.Print(); //Console.WriteLine("----------------------\n"); //// 现在我同时有贴膜和手机挂件了 //Sticker sticker = new Sticker(phone); //Accessories applePhoneWithAccessoriesAndSticker = new Accessories(sticker); //applePhoneWithAccessoriesAndSticker.Print(); #endregion #region 明治demo //Food food = new Bread(new Vegetable(new Cream(new Food("香肠")))); //Console.WriteLine(food.Make()); #endregion #endregion #region test_工厂模式 ////简单工厂模式 //Car c = Factory.getCarInstance("Benz"); //if (c != null) //{ // c.Run(); // c.Stop(); //} //else //{ // Console.WriteLine("造不了这种汽车。。。"); //} ////工厂方法模式 //VehicleFactory factory = new BroomFactory(); //Moveable m = factory.Create(); //m.Run(); ////抽象工厂模式 //AbstractFactory f = new DefaultFactory(); //Vehicle v = f.CreateVehicle(); //v.Run(); //Car car = new Car(); //car.Run(); //Weapon w = f.CreateWeapon(); //w.Shoot(); #endregion #region test_代理模式 ////静态代理 //ProxyInterface proxyInterface = new WeddingCompany(new NormalHome()); //proxyInterface.Marry(); ////动态代理 //var proxyMotheds = new Dictionary<string, DynamicAction>(); //proxyMotheds.Add("Add", new DynamicAction() //{ // BeforeAction = new Action(() => Console.WriteLine("Before Doing....")), // AfterAction = new Action(() => Console.WriteLine("After Doing....")) //}); //var user = new User(); //var t = ProxyFactory<User>.Create(user, proxyMotheds); //int count = 0; ////t.Add("Tom", 28, out count); ////t.SayName(); //Console.WriteLine(count); #endregion #region 依赖注入 ////Setter注入 //IServiceClass serviceA = new ServiceClassA(); //IServiceClass serviceB = new ServiceClassB(); //ClientClass client = new ClientClass(); //client.Set_ServiceImpl(serviceA); //client.ShowInfo(); //client.Set_ServiceImpl(serviceB); //client.ShowInfo(); //构造注入 //IServiceClass serviceA = new ServiceClassA(); //IServiceClass serviceB = new ServiceClassB(); //ClientClass clientA = new ClientClass(serviceA); //ClientClass clientB = new ClientClass(serviceB); //clientA.ShowInfo(); //clientB.ShowInfo(); ////依赖获取 //IFactory factory = FactoryContainer.factory; //IWindow window = factory.MakeWindow(); //Console.WriteLine("创建 " + window.ShowInfo()); //IButton button = factory.MakeButton(); //Console.WriteLine("创建 " + button.ShowInfo()); //ITextBox textBox = factory.MakeTextBox(); //Console.WriteLine("创建 " + textBox.ShowInfo()); #endregion #region 委托 Heater heater = new Heater(); Alarm alarm = new Alarm(); heater.BoilEvent += alarm.MakeAlert; //注册方法 heater.BoilEvent += (new Alarm()).MakeAlert; //给匿名对象注册方法 heater.BoilEvent += Display.ShowMsg; //注册静态方法 heater.BoilWater(); //烧水,会自动调用注册过对象的方法 #endregion Console.ReadLine(); }
public static void DelegateAndEventTwo() { Heater.TestStart(); }
//Partial for Heater public PartialViewResult RenderStateHeater(Heater model) { return(PartialView("PartialHeaterView", model)); }
public Heater CreateHeater(string deviceName, bool power, Slider slider) { Heater tempConditioner = new Heater(deviceName, power, slider); return(tempConditioner); }
public static float[,] AddHeat(this float[,] array, Vector2Int position, Heater function) { return(array.AddHeat(position, function, (original, y) => original + y)); }
private Flowsheet SetFlowsheetContent(NewProcessSettings newProcessSettings, ApplicationPreferences appPrefs, ArrayList items, string flowsheetName) { Flowsheet flowsheet = null; FlowsheetVersion flowsheetVersion = null; IEnumerator e = items.GetEnumerator(); while (e.MoveNext()) { object obj = e.Current; if (obj is EvaporationAndDryingSystem) { EvaporationAndDryingSystem persisted = (EvaporationAndDryingSystem)obj; persisted.SetSystemFileName(flowsheetName); // call this before SetObjectData() persisted.SetObjectData(); flowsheet = new Flowsheet(newProcessSettings, appPrefs, persisted); } else if (obj is GasStreamControl) { GasStreamControl persistedCtrl = (GasStreamControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); DryingGasStream stream = flowsheet.EvaporationAndDryingSystem.GetGasStream(solvableName); GasStreamControl newCtrl = new GasStreamControl(flowsheet, new Point(0, 0), stream); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is MaterialStreamControl) { MaterialStreamControl persistedCtrl = (MaterialStreamControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); DryingMaterialStream stream = flowsheet.EvaporationAndDryingSystem.GetMaterialStream(solvableName); MaterialStreamControl newCtrl = new MaterialStreamControl(flowsheet, new Point(0, 0), stream); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is DryerControl) { DryerControl persistedCtrl = (DryerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Dryer uo = flowsheet.EvaporationAndDryingSystem.GetDryer(solvableName); DryerControl newCtrl = new DryerControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is HeatExchangerControl) { HeatExchangerControl persistedCtrl = (HeatExchangerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); HeatExchanger uo = flowsheet.EvaporationAndDryingSystem.GetHeatExchanger(solvableName); HeatExchangerControl newCtrl = new HeatExchangerControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is CycloneControl) { CycloneControl persistedCtrl = (CycloneControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Cyclone uo = flowsheet.EvaporationAndDryingSystem.GetCyclone(solvableName); CycloneControl newCtrl = new CycloneControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is EjectorControl) { EjectorControl persistedCtrl = (EjectorControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Ejector uo = flowsheet.EvaporationAndDryingSystem.GetEjector(solvableName); EjectorControl newCtrl = new EjectorControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is WetScrubberControl) { WetScrubberControl persistedCtrl = (WetScrubberControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); WetScrubber uo = flowsheet.EvaporationAndDryingSystem.GetWetScrubber(solvableName); WetScrubberControl newCtrl = new WetScrubberControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is ScrubberCondenserControl) { ScrubberCondenserControl persistedCtrl = (ScrubberCondenserControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); ScrubberCondenser uo = flowsheet.EvaporationAndDryingSystem.GetScrubberCondenser(solvableName); ScrubberCondenserControl newCtrl = new ScrubberCondenserControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is MixerControl) { MixerControl persistedCtrl = (MixerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Mixer uo = flowsheet.EvaporationAndDryingSystem.GetMixer(solvableName); MixerControl newCtrl = new MixerControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is TeeControl) { TeeControl persistedCtrl = (TeeControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Tee uo = flowsheet.EvaporationAndDryingSystem.GetTee(solvableName); TeeControl newCtrl = new TeeControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is FlashTankControl) { FlashTankControl persistedCtrl = (FlashTankControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); FlashTank uo = flowsheet.EvaporationAndDryingSystem.GetFlashTank(solvableName); FlashTankControl newCtrl = new FlashTankControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is FanControl) { FanControl persistedCtrl = (FanControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Fan uo = flowsheet.EvaporationAndDryingSystem.GetFan(solvableName); FanControl newCtrl = new FanControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is ValveControl) { ValveControl persistedCtrl = (ValveControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Valve uo = flowsheet.EvaporationAndDryingSystem.GetValve(solvableName); ValveControl newCtrl = new ValveControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is BagFilterControl) { BagFilterControl persistedCtrl = (BagFilterControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); BagFilter uo = flowsheet.EvaporationAndDryingSystem.GetBagFilter(solvableName); BagFilterControl newCtrl = new BagFilterControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is AirFilterControl) { AirFilterControl persistedCtrl = (AirFilterControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); AirFilter uo = flowsheet.EvaporationAndDryingSystem.GetAirFilter(solvableName); AirFilterControl newCtrl = new AirFilterControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is CompressorControl) { CompressorControl persistedCtrl = (CompressorControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Compressor uo = flowsheet.EvaporationAndDryingSystem.GetCompressor(solvableName); CompressorControl newCtrl = new CompressorControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is HeaterControl) { HeaterControl persistedCtrl = (HeaterControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Heater uo = flowsheet.EvaporationAndDryingSystem.GetHeater(solvableName); HeaterControl newCtrl = new HeaterControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is CoolerControl) { CoolerControl persistedCtrl = (CoolerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Cooler uo = flowsheet.EvaporationAndDryingSystem.GetCooler(solvableName); CoolerControl newCtrl = new CoolerControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is ElectrostaticPrecipitatorControl) { ElectrostaticPrecipitatorControl persistedCtrl = (ElectrostaticPrecipitatorControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); ElectrostaticPrecipitator uo = flowsheet.EvaporationAndDryingSystem.GetElectrostaticPrecipitator(solvableName); ElectrostaticPrecipitatorControl newCtrl = new ElectrostaticPrecipitatorControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is PumpControl) { PumpControl persistedCtrl = (PumpControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Pump uo = flowsheet.EvaporationAndDryingSystem.GetPump(solvableName); PumpControl newCtrl = new PumpControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is RecycleControl) { RecycleControl persistedCtrl = (RecycleControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Recycle uo = flowsheet.EvaporationAndDryingSystem.GetRecycle(solvableName); RecycleControl newCtrl = new RecycleControl(flowsheet, new Point(0, 0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is SolvableConnection) { SolvableConnection persistedDc = (SolvableConnection)obj; SolvableConnection dc = new SolvableConnection(flowsheet); dc.SetObjectData(persistedDc.SerializationInfo, persistedDc.StreamingContext); dc.UpdateConnection(); flowsheet.ConnectionManager.AddConnection(dc); } else if (obj is FlowsheetPreferences) { FlowsheetPreferences flowsheetPrefs = obj as FlowsheetPreferences; flowsheetPrefs.SetObjectData(flowsheetPrefs.SerializationInfo, flowsheetPrefs.StreamingContext); flowsheet.BackColor = flowsheetPrefs.BackColor; } else if (obj is ProsimoUI.CustomEditor.CustomEditor) { ProsimoUI.CustomEditor.CustomEditor persistedEditor = (ProsimoUI.CustomEditor.CustomEditor)obj; flowsheet.CustomEditor.SetObjectData(persistedEditor.SerializationInfo, persistedEditor.StreamingContext); } else if (obj is FlowsheetVersion) { flowsheetVersion = obj as FlowsheetVersion; flowsheetVersion.SetObjectData(flowsheetVersion.SerializationInfo, flowsheetVersion.StreamingContext); } } if (flowsheetVersion != null) { flowsheet.Version = flowsheetVersion; } FlowsheetVersionStatus flowsheetVersionStatus = CheckFlowsheetVersion(flowsheet); if (flowsheetVersionStatus == FlowsheetVersionStatus.Ok) { flowsheet.IsDirty = false; } else if (flowsheetVersionStatus == FlowsheetVersionStatus.Upgraded) { flowsheet.IsDirty = true; } else if (flowsheetVersionStatus == FlowsheetVersionStatus.NotOk) { flowsheet = null; } return(flowsheet); }
public void warm(Heater heater) { heater.heat(name); }
static void Main(string[] args) { Console.WriteLine("Hello,World"); #if ASYN /* * // asynchronous by using a delegatel * TakesAWhileDelegate dl = TakesAWhile; * IAsyncResult ar = dl.BeginInvoke(1, 3000, null, null); * while(!ar.IsCompleted) * { * Console.Write(". "); * Thread.Sleep(50); * } */ #endif // 使用信号量实现同步问题; // 定义线程的锁定个数 int threadCount = 6; int semphoreCount = 4; var semaphore = new SemaphoreSlim(semphoreCount, semphoreCount); var threads = new Thread[threadCount]; for (int i = 0; i < threadCount; i++) { threads[i] = new Thread(ThreadMain); // 使用信号量 threads[i].Start(semaphore); } for (int i = 0; i < threadCount; i++) { threads[i].Join(); } Console.WriteLine(" all threads finished!"); int numTask = 20; var state = new SharedState(); var tasks = new Task[numTask]; for (int i = 0; i < numTask; i++) { tasks[i] = new Task(new Job(state).DoTheJob); tasks[i].Start(); } for (int i = 0; i < numTask; i++) { tasks[i].Wait(); } Console.WriteLine("summarized in thread {0}", state.State); #if Test Thermostat thermostat = new Thermostat(); Heater heater = new Heater(40); Cooler cooler = new Cooler(70); string temprature; // 测试委托符号的使用 Thermostat.TempratureChangeHandler delegate1; Thermostat.TempratureChangeHandler delegate2; Thermostat.TempratureChangeHandler delegate3; // use Constructor for cs delegate1 = heater.OnTempratureChanged; delegate2 = cooler.OnTempratureChanged; Console.WriteLine("Invoke both delegates: "); delegate3 = delegate1; delegate3 += delegate2; delegate3(90); Console.WriteLine("only Invoke delegate2: "); delegate3 -= delegate1; delegate3(20); Console.WriteLine(" delegate end!"); // 多播委托 thermostat.onTempratureChange += heater.OnTempratureChanged; // 故意使用异常,让委托报错,测试委托链时候任然可正常工作, 这里使用lambda表达式 thermostat.onTempratureChange += (newtemprature) => { throw new ApplicationException(); }; thermostat.onTempratureChange += cooler.OnTempratureChanged; Console.Write("Enter temprature: "); temprature = Console.ReadLine(); thermostat.CurrentTemprature = float.Parse(temprature); Console.WriteLine(); // 爸爸儿子任务 var parent = new Task(ParentTask); parent.Start(); Thread.Sleep(2000); Console.WriteLine(parent.Status); Thread.Sleep(4000); Console.WriteLine(parent.Status); //使用Thread类实现方法 var t1 = new Thread(ThreadMain); t1.Start(); Console.WriteLine("This is a main thread"); // using task factory TaskFactory tf = new TaskFactory(); Task task1 = tf.StartNew(TaskMethod); // using the task factory via a task Task task2 = Task.Factory.StartNew(TaskMethod); // using Task constuctor Task task3 = new Task(TaskMethod); task3.Start(); Console.WriteLine(); // 连续任务的执行 Task a1 = new Task(DoOnFirst); Task a2 = a1.ContinueWith(DoOnSecond); Task a3 = a1.ContinueWith(DoOnSecond); Task a4 = a2.ContinueWith(DoOnSecond); // 只在任务失败是得到执行 Task a5 = a1.ContinueWith(DoOnSecond, TaskContinuationOptions.OnlyOnFaulted); #endif Console.ReadLine(); }
public static void ShowMsg(Object sender, Heater.BoiledEventArgs e) { //静态方法 Heater heater = (Heater)sender; Console.WriteLine("Display:{0} - {1}: ", heater.area, heater.type); Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", e.temperature); Console.WriteLine(); }
public void Clone() { MachineModel original = new MachineModel(); BedOrChamber bed = new BedOrChamber { Active = new float[] { 123F }, Standby = new float[] { 456F }, Name = "Bed Name", Heaters = new int[] { 0 } }; original.Heat.Beds.Add(null); original.Heat.Beds.Add(bed); BedOrChamber chamber = new BedOrChamber { Active = new float[] { 321F }, Standby = new float[] { 654F }, Name = "Chamber Name", Heaters = new int[] { 4, 6 } }; original.Heat.Chambers.Add(null); original.Heat.Chambers.Add(chamber); original.Heat.ColdExtrudeTemperature = 678F; original.Heat.ColdRetractTemperature = 987F; ExtraHeater extraHeater = new ExtraHeater { Current = 123, Name = "Extra Heater", Sensor = 4, State = HeaterState.Tuning }; original.Heat.Extra.Add(extraHeater); Heater heater = new Heater { Current = 567, Max = 578, Sensor = 6, State = HeaterState.Standby }; heater.Model.DeadTime = 322; heater.Model.Gain = 673; heater.Model.MaxPwm = 0.45F; heater.Model.TimeConstant = 32; original.Heat.Heaters.Add(heater); MachineModel clone = (MachineModel)original.Clone(); Assert.AreEqual(2, original.Heat.Beds.Count); Assert.AreEqual(original.Heat.Beds[0], null); Assert.AreEqual(original.Heat.Beds[1].Active, clone.Heat.Beds[1].Active); Assert.AreEqual(original.Heat.Beds[1].Standby, clone.Heat.Beds[1].Standby); Assert.AreEqual(original.Heat.Beds[1].Name, clone.Heat.Beds[1].Name); Assert.AreEqual(original.Heat.Beds[1].Heaters, clone.Heat.Beds[1].Heaters); Assert.AreEqual(2, original.Heat.Chambers.Count); Assert.AreEqual(original.Heat.Chambers[0], null); Assert.AreEqual(original.Heat.Chambers[1].Active, clone.Heat.Chambers[1].Active); Assert.AreEqual(original.Heat.Chambers[1].Standby, clone.Heat.Chambers[1].Standby); Assert.AreEqual(original.Heat.Chambers[1].Name, clone.Heat.Chambers[1].Name); Assert.AreEqual(original.Heat.Chambers[1].Heaters, clone.Heat.Chambers[1].Heaters); Assert.AreEqual(original.Heat.ColdExtrudeTemperature, clone.Heat.ColdExtrudeTemperature); Assert.AreEqual(original.Heat.ColdRetractTemperature, clone.Heat.ColdRetractTemperature); Assert.AreEqual(1, original.Heat.Extra.Count); Assert.AreEqual(original.Heat.Extra[0].Current, clone.Heat.Extra[0].Current); Assert.AreEqual(original.Heat.Extra[0].Name, clone.Heat.Extra[0].Name); Assert.AreEqual(original.Heat.Extra[0].Sensor, clone.Heat.Extra[0].Sensor); Assert.AreEqual(original.Heat.Extra[0].State, clone.Heat.Extra[0].State); Assert.AreEqual(1, original.Heat.Heaters.Count); Assert.AreEqual(original.Heat.Heaters[0].Current, clone.Heat.Heaters[0].Current); Assert.AreEqual(original.Heat.Heaters[0].Max, clone.Heat.Heaters[0].Max); Assert.AreEqual(original.Heat.Heaters[0].Sensor, clone.Heat.Heaters[0].Sensor); Assert.AreEqual(original.Heat.Heaters[0].State, clone.Heat.Heaters[0].State); Assert.AreEqual(original.Heat.Heaters[0].Model.DeadTime, clone.Heat.Heaters[0].Model.DeadTime); Assert.AreEqual(original.Heat.Heaters[0].Model.Gain, clone.Heat.Heaters[0].Model.Gain); Assert.AreEqual(original.Heat.Heaters[0].Model.MaxPwm, clone.Heat.Heaters[0].Model.MaxPwm); Assert.AreEqual(original.Heat.Heaters[0].Model.TimeConstant, clone.Heat.Heaters[0].Model.TimeConstant); Assert.AreNotSame(original.Heat.Beds[1].Active, clone.Heat.Beds[1].Active); Assert.AreNotSame(original.Heat.Beds[1].Standby, clone.Heat.Beds[1].Standby); Assert.AreNotSame(original.Heat.Beds[1].Name, clone.Heat.Beds[1].Name); Assert.AreNotSame(original.Heat.Beds[1].Heaters, clone.Heat.Beds[1].Heaters); Assert.AreNotSame(original.Heat.Chambers[1].Active, clone.Heat.Chambers[1].Active); Assert.AreNotSame(original.Heat.Chambers[1].Standby, clone.Heat.Chambers[1].Standby); Assert.AreNotSame(original.Heat.Chambers[1].Name, clone.Heat.Chambers[1].Name); Assert.AreNotSame(original.Heat.Chambers[1].Heaters, clone.Heat.Chambers[1].Heaters); Assert.AreNotSame(original.Heat.ColdExtrudeTemperature, clone.Heat.ColdExtrudeTemperature); Assert.AreNotSame(original.Heat.ColdRetractTemperature, clone.Heat.ColdRetractTemperature); Assert.AreNotSame(original.Heat.Extra[0].Current, clone.Heat.Extra[0].Current); Assert.AreNotSame(original.Heat.Extra[0].Name, clone.Heat.Extra[0].Name); Assert.AreNotSame(original.Heat.Extra[0].Sensor, clone.Heat.Extra[0].Sensor); Assert.AreNotSame(original.Heat.Extra[0].State, clone.Heat.Extra[0].State); Assert.AreNotSame(original.Heat.Heaters[0].Current, clone.Heat.Heaters[0].Current); Assert.AreNotSame(original.Heat.Heaters[0].Max, clone.Heat.Heaters[0].Max); Assert.AreNotSame(original.Heat.Heaters[0].Sensor, clone.Heat.Heaters[0].Sensor); Assert.AreNotSame(original.Heat.Heaters[0].State, clone.Heat.Heaters[0].State); Assert.AreNotSame(original.Heat.Heaters[0].Model.DeadTime, clone.Heat.Heaters[0].Model.DeadTime); Assert.AreNotSame(original.Heat.Heaters[0].Model.Gain, clone.Heat.Heaters[0].Model.Gain); Assert.AreNotSame(original.Heat.Heaters[0].Model.MaxPwm, clone.Heat.Heaters[0].Model.MaxPwm); Assert.AreNotSame(original.Heat.Heaters[0].Model.TimeConstant, clone.Heat.Heaters[0].Model.TimeConstant); }
public ECS(int thr) { SetThreshold(thr); _tempSensor = new TempSensor(); _heater = new Heater(); }
private static void ProcessHeaterEvent(Heater heater, TimedEvent timedEvent) { bool newState = false; bool foundProcessed = false; Room room = HeatingControl.GetRoom(heater.roomId); int sensorTotal = 0; int sensorAverage = 0; int sensorCount = 0; foreach (Sensor sensor in heater.sensors) { if (!sensor.ignore) { sensorTotal += sensor.reading; sensorCount++; } } if (sensorCount > 0) { sensorAverage = sensorTotal / sensorCount; if (sensorAverage >= room.tempMax) { return; } } if (timedEvent.action == "timed") { newState = true; } else if (timedEvent.action == "target") { if (sensorCount == 0) { return; } if (sensorAverage < room.tempTarget + m_iTempDelta) { newState = true; } else if (sensorAverage == room.tempTarget + m_iTempDelta) { // Keep relay in same state to avoid flip-flopping newState = RelayControl.GetRelayState(heater.relayAddress); } } foundProcessed = false; foreach (ProcessedRelay processedRelay in m_oProcessedRelays) { if (heater.relayAddress == processedRelay.relayAddress) { if (timedEvent.id >= processedRelay.eventId) {// highest event id has priority processedRelay.eventId = timedEvent.id; } foundProcessed = true; break; } } if (!foundProcessed) { m_oProcessedRelays.Add(new ProcessedRelay(heater.relayAddress, timedEvent.id)); } RelayControl.SetupRelay(heater.relayAddress, newState); }
private Flowsheet SetFlowsheetContent(NewSystemPreferences newSystemPrefs, ArrayList items) { Flowsheet flowsheet = null; IEnumerator e = items.GetEnumerator(); while (e.MoveNext()) { object obj = e.Current; if (obj is EvaporationAndDryingSystem) { EvaporationAndDryingSystem persisted = (EvaporationAndDryingSystem)obj; persisted.SetObjectData(); flowsheet = new Flowsheet(newSystemPrefs, persisted); } else if (obj is GasStreamControl) { GasStreamControl persistedCtrl = (GasStreamControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); DryingGasStream stream = flowsheet.EvaporationAndDryingSystem.GetGasStream(solvableName); GasStreamControl newCtrl = new GasStreamControl(flowsheet, new Point(0,0), stream); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is MaterialStreamControl) { MaterialStreamControl persistedCtrl = (MaterialStreamControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); DryingMaterialStream stream = flowsheet.EvaporationAndDryingSystem.GetMaterialStream(solvableName); MaterialStreamControl newCtrl = new MaterialStreamControl(flowsheet, new Point(0,0), stream); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is DryerControl) { DryerControl persistedCtrl = (DryerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Dryer uo = flowsheet.EvaporationAndDryingSystem.GetDryer(solvableName); DryerControl newCtrl = new DryerControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is HeatExchangerControl) { HeatExchangerControl persistedCtrl = (HeatExchangerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); HeatExchanger uo = flowsheet.EvaporationAndDryingSystem.GetHeatExchanger(solvableName); HeatExchangerControl newCtrl = new HeatExchangerControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is CycloneControl) { CycloneControl persistedCtrl = (CycloneControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Cyclone uo = flowsheet.EvaporationAndDryingSystem.GetCyclone(solvableName); CycloneControl newCtrl = new CycloneControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is EjectorControl) { EjectorControl persistedCtrl = (EjectorControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Ejector uo = flowsheet.EvaporationAndDryingSystem.GetEjector(solvableName); EjectorControl newCtrl = new EjectorControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is WetScrubberControl) { WetScrubberControl persistedCtrl = (WetScrubberControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); WetScrubber uo = flowsheet.EvaporationAndDryingSystem.GetWetScrubber(solvableName); WetScrubberControl newCtrl = new WetScrubberControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is MixerControl) { MixerControl persistedCtrl = (MixerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Mixer uo = flowsheet.EvaporationAndDryingSystem.GetMixer(solvableName); MixerControl newCtrl = new MixerControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is TeeControl) { TeeControl persistedCtrl = (TeeControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Tee uo = flowsheet.EvaporationAndDryingSystem.GetTee(solvableName); TeeControl newCtrl = new TeeControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is FlashTankControl) { FlashTankControl persistedCtrl = (FlashTankControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); FlashTank uo = flowsheet.EvaporationAndDryingSystem.GetFlashTank(solvableName); FlashTankControl newCtrl = new FlashTankControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is FanControl) { FanControl persistedCtrl = (FanControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Fan uo = flowsheet.EvaporationAndDryingSystem.GetFan(solvableName); FanControl newCtrl = new FanControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is ValveControl) { ValveControl persistedCtrl = (ValveControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Valve uo = flowsheet.EvaporationAndDryingSystem.GetValve(solvableName); ValveControl newCtrl = new ValveControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is BagFilterControl) { BagFilterControl persistedCtrl = (BagFilterControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); BagFilter uo = flowsheet.EvaporationAndDryingSystem.GetBagFilter(solvableName); BagFilterControl newCtrl = new BagFilterControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is AirFilterControl) { AirFilterControl persistedCtrl = (AirFilterControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); AirFilter uo = flowsheet.EvaporationAndDryingSystem.GetAirFilter(solvableName); AirFilterControl newCtrl = new AirFilterControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is CompressorControl) { CompressorControl persistedCtrl = (CompressorControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Compressor uo = flowsheet.EvaporationAndDryingSystem.GetCompressor(solvableName); CompressorControl newCtrl = new CompressorControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is HeaterControl) { HeaterControl persistedCtrl = (HeaterControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Heater uo = flowsheet.EvaporationAndDryingSystem.GetHeater(solvableName); HeaterControl newCtrl = new HeaterControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is CoolerControl) { CoolerControl persistedCtrl = (CoolerControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Cooler uo = flowsheet.EvaporationAndDryingSystem.GetCooler(solvableName); CoolerControl newCtrl = new CoolerControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is ElectrostaticPrecipitatorControl) { ElectrostaticPrecipitatorControl persistedCtrl = (ElectrostaticPrecipitatorControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); ElectrostaticPrecipitator uo = flowsheet.EvaporationAndDryingSystem.GetElectrostaticPrecipitator(solvableName); ElectrostaticPrecipitatorControl newCtrl = new ElectrostaticPrecipitatorControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is PumpControl) { PumpControl persistedCtrl = (PumpControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Pump uo = flowsheet.EvaporationAndDryingSystem.GetPump(solvableName); PumpControl newCtrl = new PumpControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is RecycleControl) { RecycleControl persistedCtrl = (RecycleControl)obj; string solvableName = (string)persistedCtrl.SerializationInfo.GetValue("SolvableName", typeof(string)); Recycle uo = flowsheet.EvaporationAndDryingSystem.GetRecycle(solvableName); RecycleControl newCtrl = new RecycleControl(flowsheet, new Point(0,0), uo); newCtrl.SetObjectData(persistedCtrl.SerializationInfo, persistedCtrl.StreamingContext); flowsheet.Controls.Add(newCtrl); } else if (obj is SolvableConnection) { SolvableConnection persistedDc = (SolvableConnection)obj; SolvableConnection dc = new SolvableConnection(flowsheet); dc.SetObjectData(persistedDc.SerializationInfo, persistedDc.StreamingContext); flowsheet.ConnectionManager.Connections.Add(dc); } else if (obj is FlowsheetPreferences) { FlowsheetPreferences flowsheetPrefs = obj as FlowsheetPreferences; flowsheetPrefs.SetObjectData(flowsheetPrefs.SerializationInfo, flowsheetPrefs.StreamingContext); flowsheet.InitializeCurrentUnitSystem(flowsheetPrefs.CurrentUnitSystemName); flowsheet.NumericFormat = flowsheetPrefs.NumericFormat; flowsheet.DecimalPlaces = flowsheetPrefs.DecimalPlaces; } else if (obj is ProsimoUI.CustomEditor.CustomEditor) { ProsimoUI.CustomEditor.CustomEditor persistedEditor = (ProsimoUI.CustomEditor.CustomEditor)obj; flowsheet.CustomEditor.SetObjectData(persistedEditor.SerializationInfo, persistedEditor.StreamingContext); } } if (this.CheckFlowsheetVersion(items, flowsheet)) flowsheet.IsDirty = false; else flowsheet = null; return flowsheet; }
public static void Main() { Thermostat thermostat = new Thermostat(); Heater heater = new Heater(60); Cooler cooler = new Cooler(80); string temperature; // Using C# 2.0 or later syntax. thermostat.OnTemperatureChange += heater.OnTemperatureChanged; thermostat.OnTemperatureChange += cooler.OnTemperatureChanged; Console.Write("Enter temperature: "); temperature = Console.ReadLine(); thermostat.CurrentTemperature = int.Parse(temperature); }
public static void Main() { Thermostat thermostat = new Thermostat(); Heater heater = new Heater(60); Cooler cooler = new Cooler(80); Action<float> delegate1; Action<float> delegate2; Action<float> delegate3; // Note: Use new Action(cooler.OnTemperatureChanged) // for C# 1.0 syntax. delegate1 = heater.OnTemperatureChanged; delegate2 = cooler.OnTemperatureChanged; Console.WriteLine("Combine delegates using + operator:"); delegate3 = delegate1 + delegate2; delegate3(60); Console.WriteLine("Uncombine delegates using - operator:"); delegate3 = delegate3 - delegate2; delegate3(60); }