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();
 }
Esempio n. 3
0
 /*
       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);
                }
            }
        }
Esempio n. 9
0
        /*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);
        }
Esempio n. 10
0
        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();
        }
Esempio n. 11
0
        /*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);
        }
Esempio n. 12
0
 public void InitializeVariableLabels(Heater uo)
 {
     this.labelPressureDrop.InitializeVariable(uo.PressureDrop);
     this.labelHeatLoss.InitializeVariable(uo.HeatLoss);
     this.labelHeatInput.InitializeVariable(uo.HeatInput);
 }
Esempio n. 13
0
 public HeaterLabelsControl(Heater uo) : this()
 {
     this.InitializeVariableLabels(uo);
 }
Esempio n. 14
0
        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);
        }
Esempio n. 16
0
        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();
        }
Esempio n. 17
0
        /// <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}");
                }
            }
        }
Esempio n. 18
0
        public void runSelfTest_returnsTrue()
        {
            var uut = new Heater();

            Assert.That(uut.RunSelfTest(), Is.True);
        }
Esempio n. 19
0
        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;
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
 public HeaterControl(Flowsheet flowsheet, Point location, Heater heater)
     : base(flowsheet, location, heater)
 {
 }
Esempio n. 22
0
        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();
        }
Esempio n. 23
0
 public static void DelegateAndEventTwo()
 {
     Heater.TestStart();
 }
 //Partial for Heater
 public PartialViewResult RenderStateHeater(Heater model)
 {
     return(PartialView("PartialHeaterView", model));
 }
Esempio n. 25
0
        public Heater CreateHeater(string deviceName, bool power, Slider slider)
        {
            Heater tempConditioner = new Heater(deviceName, power, slider);

            return(tempConditioner);
        }
Esempio n. 26
0
 public static float[,] AddHeat(this float[,] array, Vector2Int position, Heater function)
 {
     return(array.AddHeat(position, function, (original, y) => original + y));
 }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
 public void warm(Heater heater)
 {
     heater.heat(name);
 }
Esempio n. 29
0
        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();
 }
Esempio n. 31
0
        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);
        }
Esempio n. 32
0
 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);
        }
Esempio n. 34
0
      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);
        }