Opened 5 лет ago

Last modified 5 лет ago

#144 assigned улучшение

Существенные недостатки алгоритма в ТЗ и баги связанные с выходом за верхний датчик

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

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

Обнаружены существенные недостатки алгоритма в ТЗ и баги связанные с выходом за верхний датчик...

  1. При включении при сработавшем нижнем датчике сразу осуществляется ход вверх. Это плохо , т.к. в случае залипания нижнего датчика и сбросе питания в ВМТ , которая по инерции находится выше верхнего датчика, мы получим продолжение хода вверх за верхний датчик.
  2. При продолжительном срабатывании верхнего датчика и отсутствии отсутствии срабатывания нижнего датчика привод выполняет разворот и ход наверх несмотря на сработавший верхний датчик и далее за верхний датчик.
  3. При сработавшем верхнем датчике и срабатывании нижнего датчика привод начинает и продолжает ход за верхний датчик.
  4. Уставка продолжительности сработанного состояния датчиков нас не спасает ни от чего,
    1. если установить значение слишком большим, то раньше наступит одновременное срабатывание, либо упор при забеге еще выше.
    2. если установить значение слишком маленьким, то при отсутствии разрешение на работу в аварийном режиме нижнего датчика мы получим остановку по продолжительному срабатыванию нижнего датчика, привод не успеет перебрать насосные установки если вдруг он стартует с неисправной! и можем быть введены в заблуждение, т.к. вместо перебора и подключения исправной НУ мы получим стоп по долгому срабатыванию нижнего датчика...

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

Предлагается алгоритм работы сделать следующим образом:

  1. Задать программное ограничивающее условие: запретить движение вверх при сработавшем верхнем датчике при любых условиях.

2.При одновременном срабатываний датчиков при ошибке 11.1 отображать в сообщении
"11.1 Одновременное срабатывание датчиков. ДН>ДВ" если при сработавшем нижнем при ходе вверх сработал и верхний (для различия можно задать 11.3)
"11.1 Одновременное срабатывание датчиков. ДВ>ДН" если при сработавшем верхнем при ходе вниз сработал и нижний (для различия можно задать 11.4)

  1. А далее

если ДВ>ДН - то ждем ДВ=0 с отображением "11.1(4) Одновременное срабатывание датчиков. ДВ>ДН"
если ДН>ДВ в зависимости от уставки времени хода вниз при неисправности нижнего датчика, ждем

либо ДН=0 с отображением "11.1(3) Одновременное срабатывание датчиков. ДН>ДВ"
либо "10.2 Игнорирование превышения времени сработанного ДН" и работаем в аварийном режиме с условием разворота по времени хода вниз.

  1. Стартовый ход выполнять в соответствии со следующим состоянием датчиком после включения контроллера

1)ДВ=0 и ДН=0

двигаемся вниз до изменения состояния датчика ДН=0 => ДН=1.
или в течение максимального времени хода вниз (если состояние не меняется), затем разворот и ход вверх (только если ДВ=0, см.п.1)

2)ДВ=0 и ДН=1

двигаемся вниз до изменения состояния датчика ДН=1 => ДН=0
или в течение максимального времени хода вниз (если состояние не меняется) , затем разворот и ход вверх (только если ДВ=0, см.п.1)

3) ДВ=1 и ДН=0

двигаемся вниз

до изменения состояния датчика ДН=0 => ДН=1 и

получаем либо аварию одновременного срабатывания при ДВ>ДН, либо если в течение хода вниз ДВ=1 => ДВ=0, то штатную работу

или в течение максимального времени хода вниз (если состояние не меняется, т.е. сохраняется ДВ=1),

после чего выполнить процедуру расклинивания клапанов
повторно выполнить ход вниз на том же клапане
процедуру расклинивания клапанов
выполнить ход вниз на противоположном клапане,
процедуру расклинивания клапанов
выполнить ход вниз на обоих клапанах
если состояние не изменяется в течение всего времени с момента запуска находилось в состоянии ДВ=1 и ДН=0, то привод остановить и отобразить "7. Превышение времени сработавшего верхнего датчика", ожидать ДВ=0

4) ДВ=1 и ДН=1

в зависимости от уставки времени хода при неисправности нижнего датчика:

если уставка = 0, то отображаем "11.1 Одновременное срабатывание датчиков." привод стоит и ожидает переход любого из датчиков в несработавшее состояние, после чего действует согласно 2) или 3) (ну или 1), что маловероятно, но дырку надо закрыть)

если уставка >0, то двигаемся вниз до

в течение максимального времени хода вниз
если состояние не меняется, т.е. сохраняется ДВ=1, то

выполнить процедуру расклинивания клапанов
повторно выполнить ход вниз на том же клапане, ожидая ДВ=0
процедуру расклинивания клапанов
выполнить ход вниз на противоположном клапане, ожидая ДВ=0
процедуру расклинивания клапанов
выполнить ход вниз на обоих клапанах, ожидая ДВ=0
если состояние не изменяется (ДВ=1 и ДН=1), то привод остановить и отобразить две ошибки "7. Превышение времени сработавшего верхнего датчика" и
10.2 Игнорирование превышения времени сработанного ДН", ожидать ДВ=0, после чего продолжить работу в аварийном режиме с отображением "10.2 Игнорирование превышения времени сработанного ДН", до перехода ДН=0

У нас удаляются (а лучше чтобы вспоминать пусть пока закомментируются,) в ТЗ авария 10.1 "Превышение времени сработанного ДН" (авария 10.2 можно перевести в 10.1 или просто в 10), авария 11.2 Игнорирование одновременного срабатывания датчиков, уставка "максимального времени срабатывания датчиков"
Условие функции "Время хода вниз при неисправном нижнем датчике" время отсчитывается от перехода ДВ в несработавшее состояние! Если при ходе вниз датчик не переходит в несработавшее состояние, при условии неисправности нижнего или отсутствия срабатывания нижнего датчика, в течение максимального времени хода вниз, то провести процедуру расклинивания клапанов с увеличением производительности при спуске (по аналогии со случаем когда ДВ=1 и ДН=1 в при включении). При отсутствии изменений после указанной процедуры привод останавливается по ошибке 7.

Авария 7. Превышение времени сработавшего состояния верхнего датчика
Условие: (к концу максимального времени хода вниз ДВ=1) и (ДН=0 не изменился на ДН=1 или ДН игнорируется).
Сообщение: "7. Превышение времени сработавшего верхнего датчика".
Индикация: №3.
Действия в авт. режиме: выполнить процедуру расклинивания клапанов с поэтапным повышением производительности на ход вниз (т.е. переключиться на противоположный клапан (если допустимо), а после и на двух клапанах(если так же допустимо)), при отсутствии изменений привод остановить с отображением сообщения.
Условие снятия: ДВ в несработанном состоянии
Действия при снятии в авт. режиме: аналогично 5.

Авария 10 Игнорирование превышения времени сработанного ДН
Условие: (контроллер обнаруживает сработавшее состояние датчиков в процессе хода вверх) и (при сработавшем нижнем датчике срабатывает верхний) и (уставка времени хода вниз при несправном нижнем датчике > 0) .
Сообщение: "10 Игнорирование превышения времени сработавшего нижнего датчика".
Индикация: №2.
Действия: работа в аварийном режиме при котором время спуска от верхнего датчика определяется уставкой времени хода вниз при несправном нижнем датчике
Условие снятия: ДН в несработавшем состоянии
Действия при снятии: автоматический режим, поиск других аварий?

Авария 11.1 Одновременное срабатывание датчиков
Условие: контроллер обнаруживает сработавшее состояние датчиков при включении до стартового хода и уставка времени хода вниз при несправном нижнем датчике = 0.
Сообщение: "11.1 Одновременное срабатывание датчиков".
Индикация №3.
Действия в авт. режиме: аналогично 5.
Условие снятия: любой из датчиков переходит в несработавшее состояние
Действия при снятии в авт. режиме: перезапуск "smarthdc" или ресет или как там еще это можно назвать это состояние, когда контроллер только что включился и проверяет все ошибки заново на возможность запуститься / (чтобы я не слышал, что у Макарова в ТЗ же написано "запустить привод", вот контроллер и запустил, а то что масла не было, так извиняйте)

Авария 11.3 Одновременное срабатывание датчиков на ходе вверх
Условие: (контроллер обнаруживает сработавшее состояние датчиков в процессе хода вверх) и (при сработавшем нижнем датчике срабатывает верхний) и (уставка времени хода вниз при несправном нижнем датчике = 0).
Сообщение: "11.3 Одновременное срабатывание датчиков. ДН>ДВ".
Индикация №3.
Действия в авт. режиме: аналогично 5.
Условие снятия: нижний датчик переходит в несработавшее состояние
Действия при снятии в авт. режиме: ресет ил перезапуск "smarthdc"

Авария 11.4 Одновременное срабатывание датчиков на ходе вниз
Условие: (контроллер обнаруживает сработавшее состояние датчиков в процессе хода вниз) и (при сработавшем верхнем датчике срабатывает нижний).
Сообщение: "11.4 Одновременное срабатывание датчиков. ДВ>ДН".
Индикация №3.
Действия в авт. режиме: аналогично 5.
Условие снятия: верхний датчик переходит в несработавшее состояние
Действия при снятии в авт. режиме: ресет или перезапуск "smarthdc"

