コード例 #1
0
ファイル: P0204.cs プロジェクト: 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();
                }
            }
        }
コード例 #2
0
ファイル: P0204.cs プロジェクト: 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();
                }
            }
        }
コード例 #3
0
ファイル: P0202.cs プロジェクト: slawer/sgt
        // -------------- вспомогательные функции --------------

        /// <summary>
        /// Вычисляет текущее значение параметра Длина инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="клинья">Положение клиньев в текущий момент</param>
        /// <param name="вес_колонны">Вес на крюке в текущий момент</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке.</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        /// <returns>Вычисленное значение параметра</returns>
        private float current_length_instrument(P0005 v1, P0012 v2, P0102 v3,
                                                float locking_weight_hook, TechnologicalRegimeWeightHook r_weight)
        {
            if (float.IsNaN(v1.Value))
            {
                return(_value);
            }
            else
            {
                switch (weight_status)
                {
                case WeightStatus.wsClear:

                    if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                    {
                        _value = _value + v1.Value - last_talblock;

                        last_talblock = v1.Value;
                        weight_status = WeightStatus.wsWeight;
                    }
                    return(_value);

                case WeightStatus.wsWeight:

                    if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                    {
                        last_talblock = v1.Value;
                    }
                    else
                    {
                        weight_status = WeightStatus.wsClear;
                    }

                    return(_value);

                case WeightStatus.Default:

                    weight_status = WeightStatus.wsClear;
                    break;

                default:
                    break;
                }

                return(_value);
            }
        }
コード例 #4
0
ファイル: P0103.cs プロジェクト: slawer/sgt
        /// <summary>
        /// Вычисляет значение параметра Скорость тальблока
        /// </summary>
        /// <param name="Текущее_положение">Текущее_положение тальблока</param>
        /// <param name="CurrTechTime">Текущее время процесса</param>
        public void Calculate(P0005 currentPosition, DateTime CurrTechTime)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    DateTime t1 = CurrTechTime;       // текущее время технологии

                    float p = height_traveling_block; // значение тальблока в указанный момент или Nan, если в истории не сохранился
                    if (float.IsNaN(p))
                    {
                        time_saving            = t1;
                        height_traveling_block = currentPosition.Value;

                        _value = float.NaN;
                    }

                    TimeSpan tPS = TimeSpan.FromTicks(averaging_period * TimeSpan.TicksPerMillisecond);
                    DateTime t2  = time_saving + tPS; // время, отстоящее от предыдущего момента на интервал

                    if (t1 < t2)
                    {
                        return;
                    }
                    else
                    {
                        TimeSpan dT = t1 - time_saving;
                        double   lT = dT.Ticks;

                        height_traveling_block = currentPosition.Value;
                        time_saving            = t1;

                        _value = (float)(((p - currentPosition.Value) / lT) * TimeSpan.TicksPerSecond);
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
コード例 #5
0
ファイル: P0202.cs プロジェクト: 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="v6">Количество опущенных свеч</param>
        /// <param name="currentTime">Текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0012 v3, P0204 v4, P0205 v5, P0203 v6,
                              DateTime currentTime, float locking_weight_hook, float size_layout_bottom_column,
                              float size_layout_top_column, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    switch (mode_proccess)
                    {
                    case TModeProcess.mpBase:

                        _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                        break;

                    case TModeProcess.mpSetUser:

                        mode_proccess = TModeProcess.mpBase;
                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            v4.Calculate(_value);
                        }

                        if (_value <= (size_layout_bottom_column + size_layout_top_column))
                        {
                            v6.CorrectLenghtInstrument(0.0f);
                            v6.Calculate(0.0f);
                        }
                        else
                        {
                            float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                            v6.CorrectLenghtInstrument(_tmp);
                        }
                        break;

                    case TModeProcess.mpCMDzaboi:

                        mode_proccess = TModeProcess.mpBase;

                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                        }
                        else
                        {
                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;

                            _value = v5.Value + v1.Value;

                            if (_value <= (size_layout_bottom_column + size_layout_top_column))
                            {
                                v6.CorrectLenghtInstrument(0.0f);
                                v6.Calculate(0.0f);
                            }
                            else
                            {
                                float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                v6.CorrectLenghtInstrument(_tmp);
                            }
                        }
                        break;

                    case TModeProcess.mpCMDmodifyDepth:

                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            weight_status = WeightStatus.wsClear;
                            if (v5.Value < _value)
                            {
                                _value = v5.Value;
                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }

                            v4.Calculate(_value);
                        }
                        else
                        {
                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;

                            if (v5.Value < (_value - v1.Value))
                            {
                                _value = v5.Value + v1.Value;
                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }
                        }

                        mode_proccess = TModeProcess.mpBase;
                        break;

                    default:
                        break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
