private void CalcButton_Click(object sender, EventArgs e)     // This event will be handled by Plus,Minus,Devide and Multiply
    {
        Decimal.TryParse(txtDisplay.Text, out dMemory1);
        switch (((button)sender).Text)
        {
        case "+":
            status = CalcStatus.Plus;
            break;

        case "-":
            status = CalcStatus.Minus;
            break;

        case "/":
            status = CalcStatus.Divide;
            break;

        case "*":
            status = CalcStatus.Multiply;
            break;
        }
        bHasNewFlag = true;
        bHasEquals  = false;
        dMemroy2    = 0M;
    }
    private void EqualsTo_Click(object sender, EventArgs e)             // This event will be handled by Equals To (=)
    {
        Decimal dVal = 0M;

        if (bHasEquals == false)
        {
            Decimal.TryParse(txtDisplay.Text, out dMemory1);
        }

        switch (status)
        {
        case "+":
            dVal = dMemory1 + dMemory2;
            break;

        case "-":
            status = CalcStatus.Minus;
            dVal   = dMemory1 - dMemory2;
            break;

        case "/":
            dVal = dMemory1 / dMemory2;
            break;

        case "*":
            dVal = dMemory1 * dMemory2;
            break;
        }
        txtDisplay.Text = dVal;
        bHasEquals      = true;
    }
 public void SetCalcStatus(CalcStatus calcStatus, string message = null)
 {
     if (CalcQuantity == null)
     {
         CalcQuantity = new CalcQuantity();
     }
     CalcQuantity.CalcStatus = calcStatus;
     if (message != null)
     {
         CalcQuantity.Message = message;
     }
 }
        // -------------------------------------
        public void Recalculate()
        {
            try
            {
                if (EqPreviewVariables.Count > 0)
                {
                    if (_bCalculating) return;
                    _bCalculating = true;

                    UpdateCalcInputs();
                    ClearResults();

                    CalcStatus calcStatus = _currentEquationCalc.CalculateAll();

                    IList<FunCalcError> lowestErrors = new List<FunCalcError>();
                    IList<FunCalcError> allErrors = new List<FunCalcError>();
                    _currentEquationCalc.GetErrors(ref lowestErrors, ref allErrors, NumberFormat: NumberFormat);
                    if (lowestErrors?.Count > 0)
                    {
                        _errorMessage = lowestErrors[0].Message;
                    }
                    else
                    {
                        foreach (var item in EqPreviewVariables)
                        {
                            if (item.UnExpectedDimensions)
                            {
                                _errorMessage = "Unexpected Dimensions in variables or results";
                            }
                        }
                    }
                    OnMessagesChanged();

                    RefreshEqPreviewVariables();

                    SetMaxUOMLength();
                    CalculationFinished?.Invoke(this, null);
                }
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
                throw;
            }
            finally
            {
                _bCalculating = false;
            }
        }
예제 #5
0
        ////TEST BUTTON***************************************************************************************************************************************************

        private void button11_Click(object sender, EventArgs e)
        {
            //個体値
            Status StKotai = new Status((31, 31, 31, 31, 31, 31));
            //努力値
            Status StDoryoku = new Status((252, 252, 0, 0, 0, 0));
            //ポケモン名+性格名+個体値+努力値 があれば、実数値が計算可能。
            Status StRet = CalcStatus.CalcParam(998, 23, StKotai, StDoryoku);

            lbLog.Items.Add("\r\n" + "H=" + StRet.H.ToString());
            lbLog.Items.Add("\r\n" + "A=" + StRet.A.ToString());
            lbLog.Items.Add("\r\n" + "B=" + StRet.B.ToString());
            lbLog.Items.Add("\r\n" + "C=" + StRet.C.ToString());
            lbLog.Items.Add("\r\n" + "D=" + StRet.D.ToString());
            lbLog.Items.Add("\r\n" + "S=" + StRet.S.ToString());
        }
예제 #6
0
        // ------------------------------

        public void CheckParamTypes()
        {
            // Assign AnonUOM to each variable based on the param type
            UpdateInputsDimensions();

            // Check the consistency of dimensions
            CalcStatus calcStatus = EquationCalc.CheckDimensionsAll();

            if (calcStatus == CalcStatus.Bad)
            {
                ParamTypeMsg = "Parameter types have inconsisent dimensions";
            }
            else
            {
                ParamTypeMsg = DefaultParamTypeMsg;
            }
        }
        // -----------------------------------------
        public static CalcQuantity NewMathResult(double value, AnonUOM anonUOM)
        {
            CalcStatus calcStatus = CalcStatus.Good;
            string     message    = "";

            if (double.IsNaN(value) || double.IsInfinity(value))
            {
                calcStatus = CalcStatus.Bad;
                message    = "Math error";
            }

            CalcQuantity result = new CalcQuantity(
                value: value,
                calcStatus: calcStatus, message: message, anonUOM: anonUOM);

            return(result);
        }
예제 #8
0
            //public float Reservoir_Pressure;    // Пластовое давление (начальное, пл.у.), атм
            //public float Reservoir_Temperature; // Пластовая температура (пл.у.), °C
            //public float Oil_VolumeFactor;      // Объёмный фактор (коэффициент) нефти (пл.у.), м³/ м³
            //public float Bubblepoint_Pressure;  // Давление насыщения нефти  (пл.у.), атм
            //public float Reservoir_SGOR;        // Газосодержание нефти (пл.у.),  м³/ м³
            //public float Reservoir_GOR;         // Газовый фактор нефти (пл.у.),  м³/ м³
            //public float Oil_Density;           // Плотность нефти (с.у.), т/м³
            //public float Water_Density;         // Плотность воды (с.у.),  т/м³
            //public float Gas_Density;           // Плотность газа (с.у.),  кг/м³
            //public float Oil_Viscosity;         // Вязкость нефти (пл.у.), сПз
            //public float Water_Viscosity;       // Вязкость воды (пл.у.), сПз

            public void Fill(PipeNetCalc.FluidInfo fi, double P0, double P1)
            {
                if (fi.IsEmpty || double.IsNaN(P0) || double.IsNaN(P1))
                {
                    CalcStatus = CalcStatus.NoData;
                }
                else
                {
                    CalcStatus = CalcStatus.Success;
                    fluid      = fi;
                }
                //Reservoir_Pressure = (float)fi.Reservoir_Pressure__Atm;
                //Reservoir_Temperature = (float)fi.Temperature__C;
                //Oil_VolumeFactor = (float)fi.Oil_VolumeFactor;
                //Bubblepoint_Pressure = (float)fi.Bubblpnt_Pressure__Atm;
                //Reservoir_SGOR = (float)fi.Oil_GasFactor;
                //Oil_Density = (float)fi.Oil_Density;
                //Water_Density
            }
예제 #9
0
        private static WorkflowStatus GetStatus(IEnumerable <WorkflowStatus> states, CalcStatus calc)
        {
            bool hasFailure = false;
            bool hasSuccess = false;
            bool hasRunning = false;
            bool hasUnknown = false;
            bool hasAny     = false;

            foreach (var s in states)
            {
                hasFailure |= s == WorkflowStatus.Failure;
                hasSuccess |= s == WorkflowStatus.Success;
                hasRunning |= s == WorkflowStatus.Running;
                hasUnknown |= s == WorkflowStatus.Undetermined;
                hasAny      = true;
            }

            return(calc(hasFailure, hasSuccess, hasRunning, hasUnknown, hasAny));
        }