Вложения (1)

messages.rar (74.0 KB ) - added by Art_M 5 лет ago.

Download all attachments as: .zip

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

in reply to:  description ; comment:1 by andrei, 5 лет ago

Копия: andrei alx added

Replying to Art_M:

  1. При включении при сработавшем нижнем датчике сразу осуществляется ход вверх. Это плохо , т.к. в случае залипания нижнего датчика и сбросе питания в ВМТ , которая по инерции находится выше верхнего датчика, мы получим продолжение хода вверх за верхний датчик.

Случай ну очень маловероятный. А вниз до упора падать тоже ничего хорошего. Как вариант в таких ситуациях предлагаю спускаться вниз до выключения ДН, потом сразу вверх.

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

Отсутствие чего?
При (сработавший ДВ + долгий ход вниз) останавливаем установку?

  1. При сработавшем верхнем датчике и срабатывании нижнего датчика привод начинает и продолжает ход за верхний датчик.

Т.е. не соответствует действиям по аварии 11?

comment:2 by andrei, 5 лет ago

Копия: san added

Артем, вроде договаривались для отдельной проблемы отдельный тикет. С авариями давай также делать.

in reply to:  1 ; comment:3 by Art_M, 5 лет ago

  1. "Как вариант в таких ситуациях предлагаю спускаться вниз до выключения ДН, потом сразу вверх."

Андрей, я именно это и написал ниже в 4-м пункте

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

Саша я думаю здесь можно держать в одном тикете... это же не отдельный баг, а комплексная мера, которую нужно делать в одном ключе!

in reply to:  3 ; comment:4 by andrei, 5 лет ago

Андрей, я именно это и написал ниже в 4-м пункте

Да, я уже все прочел и увидел подробности. Ждем прочтения Алексеем и Александром.
Если вопросов не будет, будем внедрять когда-нибудь.

in reply to:  4 ; comment:5 by alx, 5 лет ago

Replying to andrei:

Ждем прочтения Алексеем и Александром.
Если вопросов не будет, будем внедрять когда-нибудь.

У меня есть вопросы.

При включении при сработавшем нижнем датчике сразу осуществляется ход вверх. Это плохо , т.к. в случае залипания нижнего датчика и сбросе питания в ВМТ , которая по инерции находится выше верхнего датчика, мы получим продолжение хода вверх за верхний датчик.

Рассмотрим симметричную ситуацию: питание включено при нахождении ниже нижнего датчика. Мы получим продолжение хода вниз за нижний датчик - это не плохо? Предложенные улучшения, как мне кажется, эту проблему не решают...

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

  1. При отсутствии чего?
  2. Что значит "продолжительном"? Если под "продолжительным срабатыванием" подразумевается превышение времени сработанного состояния верхнего датчика настройки “Максимальное время сработанного состояния датчика положения”, то никакого разворота вверх производиться не должно, привод должен остановить работу.

если ДВ>ДН - то ждем ДВ=0

  1. Что означает "ДВ=0" (также в тексте встречается "ДВ=1", "ДН=0", "ДН=1")? По тексту далее я понял, что это какое-то состояния датчиков положения. Какие? Сейчас датчики положения могут иметь следующие состояния:
    • 0 - обрыв датчика;
    • 1 - активное (датчик сработал);
    • 2 - неактивное (датчик не сработал);
    • 3 - КЗ датчика.
  2. Смущает слово "ждем". Что имеется в виду? Прекращаем выполнять все действия, например опрос датчиков и клавиш, обновление экрана и т.п. до наступления события "ДВ=0"? :) Очевидно, нет. Предполагаю, что привод продолжает работать в соответствии со своим алгоритмом, а при возникновении события ДВ=0 (при переходе ДВ в состояние 0, что бы это ни было) должен выполнить какие-то действия. Вот эти действия и стоит описать...

Стартовый ход выполнять в соответствии со следующим состоянием датчиком после включения контроллера

Смущает уточнение "после включения контроллера". Оно бессмысленно, так как контроллер не может знать, какое состояние у датчиков было до его включения, когда он был выключен. Вероятно, имелось в виду что-то другое?

Условие: (в максимального времени хода вниз ДВ=1) и (ДН=0 не изменился на ДН=1 или ДН игнорируется).

??? Непонятное условие. Похоже, пропущено слово "течение", и что значит "ДН игнорируется"? Вроде бы нижний датчик у нас никогда не игнорируется...

Действия: работа в аварийном режиме при котором время спуска от верхнего датчика определяется уставкой времени хода вниз при несправном нижнем датчике

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

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

