Opened 6 лет ago

Closed 6 лет ago

#179 closed улучшение (fixed)

Таймер перезапуска smarthdcd

Сообщил: san Владелец: alx
Приоритет: Срочно Этап разработки: 1-я очередь
Ключевые слова: Копия: Art_M, alx

Описание (последним изменил san)

Необходимо реализовать "функцию Ватчдога", для избежания ситуаций, когда из-за гипотетических дыр в алгоритме привод не выполняет свою основную функцию (не ездит туда-сюда), предлагается следующее :

  • при переключении в авт. или запуске в авт. запускается таймер на 90 минут.
  • по истечению таймера в Журнал и Лог заносятся соответствующие записи, затем либо завершаем smarthdcd либо перезапускаем (что примерно одно и тоже с разницей в 1 мин.)

Таймер сбрасывается в следующих случаях:

  • при нахождении в режиме руч. или стоп
  • при наличии аварии с "индикацией > 2"
  • при изменении состояния ДВ

История изменений (34)

comment:1 by andrei, 6 лет ago

Возражаю. Все хорошо - это когда нет аварий.
Для тех состояний когда привод не желает ехать и нет явных аварий создать новую аварию.

Авария 28. Привод не движется по неизвестной причине.

Условие возникновения: (переключатель в АВТ) и (отсутствие аварий, останавливающих привод) и ((время между выключением ЭД и включением ЭК > времени задержки в ВМТ) или (время между выключением ЭК и включением ЭД > времени задержки в НМТ)).
Сообщение:
Индикация:
Действие при возникновении: Нет.

Условие снятия: (Переключатель не в АВТ) или (включение ЭД) или (включение ЭК).
Действие при снятии: Нет (продолжать работать по алгоритму).

P.S.: ЭД и ЭК в данном случае - любые.
Не снимаю аварию при появлении других аварий чтобы понимать что, например, не доехали до датчика не из-за проблем со скважиной, а из-за особенностей алгоритма.

Артем, какую индикацию добавить для описанной ситуации?

comment:2 by san, 6 лет ago

Владелец: изменён с andrei на san
Копия: Art_M alx added
Краткое описание: Добавить в веб интерфейс информацию о том движется ли приводДобавить аварию: Привод не движется
Описание: изменено (отличие)
Состояние: newassigned

Переформулировал тело тикета.
Забираю его себе для формулирования критериев аварии. Предлагаю высказаться по теме, причастным)

comment:3 by andrei, 6 лет ago

Артем считает, что такого быть не должно, чтоб привод не двигался и не известно почему, а если всё таки такая ситуация возникла, то кончено же стоит это отразить в журнале, а затем следует выполнить рестарт смарташдиси, чтобы, так сказать, перевести контроллер из неизвестного застрявшего состояния в известное - начальное.

Условие динамограммы нам не подходит, т.к. при неисправном датчике динамограмма не записывается, но это не значит, что привод бездействует. Над условием следует подумать.

comment:4 by andrei, 6 лет ago

У нас вроде появилась авария на случай "не едет без аварии".
Предлагаю не ресетить smartHDC и тикет закрыть.

comment:5 by san, 6 лет ago

где появилась авария?

in reply to:  3 comment:6 by san, 6 лет ago

Закончили обсуждения пока этим
Replying to andrei:

Над условием следует подумать.

Я жду уточнения условия, после смогу внести в ТЗ новую аварию, номер я уже выбрал :) Авария 2

comment:7 by andrei, 6 лет ago

Артем, ты хотел подумать над условием.

comment:8 by Art_M, 6 лет ago

Не придумал :(

Может быть Вам ребята какие то решения пришли в голову?

Я не программист, но можно ли повесить ватчдог который смотрит на:

  • переключатель в положении "авт"
  • красная лампа не горит
  • нет сигналов на ЭК и НУ в течение минуты, ну или 10 минут...

то делает рестарт смарташдисиди?

in reply to:  8 ; comment:9 by alx, 6 лет ago

Replying to Art_M:

Я не программист, но можно ли повесить ватчдог который смотрит на:

  • переключатель в положении "авт"
  • красная лампа не горит
  • нет сигналов на ЭК и НУ в течение минуты, ну или 10 минут...

то делает рестарт смарташдисиди?

Я хоть и не программист, но могу ответить, что это сделать можно.

comment:10 by san, 6 лет ago

По прежнему предлагаю не рестартовать основной процесс в любом непонятном случае, а выдать аварию. Иначе мы рискуем получить кучу дыр, запрятанных под ковёр.

comment:11 by san, 6 лет ago

Вопрос лишь в условии
Вот что предложил Артём:

Авария 2. Привод не движется.
Условие: (переключатель в положении "авт")И(нет аварий с Индикацией>2)И(команды на включение ЭК и НУ не отправлялись в течении 10 минут)
Сообщение: Привод не движется.
Индикация: №2 ?
Действия: нет.
Условие снятия: (Переключатель не в АВТ) или (включение НУ) или (включение ЭК).
Действие при снятии: нет

comment:12 by andrei, 6 лет ago

Время 10 минут с потолка?
Станция "официально" может стоять только в ВМТ и НМТ, время стояния в них контроллеру известны. Предлагаю время в условии сделать >= ((время ВМТ) и (время НМТ)) + 10с.

10 сек, чтобы гарантированно отсеять всякие задержки, таймауты и пр., но и не затягивать с аварийным сообщением.

comment:13 by san, 6 лет ago

Ну вот не успел)) Андрей раньше

Думаю что выбор времени "10 минут" не корректен, т.к. привод имеет право стоять в ВМТ и НМТ в зависимости от настроек до 100 секунд. Поэтому вариант Андрея правильнее.

(время между выключением НУ и включением ЭК > времени задержки в ВМТ) или (время между выключением ЭК и включением НУ > времени задержки в НМТ)

comment:14 by san, 6 лет ago

Хотел предложить подобное

Предлагаю время в условии сделать >= ((время ВМТ) и (время НМТ)) + 10с.

А теперь вопрос: время чего? что в левой части формулы?

comment:15 by andrei, 6 лет ago

(Время невключенного состояния ЭК) и (время невключенного состояния ЭД)

comment:16 by san, 6 лет ago

время невключенного состояния ЭД

Тогда при потере связи с ЧРП, мы не считаем частоту и будем считать что привод стоит.

comment:17 by andrei, 6 лет ago

Я не ссылался на частоту, я ссылался на включенное состояние))
Переформулирую:
Время (не подаётся команда на включение ЭД) и (не подаётся команда на включение ЭК)

in reply to:  17 comment:18 by alx, 6 лет ago

Replying to andrei:

(не подаётся команда на включение ЭД) и (не подаётся команда на включение ЭК)

А что ты подразумеваешь под подачей команды, например, на включение ЭК - включение соответствующего реле или включенное состоняие соответствующего реле? Аналогично, что подразумевается под подачей команды на включение ЭД - запуск остановленного ранее ЭД или каждая запись командного слова (даже если оно не изменялось)?

comment:19 by san, 6 лет ago

не подаётся команда

В такой формулировке тоже есть дыра: подали команду на ЭК затем едем 600 секунд(максимальное время движения вниз по настройкам), встали в НМТ и тут твой таймер сработает.

in reply to:  19 comment:20 by andrei, 6 лет ago

Replying to alx:

Replying to andrei:

(не подаётся команда на включение ЭД) и (не подаётся команда на включение ЭК)

А что ты подразумеваешь под подачей команды, например, на включение ЭК - включение соответствующего реле или включенное состоняие соответствующего реле? Аналогично, что подразумевается под подачей команды на включение ЭД - запуск остановленного ранее ЭД или каждая запись командного слова (даже если оно не изменялось)?

Включенное состояние - состояние между включением и выключением. Т.е. начинаем отсчет с времени когда перестали подавать команду вкл.
При управлении по модбас предлагаю эту аварию не детектировать, оно само по себе уже авария.

Replying to san:

не подаётся команда

В такой формулировке тоже есть дыра: подали команду на ЭК затем едем 600 секунд(максимальное время движения вниз по настройкам), встали в НМТ и тут твой таймер сработает.

Так команду не ПОДАЛИ, а ПОДАЁМ. Иначе клапан откроется и снова закроется -> привод стоит -> сабж.

comment:21 by san, 6 лет ago

При управлении по модбас предлагаю эту аварию не детектировать

Ну началось...

comment:22 by andrei, 6 лет ago

Хорошо, если Саша огорчен, предложение о модбасе прошу не учитывать.

comment:23 by Art_M, 6 лет ago

По поводу времени я не настаивал я лишь предположил диапазон от 1 до 10 минут. Чем меньше, естественно, тем лучше. Если это будет 10 секунд, так вообще замечательно, главное все учесть... что бы не получилось, что привод чуть призадумался на каком нибудь этапе 20 аварии и тут же на тебе новая авария.

На рестарте смарташдисиди я тоже не настаиваю, я просто предложил это как самы простой способ выйти из непонятного положения. Мы шли-шли по алгоритму и попали в тупик, как из него выйти, самое простое - начать заново. Тут же смысл не в том, чтобы найти выход из лабиринта попасть в какую то определенную точку, а в том что бы не допустить остановку. Нефтянику и, как следствие, нам важно, чтобы привод все время двигался и добывал нефть не смотря ни на что, а не стоял демонстрируя дыры во всей красе. А о дырах мы и сами из логов узнаем, авария же будет отражена, а после отражения аварии в логе рестарт смарташдисиди.

Если есть другой вариант, то предлагайте, меня устроит даже просто начать со стартового хода, без ресета смарташдисиди.

comment:24 by san, 6 лет ago

вариант предложен - ничего не делать при аварии
Смысл добавления аварии - проинформировать что что-то пошло не так.

comment:25 by andrei, 6 лет ago

Ничего не делать тоже плохо, раз у нас возникают непонятные ситуации.
Как делать вроде более-менее понятно? Раз Артем не настаивает и не уверен, то делаем хорошо))

comment:26 by Art_M, 6 лет ago

Так на чем порешили то? Ну попали мы в такую дырку, аварию зафиксировали, а дальше то что?
Вариант "ничего не делать при аварии", означает продолжать стоять и отображать аварию? Так это не комильфо - ну получим мы такую аварию и у нас же за нее и спросят. А если после фиксации аварии мы ее сами и сбросим, то:
вариант 1 - никто ничего не заметит;
вариант 2 - кто-то заметит, и задаст вопрос, что это, а мы сразу и ответим, что это результат работы самодиагностики... типа сам за собой заметил что приуныл и сам себе же пендаля и дал...

Ну и третий вариант, создаем уставку, что делать при возникновении такой аварии... По умолчанию - остановить, а если кого то достанет останавливающийся без причины привод, а причину будет подловить сложно (привод далеко, связи с ним нет, заниматься некому и т.д.), то всегда можно выбрать уставку "выполнять рестарт смарташдисиди", ну или "начинать со стартового хода" и привод будет продолжать работать...

in reply to:  9 comment:27 by Art_M, 6 лет ago

Replying to alx:

Replying to Art_M:

Я не программист, но можно ли повесить ватчдог который смотрит на:

  • переключатель в положении "авт"
  • красная лампа не горит
  • нет сигналов на ЭК и НУ в течение минуты, ну или 10 минут...

то делает рестарт смарташдисиди?

Я хоть и не программист, но могу ответить, что это сделать можно.

Итак, не смотря на то что Артем предложил, а Алексей сообщил, что сделать можно, на совещании все же выясняется, что не всех это решение устраивает.

Поэтому ватчдог теперь должен смотреть на

  • переключатель в положении "авт"
  • красная лампа не горит
  • нет изменения сигналов от верхнего датчика на протяжении N-ого времени.

Время N выбираем исходя из следующих диапазонов уставок:

  1. Диапазон ЧК=0,2-10мин-1, т.е. максимальное время цикла может быть 5минут
  2. Максимальное время хода вниз 0,1-600сек, т.е. максимальное время цикла может быть штатно продлено еще на 10 минут.
  3. Максимальное время хода вверх 0,1-600сек, т.е. продление цикла еще на 10 минут.А при учете, что при неисправности НУ привод дергает клапаны и повторяет попытки хода вверх, то нужно 5 таких промежутка времени, т.к. цикл может быть "условно штатно" продлен на 50 минут, плюс подергивания то пусть 55 минут!
  4. Время задержки НМТ 0.0... 100.0, т.е. продление цикла еще почти на 2 минуты
  5. Время задержки ВМТ 0.0... 100.0, поидее в процессе не должно участвовать, но на всякий случай добавим продление цикла еще почти на 2 минуты.
  6. Максимальное время сработанного состояния датчика положения 10-300сек, т.к. отсчет хода в каком либо направлении начинается от отпускания датчика, то, если я не ошибаюсь, то его тоже нужно учесть, хотя бы один раз, но можно и два, т.е. продление цикла еще на 10 минут

