public HeatData GetHeatData(HeatData hd, int intervalSec) { if (hd == null) throw new ArgumentNullException("hd"); hd.CarbonMonoxideVolumePercent = CarbonMonoxideVolumePercent.Average(intervalSec); hd.CarbonMonoxideVolumePercentPrevious = CarbonMonoxideVolumePercentPrevious.Average(intervalSec); hd.CarbonOxideVolumePercent = CarbonOxideVolumePercent.Average(intervalSec); hd.CarbonOxideVolumePercentPrevious = CarbonOxideVolumePercentPrevious.Average(intervalSec); hd.OffgasVolumeRate = OffgasVolumeRate.Average(intervalSec); hd.HeightLanceCentimeters = (int) Math.Round(HeightLanceCentimeters.Average(intervalSec), 0); hd.OxygenVolumeRate = OxygenVolumeRate.Average(intervalSec); hd.OxygenVolumeCurrent = OxygenVolumeCurrent.Average(intervalSec); return hd; }
public static void Iterate(HeatData heatData) { using (var l = new Logger("Iterate")) { if (ModelIsStarted) { var currentStateData = new MFCMData { CarbonMonoxideVolumePercent = heatData.CarbonMonoxideVolumePercent, CarbonOxideVolumePercent = heatData.CarbonOxideVolumePercent, HeightLanceCentimeters = heatData.HeightLanceCentimeters, OxygenVolumeRate = heatData.OxygenVolumeRate }; m_currentMatrix = MFMChooser(heatData); var matrixStateData = Program.MFCMDataGenerate(Program.MatrixStateDataFull[m_currentMatrix].MatrixList); var CMCarbon = Decarbonater.MultiFactorCarbonMass(matrixStateData, currentStateData); //if (CMCarbon < RemainCarbonPercent) RemainCarbonPercent = CMCarbon; RemainCarbonPercent = CMCarbon; var fex2 = new ConnectionProvider.FlexHelper("SMFCarbon.Result"); fex2.AddArg("C", RemainCarbonPercent); fex2.Fire(Program.PushGate); Console.CursorTop = Console.CursorTop - 1; Console.WriteLine(" "); Console.CursorTop = Console.CursorTop - 1; Console.WriteLine("Carbon = " + RemainCarbonPercent + "%"); if (MomentFixDataForMFactorModel(heatData.CarbonMonoxideVolumePercent, heatData.CarbonOxideVolumePercent)) // фиксируем для обучения { if (!m_dataIsFixed) { CurrentHeatResult.OxygenVolumeRate = heatData.OxygenVolumeRate; CurrentHeatResult.SteelCarbonCalculationPercent = RemainCarbonPercent; CurrentHeatResult.CarbonMonoxideVolumePercent = heatData.CarbonMonoxideVolumePercent; CurrentHeatResult.CarbonOxideVolumePercent = heatData.CarbonOxideVolumePercent; CurrentHeatResult.HeightLanceCentimeters = heatData.HeightLanceCentimeters; CurrentHeatResult.MFMEquationId = m_currentMatrix; // фиксируем матрицу по которой учим EnqueueWaitC(CurrentHeatResult); // ставим в очередь ожидания углерода var fex = new ConnectionProvider.FlexHelper("SMFCarbon.DataFix"); fex.AddArg("C", RemainCarbonPercent); fex.Fire(Program.PushGate); l.msg(fex.evt + "\n"); m_dataIsFixed = true; } } } else { ModelIsStarted = ModelVerifiForStart( heatData.OxygenVolumeTotal, heatData.OxygenVolumeCurrent, heatData.CarbonMonoxideVolumePercent, heatData.CarbonMonoxideVolumePercentPrevious, heatData.CarbonOxideVolumePercent, heatData.CarbonOxideVolumePercentPrevious ); if (ModelIsStarted) { var fex = new ConnectionProvider.FlexHelper("SMFCarbon.ModelIsStarted"); fex.Fire(Program.PushGate); l.msg(fex.evt + "\n"); } Console.Write("."); } } }
private static int MFMChooser(HeatData hd) { return (hd.CarbonOxideVolumePercent > hd.CarbonOxideVolumePercentPrevious) ? 0 : 1; }
public static void Init() { m_sw = new Stopwatch(); CurrentHeatResult = new MFCMDataFull(); DataCurrentHeat = new HeatData(); DataSmoothCurrent = new HeatDataSmoother(100); m_smoothSecondLancePosition = new RollingAverage(); TotalCarbonMass = 0.0; RemainCarbonMass = 0.0; RemainCarbonPercent = 0.0; m_maxDownLancePosition = 10000; m_lanceSpeed = 0.0; TotalCarbonMassCalculated = false; GasCarbonMassFinished = false; m_dataIsFixed = false; ModelIsStarted = false; }