Описание: изменено (отличие)

in reply to:  5 ; comment:7 by andrei, 5 лет ago

Рассмотрим симметричную ситуацию: питание включено при нахождении ниже нижнего датчика. Мы получим продолжение хода вниз за нижний датчик - это не плохо? Предложенные улучшения, как мне кажется, эту проблему не решают...

Артем считает что это чуть менее критично.

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

  1. При отсутствии чего?

Вот и мне это интересно.

никакого разворота вверх производиться не должно, привод должен остановить работу.

Алексей, это проверено? Если да, то видимо то самое "отсутствие" влияет.

  1. Что означает "ДВ=0" (также в тексте встречается "ДВ=1", "ДН=0", "ДН=1")? По тексту далее я понял, что это какое-то состояния датчиков положения. Какие? Сейчас датчики положения могут иметь следующие состояния:

В этом тикете ДВ=0 - несработанное состояние верхнего датчика положения.
ДН=1 - сработавшее состояние датчика нижнего положения.
ДВ=1 и ДН=0 по аналогии.

  1. Смущает слово "ждем". Что имеется в виду?

Не включаем моторы и электромагнитные клапана видимо, но да, как-то без подробностей. Артем?

in reply to:  7 ; comment:8 by alx, 5 лет ago

Replying to andrei:

никакого разворота вверх производиться не должно, привод должен остановить работу.

Алексей, это проверено?

Что "это"? Да, вчера я проверил и убедился, что в ТЗ действительно записано требование привод остановить. :)

  1. Смущает слово "ждем". Что имеется в виду?

Не включаем моторы и электромагнитные клапана видимо,

А сейчас разве не так? И сейчас при одновременном срабатывании датчиков привод останавливается, то есть моторы и клапаны выключаются и не включаются...

comment:9 by Art_M, 5 лет ago

Рассмотрим симметричную ситуацию: питание включено при нахождении ниже нижнего датчика. Мы получим продолжение хода вниз за нижний датчик - это не плохо? Предложенные улучшения, как мне кажется, эту проблему не решают...

Спуск колоны штанг происходит под собственным весом на настроенном дросселе. Постепенный спуск происходит из-за микропротечек в гидроаппаратуре даже если привод просто стоит, поэтому остановленный привод рано или поздно сам спустится за нижний датчик и сядет на буксу. Разовые случаи захода за нижний датчик не страшны. А вот вверх привод двигается посредством моторов и насосов и нагрузка на штоке куда существеннее, и при ходе вверх проскочив верхний датчик получить удар по буксе, потянуть шток или при короткой подгонке выдернуть подземный насос с замковой опоры куда хуже. (Условно представьте компрессор который то накачивает емкость, то спускает, согласитесь, пусть он лишний раз спустит давление ниже положенного, чем перекачает лишнего, так ведь!)

При продолжительном срабатывании верхнего датчика и отсутствии привод выполняет разворот и ход наверх несмотря на сработавший верхний датчик и далее за верхний датчик.
При отсутствии чего?
Что значит "продолжительном"? Если под "продолжительным срабатыванием" подразумевается превышение времени сработанного состояния верхнего датчика настройки “Максимальное время сработанного состояния датчика положения”, то никакого разворота вверх производиться не должно, привод должен остановить работу.

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

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

Что означает "ДВ=0" (также в тексте встречается "ДВ=1", "ДН=0", "ДН=1")?
Это условные сокращения сработавшего 1 и несработавшего состояний 0, только для этого тикета...
ДН=1 - нижний датчик в сработавшем состоянии
ДН=0 - нижний датчик в несработавшем состоянии
ДВ=1 - верхний датчик в сработавшем состоянии
ДВ=0 - верхний датчик в несработавшем состоянии

если ДВ>ДН - то ждем ДВ=0 с отображением "11.1(4) Одновременное срабатывание датчиков. ДВ>ДН"

Смущает слово "ждем". Что имеется в виду? Прекращаем выполнять все действия, например опрос датчиков и клавиш, обновление экрана и т.п. до наступления события "ДВ=0"? :)

Ниже пояснение в виде аварий 11.4 Одновременное срабатывание датчиков на ходе вниз
Условие: (контроллер обнаруживает сработавшее состояние датчиков в процессе хода вниз) и (при сработавшем верхнем датчике срабатывает нижний).
Сообщение: "11.4 Одновременное срабатывание датчиков. ДВ>ДН".
Индикация №3.
Действия в авт. режиме: аналогично 5.
Т.е.

  • привод остановить.
  • выполнить сброс питания датчиков в соответствии с настройкой “Продолжительность сброса питания датчиков при ошибках”.