Те задержки, которые мы не учитываем:

  1. Периодичность сброса питания датчиков при ошибках не участвует, т.к. если это ошибка верхнего датчика, то привод должен стоять с красной лампой, а если ошибка датчика давления, то привод должен двигаться согласно циклу.
  2. Задержка между АПВ не участвует, т.к. если АПВ обоих моторов, то привод должен стоять с красной лампой, а если одного, то привод двигается согласно циклу.
  3. Время простоя при перегреве не участвует, т.к. при этом должна гореть красная лампа.
  4. Останов по ЭКМ тоже не учитывается, т.к. при этом должна гореть красная лампа.

Итого: 84минуты! Соответственно, для гарантированного непопадания в этот промежуток времени выбираем большее значение к примеру 90минут. Значение, конечно же, большое! Существенно больше чем 10 минут, предполагаемых для предыдущего способа реализации. Конечно же можно это значение сделать зависимым от перечисленных уставок и плюс 5 минут, но, скорее всего, это будет сложно и не нужно.. В общем будем довольствоваться тем, что есть - 90минут до сброса смарташдисиди, это лучше, чем получать "болты" за простои... Будем рассчитывать, что это крайне маловероятное событие.

Не забываем отразить в логе эту ошибку!

Кто что может добавить? Выслушиваю возражения и предложения?

comment:28 by andrei, 6 лет ago

У меня возражений нет, вроде итак все несколько раз обсудили.
В АВТ делаем перезапуск программы через 90 минут после последнего изменения состояния ДВ, если не горит красная лампа.

comment:29 by san, 6 лет ago

Краткое описание: Добавить аварию: Привод не движетсяТаймер перезапуска smarthdcd
Описание: изменено (отличие)

Ну вот, раз без меня итог никто не подводит...
Итог:
Реализуем функцию Ватчдога:

  • при переключении в авт. или запуске в авт. запускается таймер на 90 минут.
  • по истечению таймера в Журнал и Лог заносятся соответствующие записи, затем либо завершаем smarthdcd либо перезапускаем (что примерно одно и тоже с разницей в 1 мин.)

Таймер сбрасывается в следующих случаях:

  • при нахождении в режиме руч. или стоп
  • при наличии аварии с "индикацией > 2"
  • при изменении состояния ДВ

Внёс изменения в задании в тело тикета, всё правильно?

in reply to:  29 comment:30 by andrei, 6 лет ago

Replying to san:

  • при нахождении в режиме руч. или стоп
  • при наличии аварии с "индикацией > 2"

п.2 перекрывает п.1 - При РУЧ и СТОП индикация >2

comment:31 by san, 6 лет ago

Но руч. и стоп это не авария, думаю правильно, что они отдельно упомянуты.

comment:32 by alx, 6 лет ago

Владелец: изменён с san на alx
Состояние: assignedaccepted

comment:33 by alx, 6 лет ago

Резюмирую логику работы таймера:

  • таймер (пере)запускается:
    • при переводе переключателя режима в положение "АВТ" и отсутствии аварий с "индикацией > 2";
    • при изменении состояния ДВ в режиме "АВТ" и отсутствии аварий с "индикацией > 2";
    • при снятии последней аварии с индикацией > 2 в режиме "АВТ".
  • таймер отменяется:
    • при переводе переключателя режима в положение "РУЧ" или "СТОП";
    • при возникновении аварии с индикацией > 2.

comment:34 by alx, 6 лет ago

Решение: fixed
Состояние: acceptedclosed

In 762/smartHDC:

Добавлен сторожевой таймер, перезапускающий демона при неработе привода в автоматическом
режиме при отсутствии аварий с индикацией > 2. Closes #179.

Note: See TracTickets for help on using tickets.