예제 #10
0
        // -------------------------------------
        public void Recalculate()
        {
            try
            {
                if (EqCalcVariables.Count > 0)
                {
                    if (_bCalculating)
                    {
                        return;
                    }
                    _bCalculating = true;

                    UpdateCalcInputs();
                    ClearResults();

                    CalcStatus calcStatus = CurrentEquationCalc.CalculateAll();

                    IList <FunCalcError> lowestErrors = new List <FunCalcError>();
                    IList <FunCalcError> allErrors    = new List <FunCalcError>();
                    CurrentEquationCalc.GetErrors(ref lowestErrors, ref allErrors, NumberFormat: NumberFormat);
                    if (lowestErrors?.Count > 0)
                    {
                        _errorMessage = lowestErrors[0].Message;
                    }
                    OnMessagesChanged();

                    RefreshEqCalcVariables();

                    SetMaxUOMLength();
                    CalculationFinished?.Invoke(this, null);
                }
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
                throw;
            }
            finally
            {
                _bCalculating = false;
            }
        }
예제 #11
0
        private void UpdateStatus(Task task)
        {
            switch (task.Status)
            {
            case TaskStatus.RanToCompletion:
                Status = CalcStatus.Success;
                break;

            case TaskStatus.Canceled:
                Status = CalcStatus.Cancelled;
                break;

            case TaskStatus.Faulted:
                Status = CalcStatus.Error;
                break;

            default:
                throw new ApplicationException($"Task status {task.Status} not supported.");
            }
        }
예제 #12
0
            public void Fill(NetCalc.FluidInfo fi, double P0, double P1)
            {
                if (!fi.IsEmpty)
                {
                    fluid = fi;
                }
                bool noP0 = double.IsNaN(P0);
                bool noP1 = double.IsNaN(P1);

                switch (CalcStatus)
                {
                case CalcStatus._Started:
                case CalcStatus._Half:
                    CalcStatus = CalcStatus.Failed;
                    break;

                case CalcStatus._Full:
                    CalcStatus = (noP0 || noP1) ? CalcStatus.Failed : CalcStatus.Success;
                    break;

                case CalcStatus.Failed:
                    break;

                default:
                    if (noP0 && noP1)
                    {
                        CalcStatus = (fluid == null) ? CalcStatus.Virgin : CalcStatus.NoData;
                    }
                    else if (!noP0 && !noP1)
                    {
                        CalcStatus = CalcStatus.ExtraP;
                    }
                    else
                    {
                        CalcStatus = CalcStatus.NoData;
                    }
                    break;
                }
            }
        private string FormattedInfoMessage(CalcStatus calcStatus)
        {
            if (_errorMessage.Length > 0)
            {
                string sMsg = _errorMessage?.Trim();

                if ((sMsg?.Length > 0) && !(sMsg.Substring(sMsg.Length - 1).Equals("!")))
                {
                    sMsg += "!";
                }
                return sMsg;
            }
            switch (calcStatus)
            {
                case CalcStatus.Good:
                    return "OK";
                case CalcStatus.Uknown:
                case CalcStatus.Bad:
                    return "Unknown failure!";
                default:
                    return "";
            }
        }
예제 #14
0
        /// <summary>
        /// Calculating progress event handler
        ///
        /// IMPORTANT NOTE: Responding to progress events can significantly affect calculation performance!
        ///
        /// </summary>
        /// <param name="progressEvent">Event type</param>
        /// <param name="value">Event value</param>
        /// <param name="text">Event text (if applicable)</param>
        /// <param name="status">Return status</param>
        public void CalculatingProgress(CalcProgressEvent progressEvent, uint value, string text, ref CalcStatus status)
        {
            //Dispatch UI commands to the UI thread
            Dispatcher.Invoke(() =>
            {
                switch (progressEvent)
                {
                case CalcProgressEvent.ProgressReset:
                    _progressBar.Visibility = Visibility.Visible;
                    _progressBar.Minimum    = 0;
                    _progressBar.Maximum    = value;
                    _progressBar.Value      = 0;
                    break;

                case CalcProgressEvent.ProgressSetPos:
                    _progressBar.Value = value;
                    break;

                case CalcProgressEvent.ProgressSetText:
                    StatusText = text;
                    break;

                case CalcProgressEvent.ProgressAddOutput:
                    StatusText = $"{value}: {text}";
                    break;

                case CalcProgressEvent.ProgressShow:
                    _progressBar.Visibility = Visibility.Visible;
                    break;

                case CalcProgressEvent.ProgressFinished:
                case CalcProgressEvent.ProgressHide:
                    _progressBar.Visibility = Visibility.Hidden;
                    break;
                }
            });

            //Change status to stop the calculation process
            //status = CalcStatus.Aborted;
        }