Смущает уточнение "после включения контроллера". Оно бессмысленно, так как контроллер не может знать, какое состояние у датчиков было до его включения, когда он был выключен. Вероятно, имелось в виду что-то другое?

Алексей, до включения контроллер, естественно, не знает состояние датчиков, поэтому я и написал, что "после включения контроллера". Не пойму, почему контроллер не может знать состояние датчиков между включением самого контроллера и началом выполнения стартового хода?

Условие: (в максимального времени хода вниз ДВ=1) и (ДН=0 не изменился на ДН=1 или ДН игнорируется).
??? Непонятное условие. Похоже, пропущено слово "течение", и что значит "ДН игнорируется"? Вроде бы нижний датчик у нас никогда не игнорируется...

Да, конечно же, здесь в течение максимального времени хода вниз ДВ в сработавшем состоянии. "ДН игнорируется" - означает, что у него либо КЗ, либо обрыв, либо долгое срабатывание... т.е. контроллер его уже не ждет и может работать по уставке времени хода вниз при неисправности нижнего датчика.

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

Так это же уже реализовано, то что он должен делать, т.е. продолжать работать в автоматическом режиме осуществляя ход вниз в течение времени хода вниз при неисправном нижнем датчике.

Вот пример, только авария ошибочно выводится 11.2, вместо 10.2
https://yadi.sk/i/7u1iY21bJ819BA

comment:10 by Art_M, 5 лет ago

Описание: изменено (отличие)

comment:11 by Art_M, 5 лет ago

Описание: изменено (отличие)

in reply to:  8 comment:12 by andrei, 5 лет ago

Replying to alx:

Replying to andrei:

никакого разворота вверх производиться не должно, привод должен остановить работу.

Алексей, это проверено?

Что "это"? Да, вчера я проверил и убедился, что в ТЗ действительно записано требование привод остановить. :)

Не-не-не. Проверено что блок ведет себя так, как предписывает ТЗ.

in reply to:  9 comment:13 by alx, 5 лет ago

Replying to Art_M:

Не пойму, почему контроллер не может знать состояние датчиков между включением самого контроллера и началом выполнения стартового хода?

Я тоже этого не понимаю. Откуда информация, что не может? Я написал: "...контроллер не может знать, какое состояние у датчиков было до его включения". До, а не после. :)

Так это же уже реализовано, то что он должен делать, т.е. продолжать работать...

Тогда стоит написать: "Действия в авт. режиме: нет."...

comment:14 by Art_M, 5 лет ago

Смущает уточнение "после включения контроллера". Оно бессмысленно, так как контроллер не может знать, какое состояние у датчиков было до его включения, когда он был выключен.

А я понял, ты меня типа приколол "по-программистски"... Саша, как корректор, если нужно, поправит логику :)

Конечно же фразу "Стартовый ход выполнять в соответствии со следующим состоянием датчиков после включения контроллера" следует читать "После включения контроллера стартовый ход выполнять в соответствии со следующим состоянием датчиков:" или "Стартовый ход после включения контроллера выполнять в соответствии со следующим состоянием датчиков:", что в принципе одно и тоже, т.к. до включения контроллера не только определить состояние датчиков, но и стартовый ход сделать невозможно

in reply to:  14 comment:15 by alx, 5 лет ago

Replying to Art_M:

А я понял, ты меня типа приколол "по-программистски"...

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

Саша, как корректор, если нужно, поправит логику :)

Тогда я подожду, когда Саша поправит логику, и буду читать уже поправленную. :)

comment:16 by alx, 5 лет ago

Владелец: установлено в alx
Состояние: newaccepted

in reply to:  description comment:17 by alx, 5 лет ago

Replying to Art_M:

  1. Задать программное ограничивающее условие: запретить движение вверх при сработавшем верхнем датчике при любых условиях.

Это предложение противоречит требованию ТЗ в разделе 4.2 "Автоматический режим":

"Время задержки в ВМТ” < 0 : При движении вверх, после срабатывания ДВ, открывает включенные ЭК, отсчитывает время задержки, затем останавливает включенные НУ.

То есть ТЗ требует, чтобы при отрицательном значении настройки "Время задержки в ВМТ” в течение времени, равного абсолютному значению настройки, движение вверх продолжалось (двигатели продолжали работу) несмотря на сработавший верхний датчик.

in reply to:  description ; comment:18 by alx, 5 лет ago

Replying to Art_M:

двигаемся вниз до изменения состояния датчика ДН=0 => ДН=1.
или в течение максимального времени хода вниз (если состояние не меняется), затем разворот и ход вверх (только если ДВ=0, см.п.1)

А что делать, если ДВ=1?

in reply to:  18 ; comment:19 by Art_M, 5 лет ago

Replying to alx:

Replying to Art_M:

  1. Задать программное ограничивающее условие: запретить движение вверх при сработавшем верхнем датчике при любых условиях.

Это предложение противоречит требованию ТЗ в разделе 4.2 "Автоматический режим":

"Время задержки в ВМТ” < 0 : При движении вверх, после срабатывания ДВ, открывает включенные ЭК, отсчитывает время задержки, затем останавливает включенные НУ.

То есть ТЗ требует, чтобы при отрицательном значении настройки "Время задержки в ВМТ” в течение времени, равного абсолютному значению настройки, движение вверх продолжалось (двигатели продолжали работу) несмотря на сработавший верхний датчик.

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

Replying to alx:

Replying to Art_M:

двигаемся вниз до изменения состояния датчика ДН=0 => ДН=1.
или в течение максимального времени хода вниз (если состояние не меняется), затем разворот и ход вверх (только если ДВ=0, см.п.1)

А что делать, если ДВ=1?

То тут два варианта:

Вариант 1:
Авария 7. Превышение времени сработавшего состояния верхнего датчика
Условие: (в максимального времени хода вниз ДВ=1) и (ДН=0 не изменился на ДН=1 или ДН игнорируется).

Вариант 2:
Авария 11.4 Одновременное срабатывание датчиков на ходе вниз
Условие: (контроллер обнаруживает сработавшее состояние датчиков в процессе хода вниз) и (при сработавшем верхнем датчике срабатывает нижний).

in reply to:  19 ; comment:20 by alx, 5 лет ago

Replying to Art_M:

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

Тогда ждем изменения в ТЗ?

in reply to:  19 ; comment:21 by alx, 5 лет ago

Replying to Art_M:

А что делать, если ДВ=1?

То тут два варианта:

Почему же только два? Я вижу, как минимум, три...

Вариант 1:

Вариант 2:

Вариант 3:
Выполняется движение вниз в течение максимального времени хода вниз. За миллисекунду до истечения этого времени срабатывает верхний датчик. Аварии 7 нет, так как верхний датчик находится в активном состоянии всего миллисекунду. Одновременного срабатывания датчиков также нет, так как нижний датчик не сработал. Двигаться вверх не можем, так как верхний датчик сработал.

in reply to:  20 ; comment:22 by andrei, 5 лет ago

Replying to alx:

Replying to Art_M:
Тогда ждем изменения в ТЗ?

Артем, внеси изменения, Саша в среду ознакомится и примет.

in reply to:  21 ; comment:23 by Art_M, 5 лет ago

Replying to alx:

Replying to Art_M:

А что делать, если ДВ=1?

То тут два варианта:

Почему же только два? Я вижу, как минимум, три...

Вариант 1:

Вариант 2:

Вариант 3:
Выполняется движение вниз в течение максимального времени хода вниз. За миллисекунду до истечения этого времени срабатывает верхний датчик. Аварии 7 нет, так как верхний датчик находится в активном состоянии всего миллисекунду. Одновременного срабатывания датчиков также нет, так как нижний датчик не сработал. Двигаться вверх не можем, так как верхний датчик сработал.

Ну что ж вариант, интересный! Для такого случая следует изменить условие аварии 7 следующим образом!

Авария 7. Превышение времени сработавшего состояния верхнего датчика
Условие: (к концу максимального времени хода вниз оказывается ДВ=1) и (ДН=0 не изменился на ДН=1 или ДН игнорируется).

comment:24 by Art_M, 5 лет ago

Описание: изменено (отличие)

in reply to:  22 ; comment:25 by Art_M, 5 лет ago

Replying to andrei:

Replying to alx:

Replying to Art_M:
Тогда ждем изменения в ТЗ?

Артем, внеси изменения, Саша в среду ознакомится и примет.

Изменение в ТЗ внес, более нет отрицательных задержек в ВМТ и НМТ.

in reply to:  25 comment:26 by andrei, 5 лет ago

Replying to Art_M:

Replying to andrei:

Replying to alx:

Replying to Art_M:
Тогда ждем изменения в ТЗ?

Артем, внеси изменения, Саша в среду ознакомится и примет.

Изменение в ТЗ внес, более нет отрицательных задержек в ВМТ и НМТ.

Я видел, спасибо!

in reply to:  23 comment:27 by Art_M, 5 лет ago

Replying to alx:
Аварии 7 нет, так как верхний датчик находится в активном состоянии всего миллисекунду....

Обратите внимание на строчку в тикете указано, что более не требуется уставка максимального времени сработавшего состояния датчика.

