Ejemplo n.º 1
0
Archivo: P0205.cs Proyecto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Глубина забоя
        /// </summary>
        /// <param name="v1">Положение инструмента в текущий момент</param>
        /// <param name="v2">Длина инструмента</param>
        public void Calculate(P0204 v1, P0202 v2)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    float vNew = float.NaN;
                    if (float.IsNaN(_value)) _value = 0;

                    switch (v2.ModeProccess)
                    {
                        case P0202.TModeProcess.mpBase:

                            vNew = v1.Value;
                            if (!float.IsNaN(vNew))
                            {
                                if (vNew > _value)
                                {
                                    _value = vNew;
                                }
                            }
                            break;

                        case P0202.TModeProcess.mpSetUser:

                            /*vNew = v1.Value;
                            if (vNew > _value)
                            {
                                _value = vNew;
                            }
                            v2.ModeProccess = P0202.TModeProcess.mpBase;*/
                            break;

                        case P0202.TModeProcess.mpCMDzaboi:

                            //v2.ModeProccess = P0202.TModeProcess.mpBase;
                            break;

                        case P0202.TModeProcess.mpCMDmodifyDepth:

                            /*vNew = v1.Value;
                            v2.ModeProccess = P0202.TModeProcess.mpBase;

                            if (vNew > _value)
                            {
                                _value = vNew;
                            }*/
                            break;

                        default:
                            break;
                    }

                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 2