예제 #15
0
        /// <summary>
        /// Calculation error event handler
        /// </summary>
        /// <param name="errorType">Type of error</param>
        /// <param name="errorCode">Unique error identifier code</param>
        /// <param name="context">Error context</param>
        /// <param name="message">Error message</param>
        /// <param name="expression">Expression which caused the error, limited to the first 1024 characters</param>
        /// <param name="options">Error options</param>
        /// <param name="status">Return status</param>
        private void CalculatingError(CalcErrorType errorType, uint errorCode, string context, string message, string expression, uint options, ref CalcStatus status)
        {
            MessageBoxButton button = (errorType == CalcErrorType.ErrorExpression) ? MessageBoxButton.OKCancel : MessageBoxButton.OK;
            MessageBoxResult result = MessageBoxResult.OK;

            //Dispatch UI commands to the UI thread
            Dispatcher.Invoke(() =>
            {
                result = MessageBox.Show(
                    this,
                    $"An error has occurred whilst calculating\n\ncontext: {context}\nExpression: {expression}\n\n{message}\n",
                    "Calculation Error",
                    button,
                    MessageBoxImage.Error);
            });

            if (errorType == CalcErrorType.ErrorExpression && result != MessageBoxResult.OK)
            {
                status = CalcStatus.Aborted; //status = CalcStatus.Interrupted; //Interrupt to show the error in the output and keep the current variables
            }
        }
예제 #16
0
 public Quantity(double value, CalcStatus calcStatus, string message)
 {
     Value      = value;
     CalcStatus = calcStatus;
     Message    = message;
 }
예제 #17
0
 public Formula AddStatus(CalcStatus status)
 {
     Status = status;
     return(this);
 }