コード例 #6
0
ファイル: P0202.cs プロジェクト: slawer/sgt
        // -------------- вспомогательные функции --------------
        /// <summary>
        /// Вычисляет текущее значение параметра Длина инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="клинья">Положение клиньев в текущий момент</param>
        /// <param name="вес_колонны">Вес на крюке в текущий момент</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке.</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        /// <returns>Вычисленное значение параметра</returns>
        private float current_length_instrument(P0005 v1, P0012 v2, P0102 v3,
            float locking_weight_hook, TechnologicalRegimeWeightHook r_weight)
        {
            if (float.IsNaN(v1.Value))
            {
                return _value;
            }
            else
            {
                switch (weight_status)
                {
                    case WeightStatus.wsClear:

                        if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                        {
                            _value = _value + v1.Value - last_talblock;

                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;
                        }
                        return _value;

                    case WeightStatus.wsWeight:

                        if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                        {
                            last_talblock = v1.Value;
                        }
                        else
                        {
                            weight_status = WeightStatus.wsClear;
                        }

                        return _value;

                    case WeightStatus.Default:

                        weight_status = WeightStatus.wsClear;
                        break;

                    default:
                        break;
                }

                return _value;
            }
        }
コード例 #7
0
ファイル: P0202.cs プロジェクト: 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="v6">Количество опущенных свеч</param>
        /// <param name="currentTime">Текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0012 v3, P0204 v4, P0205 v5, P0203 v6,
            DateTime currentTime, float locking_weight_hook, float size_layout_bottom_column, 
            float size_layout_top_column, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    switch (mode_proccess)
                    {
                        case TModeProcess.mpBase:

                            _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                            break;

                        case TModeProcess.mpSetUser:

                            mode_proccess = TModeProcess.mpBase;
                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                v4.Calculate(_value);
                            }

                            if (_value <= (size_layout_bottom_column + size_layout_top_column))
                            {
                                v6.CorrectLenghtInstrument(0.0f);
                                v6.Calculate(0.0f);
                            }
                            else
                            {
                                float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                v6.CorrectLenghtInstrument(_tmp);
                            }
                            break;

                        case TModeProcess.mpCMDzaboi:

                            mode_proccess = TModeProcess.mpBase;

                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                            }
                            else
                            {
                                last_talblock = v1.Value;
                                weight_status = WeightStatus.wsWeight;

                                _value = v5.Value + v1.Value;

                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }
                            break;

                        case TModeProcess.mpCMDmodifyDepth:

                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                weight_status = WeightStatus.wsClear;
                                if (v5.Value < _value)
                                {
                                    _value = v5.Value;
                                    if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                    {
                                        v6.CorrectLenghtInstrument(0.0f);
                                        v6.Calculate(0.0f);
                                    }
                                    else
                                    {
                                        float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                        v6.CorrectLenghtInstrument(_tmp);
                                    }
                                }

                                v4.Calculate(_value);
                            }
                            else
                            {
                                last_talblock = v1.Value;
                                weight_status = WeightStatus.wsWeight;

                                if (v5.Value < (_value - v1.Value))
                                {
                                    _value = v5.Value + v1.Value;
                                    if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                    {
                                        v6.CorrectLenghtInstrument(0.0f);
                                        v6.Calculate(0.0f);
                                    }
                                    else
                                    {
                                        float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                        v6.CorrectLenghtInstrument(_tmp);
                                    }
                                }
                            }

                            mode_proccess = TModeProcess.mpBase;
                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
コード例 #8
0
ファイル: P0103.cs プロジェクト: slawer/sgt
        /// <summary>
        /// Вычисляет значение параметра Скорость тальблока
        /// </summary>
        /// <param name="Текущее_положение">Текущее_положение тальблока</param>
        /// <param name="CurrTechTime">Текущее время процесса</param>
        public void Calculate(P0005 currentPosition, DateTime CurrTechTime)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    DateTime t1 = CurrTechTime; // текущее время технологии

                    float p = height_traveling_block; // значение тальблока в указанный момент или Nan, если в истории не сохранился
                    if (float.IsNaN(p))
                    {
                        time_saving = t1;
                        height_traveling_block = currentPosition.Value;

                        _value = float.NaN;
                    }

                    TimeSpan tPS = TimeSpan.FromTicks(averaging_period * TimeSpan.TicksPerMillisecond);
                    DateTime t2 = time_saving + tPS; // время, отстоящее от предыдущего момента на интервал

                    if (t1 < t2)
                    {
                        return;
                    }
                    else
                    {
                        TimeSpan dT = t1 - time_saving;
                        double lT = dT.Ticks;

                        height_traveling_block = currentPosition.Value;
                        time_saving = t1;

                        _value = (float)(((p - currentPosition.Value)  / lT) * TimeSpan.TicksPerSecond);
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }