/// <summary> /// Вычисляет текущее значение параметра Скорость СПО /// </summary> /// <param name="v1">Скорость тальблока в текущий момент</param> /// <param name="v2">Состояние процесса бурения в текущий момент</param> public void Calculate(P0103 v1, P0206 v2) { if (slim.TryEnterWriteLock(300)) { try { if (!float.IsNaN(v2.Value)) { int _state = (int)Math.Round(v2.Value); if (_state == НадЗабоем_Бурение_Бурение) { _value = 0; } else { if (_state < ПустойКрюк_ПЗР_ПЗР) // Надеюсь, значения констант полностью сохранены и можно пользоваться этим неравенством :-) { _value = v1.Value; } else _value = 0; } } else _value = float.NaN; } finally { slim.ExitWriteLock(); } } }
/// <summary> /// Вычисляет текущее значение параметра Время бурения 1м проходки /// </summary> /// <param name="Забой">Глубина забоя в текущий момент</param> /// <param name="Состояние_процесса">Cостояние процесса бурения в текущий момент</param> /// <param name="history">История процесса</param> public void Calculate(P0205 v1, P0206 v2, DateTime currentTime) { if (slim.TryEnterWriteLock(300)) { try { if (float.IsNaN(v1.Value) || float.IsNaN(v2.Value)) { _value = 0; current_node_drilling = float.NaN; } else { int _state = (int)Math.Round(v2.Value); if (_state == НадЗабоем_Бурение_Бурение) { if (float.IsNaN(current_node_drilling)) { current_node_drilling = v1.Value; setGoalPoint(); _value = 0; current_node_time = currentTime; } else { if (target_node < v1.Value) { DateTime _T = currentTime; TimeSpan _dT = _T - current_node_time; double lT = _dT.Ticks;// / TimeSpan.TicksPerMillisecond; _value = (float)((lT / TimeSpan.TicksPerMinute) / (v1.Value - current_node_drilling)); current_node_drilling = v1.Value; setGoalPoint(); current_node_time = _T; } } } else { _value = 0; current_node_drilling = float.NaN; } } } finally { slim.ExitWriteLock(); } } }
/// <summary> /// Вычисляет текущее значение параметра Мех. скорость проходки /// </summary> /// <param name="v1">Глубина забоя в текущий момент</param> /// <param name="v2">Cостояние процесса бурения в текущий момент</param> /// <param name="currentTime">История процесса</param> public void Calculate(P0205 v1, P0206 v2, DateTime currentTime) { if (slim.TryEnterWriteLock(300)) { try { if (float.IsNaN(v1.Value) || float.IsNaN(v2.Value)) { _value = float.NaN; current_node_mech_speed = float.NaN; } else { int _state = (int)Math.Round(v2.Value); if (_state == НадЗабоем_Бурение_Бурение) { if (float.IsNaN(current_node_mech_speed)) { current_node_mech_speed = v1.Value; setGoalPoint(); _value = 0; current_node_time = currentTime; } else { if (target_node < v1.Value) { DateTime _T = currentTime; TimeSpan _dT = _T - current_node_time; double _deltaT = _dT.Ticks; _deltaT = (_deltaT / TimeSpan.TicksPerHour); // время в часах! _value = (float)(((double)v1.Value - (double)current_node_mech_speed) / _deltaT); current_node_mech_speed = v1.Value; setGoalPoint(); current_node_time = _T; } } } else { _value = 0; current_node_mech_speed = float.NaN; } } } finally { slim.ExitWriteLock(); } } }
/// <summary> /// Вычисляет текущее значение параметра Время бурения /// </summary> /// <param name="м1">Состояние процесса бурения в текущий момент</param> /// <param name="currentTime">Текущее технологическое время</param> public void Calculate(P0206 v1, DateTime currentTime) { if (slim.TryEnterWriteLock(300)) { try { if (is_change_time) { is_change_time = false; current_state_time = currentTime; _value = exact_time_drilling / TimeSpan.TicksPerMillisecond; _value = _value / 3600000; } else { if (float.IsNaN(v1.Value)) { current_state_time = DateTime.MinValue; } else { int state = (int)Math.Round(v1.Value); if (state != НадЗабоем_Бурение_Бурение) { current_state_time = DateTime.MinValue; } else { if (current_state_time == DateTime.MinValue) { current_state_time = currentTime; } else { DateTime _T = currentTime; long lT = _T.Ticks - current_state_time.Ticks; exact_time_drilling += lT; _value = exact_time_drilling / TimeSpan.TicksPerMillisecond; _value = _value / 3600000; current_state_time = _T; } } } } } finally { slim.ExitWriteLock(); } } }
/// <summary> /// Вычисляет текущее значение параметра Скорость СПО /// </summary> /// <param name="v1">Скорость тальблока в текущий момент</param> /// <param name="v2">Состояние процесса бурения в текущий момент</param> public void Calculate(P0103 v1, P0206 v2) { if (slim.TryEnterWriteLock(300)) { try { if (!float.IsNaN(v2.Value)) { int _state = (int)Math.Round(v2.Value); if (_state == НадЗабоем_Бурение_Бурение) { _value = 0; } else { if (_state < ПустойКрюк_ПЗР_ПЗР) // Надеюсь, значения констант полностью сохранены и можно пользоваться этим неравенством :-) { _value = v1.Value; } else { _value = 0; } } } else { _value = float.NaN; } } finally { slim.ExitWriteLock(); } } }
/// <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; }
/// <summary> /// Вычисляет текущее значение параметра Время бурения 1м проходки /// </summary> /// <param name="Забой">Глубина забоя в текущий момент</param> /// <param name="Состояние_процесса">Cостояние процесса бурения в текущий момент</param> /// <param name="history">История процесса</param> public void Calculate(P0205 v1, P0206 v2, DateTime currentTime) { if (slim.TryEnterWriteLock(300)) { try { if (float.IsNaN(v1.Value) || float.IsNaN(v2.Value)) { _value = 0; current_node_drilling = float.NaN; } else { int _state = (int)Math.Round(v2.Value); if (_state == НадЗабоем_Бурение_Бурение) { if (float.IsNaN(current_node_drilling)) { current_node_drilling = v1.Value; setGoalPoint(); _value = 0; current_node_time = currentTime; } else { if (target_node < v1.Value) { DateTime _T = currentTime; TimeSpan _dT = _T -current_node_time; double lT = _dT.Ticks;// / TimeSpan.TicksPerMillisecond; _value = (float)((lT / TimeSpan.TicksPerMinute) / (v1.Value - current_node_drilling)); current_node_drilling = v1.Value; setGoalPoint(); current_node_time = _T; } } } else { _value = 0; current_node_drilling = float.NaN; } } } finally { slim.ExitWriteLock(); } } }