Это время теперь привязано к максимальному времени хода задаваемого соответствующими уставками для каждого направления.

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

comment:28 by Art_M, 5 лет ago

Кому интересно, для чего нужно переделывать алгоритм, вот долгожданное видео, наверное уже не актуально, но все же предлагаю ознакомиться:

  1. https://yadi.sk/i/v-FoZ87DzrJScQ
  2. https://yadi.sk/i/FcgRgisUGxfxlw
  3. https://yadi.sk/i/vuOdzpcUuDlXBw

by Art_M, 5 лет ago

Вложение: messages.rar added

in reply to:  28 comment:29 by alx, 5 лет ago

Replying to Art_M:

Кому интересно, для чего нужно переделывать алгоритм, вот долгожданное видео, наверное уже не актуально, но все же предлагаю ознакомиться:

  1. https://yadi.sk/i/v-FoZ87DzrJScQ

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

Проблема, изложенная в данном видеоролике (если я правильно понял), заключается в том, что ход вверх не прекращается при срабатывании верхнего датчика, если очередной ход вверх занимал много больше времени, чем это было при обычном цикле работы. Судя по любезно приложенному логу, это не так! Вот что произошло на самом деле при срабатывании верхнего датчика:

May  8 14:15:02 smarthdcd[376]: controller.cpp:3300: верхний датчик положения активен
May  8 14:15:02 smarthdcd[376]: controller.cpp:1548: НУ1: останов двигателя (нормальный)
May  8 14:15:02 smarthdcd[376]: controller.cpp:1548: НУ2: останов двигателя (нормальный)
May  8 14:15:02 smarthdcd[376]: controller.cpp:2876: условие разворота
May  8 14:15:02 smarthdcd[376]: controller.cpp:1513: НУ1: запуск двигателя (50.0 Гц)
May  8 14:15:02 smarthdcd[376]: controller.cpp:1513: НУ2: запуск двигателя (50.0 Гц)

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

Теперь по поводу запуска двигателей при выключении верхнего датчика. В исходном состоянии имела место авария превышения времени сработанного состояния датчика, которая не позволяла приводу работать. При переходе датчика в неактивное состояние авария была снята, в результате чего привод был запущен в работу. Запуск начался с хода вниз, но опять-таки наступило условие разворота, в результате чего был выполнен разверот на ход вверх и были включены двигатели. Так как таймаут условия разворота был маленьким, визуально такое поведение контроллера было воспринято как запуск двигателя по переходу датчика в неактивное состояние, хотя на самом деле цепочка событий была более длинной.

Остается вопрос, почему (и правильно ли) таймаут условия разворота оказался таким коротким. Рискну предположить, что настройка "Разворот при долгом ходе вниз" была в значении "По мин. числу качаний", и все возможные меры повышения производительности были исчерпаны. В этом случае таймаут разворота рассчитывается по формуле

Так как время подъема было много большим чем время спуска, знаменатель получается много больше числителя, что дает маленькую величину таймаута в условии разворота. То есть нга первый взгляд, все правильно.

Резюме: после беглого анализа я не усматриваю в поведении контроллера багов, о которых говорится в видеоролике. Я думаю, имела место ошибка в интерпретации наблюдаемого поведения контроллера. Надеюсь, что после моего разъяснения поведение контроллера стало понятнее.

comment:30 by Art_M, 5 лет ago

Replying to alx:

Остается вопрос, почему (и правильно ли) таймаут условия разворота оказался таким коротким. Рискну предположить, что настройка "Разворот при долгом ходе вниз" была в значении "По мин. числу качаний", и все возможные меры повышения производительности были исчерпаны. В этом случае таймаут разворота рассчитывается по формуле

Алексей, не надо рисковать, я об этом сказал в самом начале видео и как можно увидеть из видео я работал только одним датчиком. Ты верно сослался на пункт ТЗ, но сделал неправильный вывод:

Если же ПП уже на максимуме возможностей(включены все разрешенные НУ на максимально разрешенной частоте и т.д.) в таком случае максимальное время хода вниз=(60*Твниз_п)/(N*(Твниз_п+Tвверх)), где Tвверх - время хода вверх в секундах измеренное в текущем цикле, Твниз_п- время хода вниз в секундах измеренное в предыдущем цикле, N- количество качаний(1/мин), при прямом указании количества качаний N= “Количество качаний”, при Интеллектуальном режиме N=”Минимальное количество качаний”.

Теперь применим к нашему случаю: установлено N=4, ход вверх я имитировал насколько точно мог Твверх~5сек, соответственно контроллер правильно определял Твниз~10сек. Т.е. контроллер верно определял каждый раз Твниз=60/4*10/(10+5)=10сек.