예제 #18
0
        static void Main()
        {
            /****************
             * 展示*/
            double Actual_Q = 5000;                          // 实际入炉风量(m3/min)

            double[] d = { 0.12, 0.13 };                     // 直径种类(m)
            int[]    m = { 11, 17 };                         // 各风口个数,它们的和为风口总数量
            double[] mu = { 0.8186 * Sqrt(1.9), Sqrt(1.9) }; // 各支路流阻比;变直径系数sqrt((12+15/13+15)^5)=0.8337;或sqrt((12/13)^5)=0.8186
            double   T_Bl = 1200, P_Bl = 0.41;               // 高炉入炉风温(°C); 风压(MPa)
            double   phi_Bl_H2O = 24, OE = 5, m_Coal = 160, f_Coal_H2O = 2, V_Bl = 1080;
            // 鼓风湿度(g/m3), 富氧率(%), 吨铁喷煤量(kg/tHM), 煤粉含水量(%), 吨铁风量(m3/tHM)
            double M = 160, D_pc = 0.04, L = 0.55; // 煤比(kg/t),焦炭的平均粒度(m),风口长度(m)

            CalcStatus Calc = new CalcStatus(Actual_Q, T_Bl, P_Bl, d, m, mu);

            Calc.CalcWindSpeed();
            Calc.CalcKineticEnergy();
            Calc.CalcCombustionTemp(phi_Bl_H2O, OE, m_Coal, f_Coal_H2O, V_Bl);
            Calc.CalcRacewaySize(m_Coal, D_pc, L);
            Calc.Display();

            /******************/

            //using (StreamWriter sw = new StreamWriter(@"D:\WorkSpace\VS Project\Tuyeres-Status\v&KE&Q.txt", false))
            //{
            //    sw.WriteLine("风口直径(m)\t标准风速(m/s)\t实际风速(m/s)\t鼓风动能(J/s)\t风口风量(m3/s)\t流阻比");
            //}

            //for (double u = 0.1; u <= 1; u += 0.001)
            //{
            //    double Actual_Q = 6000; // 实际入炉风量
            //    double[] d = { 0.12, 0.13 }; // 直径种类
            //    int[] m = { 5, 27 }; // 各风口个数,它们的和为风口总数量
            //    double[] mu = { 0.8186 * u, u }; // 各支路流阻比;变直径系数sqrt((12+15/13+15)^5)=0.8337
            //    double T_Bl = 1200, P_Bl = 0.412; // 高炉入炉风温(°C); 风压(MPa)
            //    double phi_Bl_H2O = 11.2, OE = 3.52, m_Coal = 193.8, f_Coal_H2O = 1.87, V_Bl = 1248;
            //    // 鼓风湿度(g/m3), 富氧率(%), 吨铁喷煤量(kg/tHM), 煤粉含水量(%), 吨铁风量(m3/tHM)

            //    CalcStatus calc = new CalcStatus(Actual_Q, d, m, mu, T_Bl, P_Bl, phi_Bl_H2O, OE, m_Coal, f_Coal_H2O, V_Bl);
            //    // calcstatus calc = new calcstatus(2350, 0.12, 0.14, 18, 1, 1200, 0.3, 11.2, 3.52, 193.8, 1.87, 1248);
            //    calc.CalcWindSpeed();
            //    calc.CalcKineticEnergy();
            //    calc.WriteTXT();
            //}


            //for (int m_small = 0; m_small <= 32; m_small++)
            //{
            //    double Actual_Q = 6000; // 实际入炉风量
            //    double[] d = { 0.12, 0.13 }; // 直径种类
            //    int[] m = { m_small, 32 - m_small }; // 各风口个数,它们的和为风口总数量
            //    double[] mu = { 0.8337 * Sqrt(1.9), Sqrt(1.9) }; // 各支路流阻比;变直径系数sqrt((12+15/13+15)^5)=0.8337
            //    double T_Bl = 1180, P_Bl = 0.412; // 高炉入炉风温(°C); 风压(MPa)
            //    double phi_Bl_H2O = 3, OE = 5, m_Coal = 155, f_Coal_H2O = 2, V_Bl = 1080;
            //    // 鼓风湿度(g/m3), 富氧率(%), 吨铁喷煤量(kg/tHM), 煤粉含水量(%), 吨铁风量(m3/tHM)
            //    double M = 160, D_pc = 0.04, L = 0.55; // 煤比,焦炭的平均粒度,风口长度

            //    CalcStatus Calc = new CalcStatus(Actual_Q, d, m, mu, T_Bl, P_Bl);
            //    // CalcStatus Calc = new CalcStatus(2350, 0.12, 0.14, 18, 1, 1200, 0.3, 11.2, 3.52, 193.8, 1.87, 1248);
            //    Calc.CalcWindSpeed();
            //    Calc.CalcKineticEnergy();
            //    Calc.CalcCombustionTemp(phi_Bl_H2O, OE, m_Coal, f_Coal_H2O, V_Bl);
            //    Calc.CalcRacewaySize(M, D_pc, L);
            //    Calc.WriteTXT();
            //}
        }
예제 #19
0
 public DisplayQuantity(double value, CalcStatus calcStatus, string message, KnownUOM kownUOM) :
     base(value, calcStatus, message)
 {
     KownUOM = kownUOM;
 }
 public CalcQuantity(double value, CalcStatus calcStatus, string message, AnonUOM anonUOM) :
     base(value, calcStatus, message)
 {
     AnonUOM = anonUOM;
 }
예제 #21
0
 private void TaskStatusUpdate(CalcStatus calcStatus) => _observer?.OnNext(calcStatus.ToString("G"));
예제 #22
0
 public StatusAndMessage(CalcStatus calcStatus, string message)
 {
     CalcStatus = calcStatus;
     Message    = message;
 }