Opened 5 лет ago

Closed 5 лет ago

Last modified 5 лет ago

#220 closed улучшение (сделано)

Изменять время хода вниз в зависимости от времени задержки в ВМТ.

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

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

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

Артем предлагает вот это:
Твниз := 60/ ЧК * Твнизпред / (Твнизпред+Твверх);
if Твниз < ТзадВМТ+1
then Tвниз:=ТзадВМТ+1

Вложения (7)

messages 13_22 (190.6 KB ) - added by andrei 5 лет ago.
smarthdcd (4.0 KB ) - added by andrei 5 лет ago.
events (103.9 KB ) - added by andrei 5 лет ago.
messages 14_30 (109.2 KB ) - added by andrei 5 лет ago.
smarthdcd 14_30 (4.0 KB ) - added by andrei 5 лет ago.
messages 15_38 (31.2 KB ) - added by andrei 5 лет ago.
smarthdcd 15_38 (4.0 KB ) - added by andrei 5 лет ago.

Download all attachments as: .zip

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

comment:1 by andrei, 5 лет ago

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

comment:2 by andrei, 5 лет ago

Первое - форумала из тз , только в тз вместо чк - N....
А в условии ТзадВМТ - уставка задержки в ВМТ

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

Replying to andrei:

Артем предлагает вот это:
Твниз := 60/ ЧК * Твнизпред / (Твнизпред+Твверх);

Это будет противоречить требованию ТЗ. Согласно ТЗ, таймаут хода вниз должен определяться другой формулой.

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

Replying to alx:

Это будет противоречить требованию ТЗ. Согласно ТЗ, таймаут хода вниз должен определяться другой формулой.

А, да, верно. Там, видимо, раньше была другая формула, а потом ее поменяли на эту.

comment:5 by andrei, 5 лет ago

Комментарии от Арртема (мнение редакции может не совпадать с мнением автора):

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

Если при развороте по чк вычисленное максимальное время хода вниз равно времени задержки в ВМТ, то привод после задержки в ВМТ движется вверх.
Артем предлагает вот это:
Твниз := 60/ ЧК * Твнизпред / (Твнизпред+Твверх);
if Твниз < ТзадВМТ+1
then Tвниз:=ТзадВМТ+1

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

comment:6 by andrei, 5 лет ago

Владелец: установлено в alx
Приоритет: среднийСрочно
Состояние: newassigned
Этап разработки: 2-я очередь1-я очередь

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

Replying to andrei:

Артем предлагает вот это:
Твниз := 60/ ЧК * Твнизпред / (Твнизпред+Твверх);
if Твниз < ТзадВМТ+1
then Tвниз:=ТзадВМТ+1

В тексте ТЗ в разделе "Условие разворота" имеется такое требование:

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

Таким образом, в случае (Tвниз < ТзадВМТ+1) предложение Артема противоречит требованию ТЗ: ТЗ требует, чтобы Tвниз было вычислено по приведенной формуле, а Артем предлагает (ТзадВМТ+1). Таким образом, предложение Артема нельзя реализовать без изменения ТЗ.

С другой стороны, в разделе "Условие разворота" ТЗ смешаны понятия "время хода вниз" и "время движения вниз", и я не вижу точного указания на то, от какого момента отсчитывается это время. Поэтому напрашивается другой вариант решения проблемы - отсчитывать таймаут условия разворота не от момента срабатывания верхнего датчика как сейчас, а от момента начала движения вниз, то есть от момента окончания задержки в ВМТ, когда включаются ЭК. Этот вариант по-моему требованиям ТЗ не противоречит, поэтому для его реализации изменения в ТЗ вносить не придется.

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

comment:8 by andrei, 5 лет ago

Можно сделать начало от момента начала движения, но тогда нужно установить нижнее ограничение - время движения вниз не может быть меньше 1 секунды.

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

Replying to andrei:

время движения вниз не может быть меньше 1 секунды.

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

Ну если в любом случае требуется вносить изменения в ТЗ, то проще сделать так, как предлагает Артем.

comment:10 by san, 5 лет ago

Внёс в ТЗ изменения

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

comment:11 by san, 5 лет ago

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

Авария 25. Аварийный температурный режим
...
Действия в авт. режиме:
...

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

...

comment:12 by alx, 5 лет ago

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

In 771/smartHDC:

Изменен алгоритм вычисления максимального времени хода вниз в соответствии с новыми изменениями в ТЗ.
Closes #220.

comment:13 by alx, 5 лет ago

In 772/smartHDC:

Изменен алгоритм коррекции задержки в верхней мертвой точке при наличии аварии 25
в соответствии с новыми изменениями в ТЗ (теперь задержку можно только увеличивать).
See #220.

by andrei, 5 лет ago

Вложение: messages 13_22 added

by andrei, 5 лет ago

Вложение: smarthdcd added

comment:14 by andrei, 5 лет ago

В логе в 13:22 Артем экспериментирует с условием разворота.
Вычисленное теоретически время движения вниз = 10 сек (это видимо с задержкой в ВМТ?), а привод едет вниз меньше.
Кажется это неправильно, давайте разбираться.

by andrei, 5 лет ago

Вложение: events added

comment:15 by alx, 5 лет ago

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

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

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

comment:16 by andrei, 5 лет ago

Могу предложить еще один лог с более длительными временами эксперимента, приложеть?
Вдруг какая-то информация полезная добавится.

comment:17 by san, 5 лет ago

6 секунд

Это магическое число очень похоже на 5+1 = delayTDP + 1.0
(конфиг Андрей приложил выше)

by andrei, 5 лет ago

Вложение: messages 14_30 added

by andrei, 5 лет ago

Вложение: smarthdcd 14_30 added

comment:18 by andrei, 5 лет ago

В последнем логе время больше чем магическое +1.
Время экспериментов 14:30.

by andrei, 5 лет ago

Вложение: messages 15_38 added

by andrei, 5 лет ago

Вложение: smarthdcd 15_38 added

comment:19 by alx, 5 лет ago

Согласно последнему логу, рассчитанное по формуле время получается меньше 6 секунд: 5.7, 1.7 и т.д....

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

Решение: сделано
Состояние: reopenedclosed

Replying to andrei:

В логе в 13:22 Артем экспериментирует с условием разворота.
Вычисленное теоретически время движения вниз = 10 сек (это видимо с задержкой в ВМТ?), а привод едет вниз меньше.
Кажется это неправильно, давайте разбираться.

Разобрался. Вот что я вижу в приложенном логе в указанное время:

  • 13:22:01 Сработал верхний датчик. Начали останов двигателя. Запустили таймаут ВМТ (5 сек.).
  • 13:22:06 Истек таймаут ВМТ. Включили ЭК. Начался отсчет времени спуска.
  • 13:22:07 Наступило условие разворота. Закончили спуск, выключили ЭК, включили двигатель. Закончился отсчет времени спуска. Начался отсчет времени подъема.
  • 13:22:10 Сработал верхний датчик. Начали останов двигателя. Запустили таймаут ВМТ (5 сек.).
  • 13:22:15 Истек таймаут ВМТ. Включили ЭК. Закончился отсчет времени подъема.

Далее циклы повторяются без существенных изменений. Теперь давайте посчитаем времена подъена и спуска и вычислим таймаут условия разворота.

Спуск начался в 13:22:06 и закончился в 13:22:07. Время спуска составило 1 сек.
Подъем начался в 13:22:07 и закончился в 13:22:15. Время подъема составило 8 сек.
Таймаут условия разворота составил: 60 * Tвниз / (N * (Tвверх + Tвниз)) = 60 * 1 / (4 * (1 + 8)) = 1.66 сек.

Таким образом, указанное теоретическое значение (10 сек.) было вычислено неверно. Верное значние 1.7 сек., что совпадает с значением в повторном эксперименте с добавленным отладочным логом (см. лог в 15:38:37, 15:38:54 и т.д.).

Так как вычисленное значение таймаута (1.7 сек.) меньше значения (TзадержкиВМТ + 1) = (5 + 1) = 6 сек., в условии разворота использовалось значение 6 сек., что соответствует условию в описании этого тикета и требованию ТЗ.

Вывод - ошибки в работе контроллера нет.

Version 0, edited 5 лет ago by alx (следующий)

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

Replying to alx:
Вот тут ошибка в твоем расчете:

Подъем начался в 13:22:07 и закончился в 13:22:15. Время подъема составило 8 сек.

Обрати внимание на

13:22:07 Наступило условие разворота. Закончили спуск, выключили ЭК, включили двигатель. Закончился отсчет времени спуска. Начался отсчет времени подъема.
13:22:10 Сработал верхний датчик.

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

Ошибка заключается в том, что формула в ТЗ не учитывает задержку в верхней точке. Иными словами она действует пока задержка в ВМТ=0, в противном случае она дает ошибку, следствия которой мы и наблюдаем.

Теперь о решении!

В настоящий момент, действительно, есть ошибка в определении точки отсчета времени хода вниз. На динамограмме отображается время хода вниз как сумма расчетного времени и времени задержки в ВМТ. А также замечено, что до внесения if Твниз < ТзадВМТ+1 then Tвниз:=ТзадВМТ+1 условие разворота могло наступить раньше чем закончится задержка в ВМТ. И было бы правильным, как заметил Алексей, считать его с момента включения клапанов, но такое решение, наверное, будет слишком долгореализуемым. Поэтому предлагаю два варианта решения, быстрый и правильный:


Вариант 1 - быстрый, хоть и чуть неправильный (но пока закроем на это глаза):

  1. Исправить формулу на

Твниз=(60 * Tвниз_пред / (N * Тцикла)) + TзадВМТ(+ТзадНМТ)
Алексей, вот тут нужно уточнить, задержка в нижней точке, как и задержка в верхней точке входит во время вниз или нет? Если входит, то нужно прибавить и ее тоже.

  1. Все остальное оставляем как есть (т.е. условие так и остается "if Твниз < ТзадВМТ+1 then Tвниз:=ТзадВМТ+1").

Вариант 2 - правильный

  1. Исправить формулу на:

Твниз=60 * Tвниз_пред / (N * Тцикла)

  1. Сделать Твниз отсчитываемым от включения ЭК, а не от срабатывания в датчика верхнего положения.
  2. Изменить условие из имеющегося на

if Твниз < 1 then Tвниз:=1


Я не знаю насколько сложно сейчас в сжатые сроки сделать правильно по варианту 2, но сейчас для исключения имеющейся ошибки меня устраивает наибыстрейший вариант 1.

Теперь про Тцикла=Твверх+Твнизпред+ТзадВМТ(+ТзадНМТ).
Алексей, хотелось бы уточнить, действует ли в настоящий момент задержка в НМТ при развороте по числу качаний? Если нет, то в формуле ТзадНМТ не нужно учитывать.

comment:22 by Art_M, 5 лет ago

По мотиву этого тикета был создан тикет #222

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

Replying to Art_M:

Обрати внимание на

13:22:07 Наступило условие разворота. Закончили спуск, выключили ЭК, включили двигатель. Закончился отсчет времени спуска. Начался отсчет времени подъема.
13:22:10 Сработал верхний датчик.

Соответственно подъем длится не 8, а 3 секунды.

А, да. Ты прав, здесь я ошибся. Окончанием времени хода вверх считается срабатывание верхнего датчика.

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

Пересчитал. Вычисленное по формуле время получается не 1.7 сек., а 3.75 сек. Однако 3.75 сек. все равно меньше чем 6 сек. (время задержки в ВМТ плюс один), поэтому контроллер устанавливает таймаут условия разворота в 6 сек.

Теперь про Тцикла=Твверх+Твнизпред+ТзадВМТ(+ТзадНМТ).
Алексей, хотелось бы уточнить, действует ли в настоящий момент задержка в НМТ при развороте по числу качаний?

Задержка в НМТ сейчас действует всегда.

Note: See TracTickets for help on using tickets.