А далее в какой то момент я увеличил время вверх до 20сек, то в таком случае контроллер должен был вычислить время следующего спуска Твниз=60/4*10/(10+20)=5сек.

Т.е. согласно ТЗ ожидалось что при срабатывании верхнего датчика контроллер выполнит ход вниз в течение 5сек, (вместо 10 секунд как было ранее), однако контроллер "плевал" на ТЗ и выполнил движение вверх. Ну и где тут моя ошибка в интерпретации наблюдаемого поведения контроллера? Как же тут не узреть баг?

in reply to:  30 comment:31 by alx, 5 лет ago

Replying to Art_M:

Алексей, ты верно сослался на пункт ТЗ, но сделал неправильный вывод:

...

Т.е. согласно ТЗ ожидалось что при срабатывании верхнего датчика контроллер выполнит ход вниз в течение 5сек, (вместо 10 секунд как было ранее), однако контроллер "плевал" на ТЗ и выполнил движение вверх. Ну и где тут моя ошибка в интерпретации наблюдаемого поведения контроллера?

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

Как же тут не узреть баг?

Артем, если ты узрел баг, создай тикет, в котором опиши, что и как ты делал, какой результат ожидал получить, и какой результат получил вместо ожидаемого. Подробней о том, как сделать хороший баг-рипорт, написано здесь.

comment:32 by san, 5 лет ago

Артем, если ты узрел баг, создай тикет

Я помог Артёму, создал #167.

comment:33 by san, 5 лет ago

Согласен с этим предложением Артёма, предлагаю внести его в ТЗ, для автоматического режима.

Задать программное ограничивающее условие: запретить движение вверх при сработавшем верхнем датчике при любых условиях.

comment:34 by san, 5 лет ago

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

Ну или ещё могу предложить более надёжный вариант - поставить второй датчик ДВ, ну или другим образом расширить зону сработанного состояния ДВ, чтобы мы при торможении точно не проехали его.
По другим предложениям, я честно говоря не вижу необходимости таких, как выразился Артём, капитальных изменений, а это довольно большая работа.

in reply to:  34 comment:35 by Art_M, 5 лет ago

Replying to san:

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

Если вчитаться в тикет, то можно заметить, что изменения коснутся:

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

А на самом ли деле эти "капитальные" изменения сложны? Было бы желание и время это сделать, а не устраивать бойкот, и тем более оттягивать этот момент путем истребования с заказчика дополнительного представления алогритмов в виде блок-схем и т.д...

Более чем уверен, что когда сделаю блок-схемы они окажутся нахрен никому не нужны, т.к. :

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

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

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

Классная профессиональная позиция...

comment:36 by san, 5 лет ago

А на самом ли деле эти "капитальные" изменения сложны?

Всё относительно. На совещании я озвучивал подробнее свою оценку.

я не программист и не электронщик, я заказчик

В данном случае ты не заказчик, а один из участников разработки.
Если в твоём видении работы привода присутствует некий алгоритм, ты каким-то образом должен нам его изложить понятным образом. И тут я согласен, что всем было бы проще увидеть его в виде блок-схемы, потому-что то что получилось в ТЗ из твоего текста в моём переводе мне не очень нравится. Другое дело, что уже поздно, и новое изложение алгоритма будет новой разработкой.

Более чем уверен, что когда сделаю блок-схемы они окажутся нахрен никому не нужны

Эти доводы лучше донести директору, его в этом тикете нет.

in reply to:  36 comment:37 by alx, 5 лет ago

Копия: Director added

Replying to san:

Эти доводы лучше донести директору, его в этом тикете нет.

Это нетрудно поправить. :)

comment:38 by san, 5 лет ago

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

Т.к. с сырым текстом Артёма работать не возможно :) забираю тикет себе на уточнения и согласования и, видимо правку тз.

comment:39 by san, 5 лет ago

  1. Внёс в ТЗ изменения в стартовом ходе.

    Если на момент начала движения ДН находился в сработанном состоянии, то ход вниз продолжается до перехода ДН в несработанное состояние или до срабатывания таймера по настройке "Разворот при долгом ходе вниз".
    Если же ДН на момент начала хода вниз был в несработанном состоянии, то ход вниз продолжается до срабатывания ДН или до срабатывания таймера по настройке "Разворот при долгом ходе вниз".
    Далее осуществляется разворот на движение вверх.

comment:40 by san, 5 лет ago

  1. По вопросу "запрета хода вверх при сработанном ДВ" создал #187

comment:41 by san, 5 лет ago

Копия: Director removed
Приоритет: среднийфигня
Note: See TracTickets for help on using tickets.