0
Archivo: P0204.cs Proyecto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Положение инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="v2">Вес на крюке в текущий момент</param>
        /// <param name="v3">Длина инструмента в текущий момент</param>
        /// <param name="v4">Клинья АСУ</param>
        /// <param name="v5">Глубина забоя</param>
        /// <param name="currentTime">Текущее время технологического процесса</param>
        /// <param name="locking_weight_hook">Блокировочное_значение_веса_на_крюке</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0202 v3, P0012 v4, P0205 v5, DateTime currentTime,
                              float locking_weight_hook, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(_value))
                    {
                        _value = 0;
                    }
                    switch (v3.ModeProccess)
                    {
                    case P0202.TModeProcess.mpBase:

                        if ((WeightHookForWeightOrWedges(v2, v4, locking_weight_hook, r_weight)
                             == TProcResult.True) && !float.IsNaN(v1.Value))
                        {
                            _value = v3.Value - v1.Value;
                        }
                        break;

                    case P0202.TModeProcess.mpSetUser:

                        /*if ((WeightHookForWeightOrWedges(v2, v4, locking_weight_hook, r_weight)
                         *                              == TProcResult.True) && !float.IsNaN(v1.Value))
                         * {
                         *  _value = v3.Value - v1.Value;
                         * }
                         * else
                         * {
                         *  _value = v3.Value;
                         * }*/
                        break;

                    case P0202.TModeProcess.mpCMDzaboi:

                        //_value = v2.Value;
                        break;

                    case P0202.TModeProcess.mpCMDmodifyDepth:

                        break;

                    default:
                        break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Вычисляет текущее значение Количество опущенных свеч
        /// </summary>
        /// <param name="v1">Длина инструмента</param>
        /// <param name="currentTime">Текущее технологическое время</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="size_layout_top_column">Размер компоновки верха колонны</param>
        public void Calculate(P0202 v1, DateTime currentTime, float size_layout_bottom_column, float size_layout_top_column)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(_value))
                    {
                        _value = 0;
                    }
                    switch (v1.ModeProccess)
                    {
                    case P0202.TModeProcess.mpBase:

                        if (alg == CalculateCandleAlgorithm.LenghtOfCandleCount)
                        {
                            calculate_candle(v1, size_layout_bottom_column, size_layout_top_column);
                            _value = calculate_candle_count(v1, size_layout_bottom_column, size_layout_top_column);
                        }
                        else
                        {
                            _value = calculate_candle(v1, size_layout_bottom_column, size_layout_top_column);
                        }

                        break;

                    case P0202.TModeProcess.mpSetUser:

                        //length_instrument = v1.Value;
                        break;

                    case P0202.TModeProcess.mpCMDzaboi:

                        //_value = calculate_candle(v1, size_layout_bottom_column);
                        break;

                    case P0202.TModeProcess.mpCMDmodifyDepth:

                        //_value = calculate_candle(v1, size_layout_bottom_column);
                        break;

                    default:
                        break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 4
0
Archivo: P0204.cs Proyecto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Положение инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="v2">Вес на крюке в текущий момент</param>
        /// <param name="v3">Длина инструмента в текущий момент</param>
        /// <param name="v4">Клинья АСУ</param>
        /// <param name="v5">Глубина забоя</param>
        /// <param name="currentTime">Текущее время технологического процесса</param>
        /// <param name="locking_weight_hook">Блокировочное_значение_веса_на_крюке</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0202 v3, P0012 v4, P0205 v5, DateTime currentTime, 
            float locking_weight_hook, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(_value)) _value = 0;
                    switch (v3.ModeProccess)
                    {
                        case P0202.TModeProcess.mpBase:

                            if ((WeightHookForWeightOrWedges(v2, v4, locking_weight_hook, r_weight)
                                == TProcResult.True) && !float.IsNaN(v1.Value))
                            {
                                _value = v3.Value - v1.Value;
                            }
                            break;

                        case P0202.TModeProcess.mpSetUser:

                            /*if ((WeightHookForWeightOrWedges(v2, v4, locking_weight_hook, r_weight)
                                                            == TProcResult.True) && !float.IsNaN(v1.Value))
                            {
                                _value = v3.Value - v1.Value;
                            }
                            else
                            {
                                _value = v3.Value;
                            }*/
                            break;

                        case P0202.TModeProcess.mpCMDzaboi:

                            //_value = v2.Value;
                            break;

                        case P0202.TModeProcess.mpCMDmodifyDepth:

                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Внутренняя процедура расчёта количества свечей, побочных эффектов не имеет =)
        /// </summary>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="size_layout_top_column">Размер компоновки верха колонны</param>
        /// <returns></returns>
        protected float calculate_candle_count(P0202 v1, float size_layout_bottom_column, float size_layout_top_column)
        {
            if (calculateTotal())
            {
                try
                {
                    if (tubes != null)
                    {
                        if (!float.IsNaN(v1.Value) && !float.IsInfinity(v1.Value) &&
                            !float.IsNegativeInfinity(v1.Value) && !float.IsPositiveInfinity(v1.Value))
                        {
                            float dlina = v1.Value - (size_layout_bottom_column + size_layout_top_column);
                            if (dlina < 0)
                            {
                                return(0.0f);
                            }

                            for (int index = 0; index < tubes.Count; index++)
                            {
                                if (tubes[index] != null && tubes[index].Lenght > 0)
                                {
                                    float a = Math.Abs(dlina - tubes[index].Total);
                                    if (a <= deviation)
                                    {
                                        return(tubes[index].Number);
                                    }
                                    else
                                    if (dlina < tubes[index].Total)
                                    {
                                        if (index <= 0)
                                        {
                                            return(0.0f);
                                        }
                                        else
                                        {
                                            float d1 = dlina - tubes[index - 1].Total;
                                            float d2 = tubes[index].Total - dlina;

                                            if (d1 < d2)
                                            {
                                                v1.setValue(tubes[index - 1].Total + (size_layout_bottom_column + size_layout_top_column));
                                                return(tubes[index - 1].Number);
                                            }
                                            else
                                            {
                                                v1.setValue(tubes[index].Total + (size_layout_bottom_column + size_layout_top_column));
                                                return(tubes[index].Number);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    break;
                                }
                            }

                            int lastIndex = -1;
                            for (int index = 0; index < tubes.Count; index++)
                            {
                                if (tubes[index].Lenght <= 0)
                                {
                                    lastIndex = index - 1;
                                    break;
                                }
                            }

                            if (lastIndex > -1 && lastIndex < tubes.Count)
                            {
                                return(tubes[lastIndex].Number + 1);
                            }
                            else
                            {
                                return(0.0f);
                            }

                            //return (tubes[tubes.Count - 1].Number + 1);
                        }
                    }
                }
                catch { }
            }
            return(float.NaN);
        }
Ejemplo n.º 6
0
        // ------------ вспомогательные функции ------------

        /// <summary>
        /// Внутренняя процедура расчёта количества свечей, имеет побочный эффект
        /// </summary>
        /// <param name="v1">Длина инструмента</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="size_layout_top_column">Размер компоновки верха колонны</param>
        /// <returns></returns>
        private float calculate_candle(P0202 v1, float size_layout_bottom_column, float size_layout_top_column)
        {
            float dlina  = v1.Value;
            float result = _value;

            if (!float.IsNaN(dlina))
            {
                if (dlina <= (size_layout_bottom_column + size_layout_top_column))
                {
                    result            = 0;
                    length_instrument = 0;
                }
                else
                {
                    float old = length_instrument;
                    dlina = dlina - (size_layout_bottom_column + size_layout_top_column);

                    float dd = Math.Abs(dlina - old);
                    if (dd > lower_size_candle)
                    {
                        if (old < dlina)
                        {
                            // инструмент вырос
                            while (dd > upper_size_candle)
                            {
                                dd = dd - size_candle;

                                length_instrument = length_instrument + size_candle;
                                result            = result + 1;
                            }

                            if (dd >= lower_size_candle)
                            {
                                length_instrument = dlina;
                                result            = result + 1;
                            }
                        }
                        else
                        {
                            // инструмент стал меньше
                            while (dd > upper_size_candle)
                            {
                                dd = dd - size_candle;

                                length_instrument = length_instrument - size_candle;
                                result            = result - 1;
                            }

                            if (dd >= lower_size_candle)
                            {
                                length_instrument = dlina;
                                result            = result - 1;
                            }

                            if (length_instrument <= 0)
                            {
                                result            = 0;
                                length_instrument = 0;
                            }

                            if (result < 0)
                            {
                                result = 0;
                            }
                        }
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Вычисляет текущее значение параметра Глубина забоя
        /// </summary>
        /// <param name="v1">Положение инструмента в текущий момент</param>
        /// <param name="v2">Длина инструмента</param>
        public void Calculate(P0204 v1, P0202 v2)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    float vNew = float.NaN;
                    if (float.IsNaN(_value))
                    {
                        _value = 0;
                    }

                    switch (v2.ModeProccess)
                    {
                    case P0202.TModeProcess.mpBase:

                        vNew = v1.Value;
                        if (!float.IsNaN(vNew))
                        {
                            if (vNew > _value)
                            {
                                _value = vNew;
                            }
                        }
                        break;

                    case P0202.TModeProcess.mpSetUser:

                        /*vNew = v1.Value;
                         * if (vNew > _value)
                         * {
                         *  _value = vNew;
                         * }
                         * v2.ModeProccess = P0202.TModeProcess.mpBase;*/
                        break;

                    case P0202.TModeProcess.mpCMDzaboi:

                        //v2.ModeProccess = P0202.TModeProcess.mpBase;
                        break;

                    case P0202.TModeProcess.mpCMDmodifyDepth:

                        /*vNew = v1.Value;
                         * v2.ModeProccess = P0202.TModeProcess.mpBase;
                         *
                         * if (vNew > _value)
                         * {
                         *  _value = vNew;
                         * }*/
                        break;

                    default:
                        break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        public Technology()
        {
            c_slim   = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
            cal_slim = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);

            p1 = new SGT.P0001(Guid.Empty);
            p2 = new SGT.P0002(Guid.Empty);

            p3 = new SGT.P0003(Guid.Empty);
            p4 = new SGT.P0004(Guid.Empty);

            p5 = new SGT.P0005(Guid.Empty);

            p6   = new SGT.P0006(Guid.Empty);
            p6_1 = new SGT.P06_1(Guid.Empty);

            p6_2 = new SGT.P06_2(Guid.Empty);
            p6_3 = new SGT.P06_3(Guid.Empty);

            p6_4 = new SGT.P06_4(Guid.Empty);
            p6_5 = new SGT.P06_5(Guid.Empty);

            p6_6 = new SGT.P06_6(Guid.Empty);
            p6_7 = new SGT.P06_7(Guid.Empty);

            p6_8 = new SGT.P06_8(Guid.Empty);
            p6_9 = new SGT.P06_9(Guid.Empty);

            p7   = new SGT.P0007(Guid.Empty);
            p7_1 = new SGT.P07_1(Guid.Empty);

            p7_2 = new SGT.P07_2(Guid.Empty);
            p7_3 = new SGT.P07_3(Guid.Empty);

            p7_4 = new SGT.P07_4(Guid.Empty);
            p7_5 = new SGT.P07_5(Guid.Empty);

            p7_6 = new SGT.P07_6(Guid.Empty);
            p7_7 = new SGT.P07_7(Guid.Empty);

            p7_8 = new SGT.P07_8(Guid.Empty);
            p7_9 = new SGT.P07_9(Guid.Empty);

            p7_10 = new SGT.P7_10(Guid.Empty);
            p7_11 = new SGT.P7_11(Guid.Empty);

            p7_12 = new SGT.P7_12(Guid.Empty);
            p7_13 = new SGT.P7_13(Guid.Empty);

            p8   = new SGT.P0008(Guid.Empty);
            p8_1 = new SGT.P08_1(Guid.Empty);

            p9   = new SGT.P0009(Guid.Empty);
            p9_1 = new SGT.P09_1(Guid.Empty);

            p9_2 = new SGT.P09_2(Guid.Empty);
            p9_3 = new SGT.P09_3(Guid.Empty);

            p9_4 = new SGT.P09_4(Guid.Empty);
            p9_5 = new SGT.P09_5(Guid.Empty);

            p9_6 = new SGT.P09_6(Guid.Empty);
            p9_7 = new SGT.P09_7(Guid.Empty);

            p9_8 = new SGT.P09_8(Guid.Empty);
            p9_9 = new SGT.P09_9(Guid.Empty);

            p9_10 = new SGT.P9_10(Guid.Empty);
            p9_11 = new SGT.P9_11(Guid.Empty);

            p9_12 = new SGT.P9_12(Guid.Empty);
            p9_13 = new SGT.P9_13(Guid.Empty);

            p10 = new P0010(Guid.Empty);

            p11   = new P0011(Guid.Empty);
            p11_1 = new P11_1(Guid.Empty);

            p12 = new P0012(Guid.Empty);
            p13 = new P0013(Guid.Empty);

            p14   = new P0014(Guid.Empty);
            p14_1 = new P14_1(Guid.Empty);

            p15 = new P0015(Guid.Empty);
            p16 = new P0016(Guid.Empty);

            p17 = new P0017(Guid.Empty);
            p18 = new P0018(Guid.Empty);

            p101 = new P0101(Guid.Empty);
            p102 = new P0102(Guid.Empty);

            p103 = new P0103(Guid.Empty);
            p104 = new P0104(Guid.Empty);

            p105 = new P0105(Guid.Empty);
            p106 = new P0106(Guid.Empty);

            p107 = new P0107(Guid.Empty);
            p108 = new P0108(Guid.Empty);

            p109 = new P0109(Guid.Empty);
            p110 = new P0110(Guid.Empty);

            p112 = new P0112(Guid.Empty);
            p113 = new P0113(Guid.Empty);

            p114 = new P0114(Guid.Empty);
            p116 = new P0116(Guid.Empty);

            p117 = new P0117(Guid.Empty);
            p118 = new P0118(Guid.Empty);

            p200 = new P0200(Guid.Empty);
            p201 = new P0201(Guid.Empty);

            p202 = new P0202(Guid.Empty);
            p203 = new P0203(Guid.Empty);

            p204 = new P0204(Guid.Empty);
            p205 = new P0205(Guid.Empty);

            p206 = new P0206(Guid.Empty);
            p207 = new P0207(Guid.Empty);

            p208 = new P0208(Guid.Empty);
            p209 = new P0209(Guid.Empty);

            p210 = new P0210(Guid.Empty);
            p211 = new P0211(Guid.Empty);

            p212 = new P0212(Guid.Empty);
            p213 = new P0213(Guid.Empty);

            currentTime = DateTime.MinValue;

            driller_console = -1;
            driller_console_weight_column = -1;
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        public Technology()
        {
            c_slim = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
            cal_slim = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);

            p1 = new SGT.P0001(Guid.Empty);
            p2 = new SGT.P0002(Guid.Empty);

            p3 = new SGT.P0003(Guid.Empty);
            p4 = new SGT.P0004(Guid.Empty);

            p5 = new SGT.P0005(Guid.Empty);

            p6 = new SGT.P0006(Guid.Empty);
            p6_1 = new SGT.P06_1(Guid.Empty);

            p6_2 = new SGT.P06_2(Guid.Empty);
            p6_3 = new SGT.P06_3(Guid.Empty);

            p6_4 = new SGT.P06_4(Guid.Empty);
            p6_5 = new SGT.P06_5(Guid.Empty);

            p6_6 = new SGT.P06_6(Guid.Empty);
            p6_7 = new SGT.P06_7(Guid.Empty);

            p6_8 = new SGT.P06_8(Guid.Empty);
            p6_9 = new SGT.P06_9(Guid.Empty);

            p7 = new SGT.P0007(Guid.Empty);
            p7_1 = new SGT.P07_1(Guid.Empty);

            p7_2 = new SGT.P07_2(Guid.Empty);
            p7_3 = new SGT.P07_3(Guid.Empty);

            p7_4 = new SGT.P07_4(Guid.Empty);
            p7_5 = new SGT.P07_5(Guid.Empty);

            p7_6 = new SGT.P07_6(Guid.Empty);
            p7_7 = new SGT.P07_7(Guid.Empty);

            p7_8 = new SGT.P07_8(Guid.Empty);
            p7_9 = new SGT.P07_9(Guid.Empty);

            p7_10 = new SGT.P7_10(Guid.Empty);
            p7_11 = new SGT.P7_11(Guid.Empty);

            p7_12 = new SGT.P7_12(Guid.Empty);
            p7_13 = new SGT.P7_13(Guid.Empty);

            p8 = new SGT.P0008(Guid.Empty);
            p8_1 = new SGT.P08_1(Guid.Empty);

            p9 = new SGT.P0009(Guid.Empty);
            p9_1 = new SGT.P09_1(Guid.Empty);

            p9_2 = new SGT.P09_2(Guid.Empty);
            p9_3 = new SGT.P09_3(Guid.Empty);

            p9_4 = new SGT.P09_4(Guid.Empty);
            p9_5 = new SGT.P09_5(Guid.Empty);

            p9_6 = new SGT.P09_6(Guid.Empty);
            p9_7 = new SGT.P09_7(Guid.Empty);

            p9_8 = new SGT.P09_8(Guid.Empty);
            p9_9 = new SGT.P09_9(Guid.Empty);

            p9_10 = new SGT.P9_10(Guid.Empty);
            p9_11 = new SGT.P9_11(Guid.Empty);

            p9_12 = new SGT.P9_12(Guid.Empty);
            p9_13 = new SGT.P9_13(Guid.Empty);

            p10 = new P0010(Guid.Empty);

            p11 = new P0011(Guid.Empty);
            p11_1 = new P11_1(Guid.Empty);

            p12 = new P0012(Guid.Empty);
            p13 = new P0013(Guid.Empty);

            p14 = new P0014(Guid.Empty);
            p14_1 = new P14_1(Guid.Empty);

            p15 = new P0015(Guid.Empty);
            p16 = new P0016(Guid.Empty);

            p17 = new P0017(Guid.Empty);
            p18 = new P0018(Guid.Empty);

            p101 = new P0101(Guid.Empty);
            p102 = new P0102(Guid.Empty);

            p103 = new P0103(Guid.Empty);
            p104 = new P0104(Guid.Empty);

            p105 = new P0105(Guid.Empty);
            p106 = new P0106(Guid.Empty);

            p107 = new P0107(Guid.Empty);
            p108 = new P0108(Guid.Empty);

            p109 = new P0109(Guid.Empty);
            p110 = new P0110(Guid.Empty);

            p112 = new P0112(Guid.Empty);
            p113 = new P0113(Guid.Empty);

            p114 = new P0114(Guid.Empty);
            p116 = new P0116(Guid.Empty);

            p117 = new P0117(Guid.Empty);
            p118 = new P0118(Guid.Empty);

            p200 = new P0200(Guid.Empty);
            p201 = new P0201(Guid.Empty);

            p202 = new P0202(Guid.Empty);
            p203 = new P0203(Guid.Empty);

            p204 = new P0204(Guid.Empty);
            p205 = new P0205(Guid.Empty);

            p206 = new P0206(Guid.Empty);
            p207 = new P0207(Guid.Empty);

            p208 = new P0208(Guid.Empty);
            p209 = new P0209(Guid.Empty);

            p210 = new P0210(Guid.Empty);
            p211 = new P0211(Guid.Empty);

            p212 = new P0212(Guid.Empty);
            p213 = new P0213(Guid.Empty);

            currentTime = DateTime.MinValue;

            driller_console = -1;
            driller_console_weight_column = -1;
        }
Ejemplo n.º 10
0
Archivo: P0203.cs Proyecto: slawer/sgt
        // ------------ вспомогательные функции ------------
        /// <summary>
        /// Внутренняя процедура расчёта количества свечей, имеет побочный эффект
        /// </summary>
        /// <param name="v1">Длина инструмента</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="size_layout_top_column">Размер компоновки верха колонны</param>
        /// <returns></returns>
        private float calculate_candle(P0202 v1, float size_layout_bottom_column, float size_layout_top_column)
        {
            float dlina = v1.Value;
            float result = _value;

            if (!float.IsNaN(dlina))
            {
                if (dlina <= (size_layout_bottom_column + size_layout_top_column))
                {
                    result = 0;
                    length_instrument = 0;
                }
                else
                {
                    float old = length_instrument;
                    dlina = dlina - (size_layout_bottom_column + size_layout_top_column);

                    float dd = Math.Abs(dlina - old);
                    if (dd > lower_size_candle)
                    {
                        if (old < dlina)
                        {
                            // инструмент вырос
                            while (dd > upper_size_candle)
                            {
                                dd = dd - size_candle;

                                length_instrument = length_instrument + size_candle;
                                result = result + 1;
                            }

                            if (dd >= lower_size_candle)
                            {
                                length_instrument = dlina;
                                result = result + 1;
                            }
                        }
                        else
                        {
                            // инструмент стал меньше
                            while (dd > upper_size_candle)
                            {
                                dd = dd - size_candle;

                                length_instrument = length_instrument - size_candle;
                                result = result - 1;
                            }

                            if (dd >= lower_size_candle)
                            {
                                length_instrument = dlina;
                                result = result - 1;
                            }

                            if (length_instrument <= 0)
                            {
                                result = 0;
                                length_instrument = 0;
                            }

                            if (result < 0)
                            {
                                result = 0;
                            }
                        }
                    }
                }
            }

            return result;
        }
Ejemplo n.º 11
0
Archivo: P0203.cs Proyecto: slawer/sgt
        /// <summary>
        /// Внутренняя процедура расчёта количества свечей, побочных эффектов не имеет =)
        /// </summary>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="size_layout_top_column">Размер компоновки верха колонны</param>
        /// <returns></returns>
        protected float calculate_candle_count(P0202 v1, float size_layout_bottom_column, float size_layout_top_column)
        {
            if (calculateTotal())
            {
                try
                {
                    if (tubes != null)
                    {
                        if (!float.IsNaN(v1.Value) && !float.IsInfinity(v1.Value) &&
                            !float.IsNegativeInfinity(v1.Value) && !float.IsPositiveInfinity(v1.Value))
                        {
                            float dlina = v1.Value - (size_layout_bottom_column + size_layout_top_column);
                            if (dlina < 0) return 0.0f;

                            for (int index = 0; index < tubes.Count; index++)
                            {
                                if (tubes[index] != null && tubes[index].Lenght > 0)
                                {
                                    float a = Math.Abs(dlina - tubes[index].Total);
                                    if (a <= deviation)
                                    {
                                        return tubes[index].Number;
                                    }
                                    else
                                        if (dlina < tubes[index].Total)
                                        {
                                            if (index <= 0)
                                            {
                                                return 0.0f;
                                            }
                                            else
                                            {
                                                float d1 = dlina - tubes[index - 1].Total;
                                                float d2 = tubes[index].Total - dlina;

                                                if (d1 < d2)
                                                {
                                                    v1.setValue(tubes[index - 1].Total + (size_layout_bottom_column + size_layout_top_column));
                                                    return tubes[index - 1].Number;
                                                }
                                                else
                                                {
                                                    v1.setValue(tubes[index].Total + (size_layout_bottom_column + size_layout_top_column));
                                                    return tubes[index].Number;
                                                }
                                            }
                                        }
                                }
                                else
                                    break;
                            }

                            int lastIndex = -1;
                            for (int index = 0; index < tubes.Count; index++)
                            {
                                if (tubes[index].Lenght <= 0)
                                {
                                    lastIndex = index - 1;
                                    break;
                                }
                            }

                            if (lastIndex > -1 && lastIndex < tubes.Count)
                            {
                                return tubes[lastIndex].Number + 1;
                            }
                            else
                                return 0.0f;

                            //return (tubes[tubes.Count - 1].Number + 1);
                        }
                    }
                }
                catch { }
            }
            return float.NaN;
        }
Ejemplo n.º 12
0
Archivo: P0203.cs Proyecto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение Количество опущенных свеч
        /// </summary>
        /// <param name="v1">Длина инструмента</param>
        /// <param name="currentTime">Текущее технологическое время</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="size_layout_top_column">Размер компоновки верха колонны</param>
        public void Calculate(P0202 v1, DateTime currentTime, float size_layout_bottom_column, float size_layout_top_column)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(_value)) _value = 0;
                    switch (v1.ModeProccess)
                    {
                        case P0202.TModeProcess.mpBase:

                            if (alg == CalculateCandleAlgorithm.LenghtOfCandleCount)
                            {
                                calculate_candle(v1, size_layout_bottom_column, size_layout_top_column);
                                _value = calculate_candle_count(v1, size_layout_bottom_column, size_layout_top_column);
                            }
                            else
                                _value = calculate_candle(v1, size_layout_bottom_column, size_layout_top_column);

                            break;

                        case P0202.TModeProcess.mpSetUser:

                            //length_instrument = v1.Value;
                            break;

                        case P0202.TModeProcess.mpCMDzaboi:

                            //_value = calculate_candle(v1, size_layout_bottom_column);
                            break;

                        case P0202.TModeProcess.mpCMDmodifyDepth:

                            //_value = calculate_candle(v1, size_layout_bottom_column);
                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }