Opened 5 лет ago

Closed 5 лет ago

#222 closed задача (сделано)

Ошибка в ТЗ в формуле расчета времени хода вниз при развороте по числу качаний

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

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

По мотиву #220

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

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

  1. Нужно изменить формулу на

Твниз=Твниз_пред+1-Nзад*(Твниз_пред+Твверх+ТзадВМТ+ТзадНМТ)/60
if Твниз<1 then Твниз=1

  1. В режиме "работы с клапанами ЭК" Твниз нужно откладывать от включения клапанов. В режиме "без клапанов ЭК" Твниз нужно откладывать от срабатывания верхнего датчика ДВ.

Вложения (3)

messages (8.4 KB ) - added by Art_M 5 лет ago.
messages.0 (200.0 KB ) - added by Art_M 5 лет ago.
smarthdcd (4.0 KB ) - added by Art_M 5 лет ago.

Download all attachments as: .zip

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

comment:1 by Art_M, 5 лет ago

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

comment:2 by Art_M, 5 лет ago

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

comment:3 by andrei, 5 лет ago

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

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

Replying to Art_M:

  1. Нужно изменить формулу на

Твниз=Твниз_пред+1-Nзад*(Твниз_пред+Твверх+ТзадВМТ+ТзадНМТ)/60

Чисто по формальным признакам формула мне кажется странной: из Твниз_пред, имеющего размерность времени, вычитается выражение, у которого значение в скобках имеет размерность времени, которое умножается на число качаний, имеющее размерность обратной времени, и затем делится на 60 секунд, что в результате дает опять размерность, обратную времени (с-1).

Нет ли здесь ошибки?

comment:5 by andrei, 5 лет ago

(Твниз_пред+Твверх+ТзадВМТ+ТзадНМТ)/60=1/Nфакт.
-> Твниз=Твниз_пред+1-Nзад/1/Nфакт.
Если записать в таком виде, то размерность выглядит правильной)).

comment:6 by alx, 5 лет ago

Я представлял себе формулу примерно так:

Сначала я представлял себе, что коррекция просто должна быть равна разности между желаемым и фактическим временем цикла:

Но я не учел, что если увеличить время хода вниз, то увеличится и время хода вверх. Поэтому чтобы получить правильную величину коррекции, ошибку длительности цикла E надо домножить на коэффициент K, зависящий от соотношения скоростей спуска и подъема:

Физический смысл коэффициента К - это отношение величины коррекции времени спуска к общему изменению времени цикла, получаемому за счет такой коррекции. Так, если скорость спуска равна скорости подъема, то насколько мы увеличим время спуска, настолько же увеличится и время подъема, поэтому K должен быть равен 0.5. Если скорость спуска выше скорости подъема, увеличение времени подъема будет больше увеличения времени спуска, поэтому K должен быть меньше 0.5. И наоборот, если скорость спуска ниже скорости подъема, K должен быть больше 0.5:

Так как длина хода вверх равна длине хода вниз, вместо отношения скоростей можно использовать отношение времен движения вверх и вниз:

Подставляя все в исходную формулу, получим вот что:

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

Replying to andrei:

(Твниз_пред+Твверх+ТзадВМТ+ТзадНМТ)/60=1/Nфакт.
-> Твниз=Твниз_пред+1-Nзад/1/Nфакт.
Если записать в таком виде, то размерность выглядит правильной)).

Хорошо. Если даже предположить, что 60 - это безразмерный коэффициент (перевод из минут в секунды), то последнее слагаемое получается безразмерное. Мы добавляем к предыдущему времени спуска безразмерную величину, что тоже не выглядит правильным...

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

Replying to Art_M:

  1. Нужно изменить формулу на

Твниз=Твниз_пред+1-Nзад*(Твниз_пред+Твверх+ТзадВМТ+ТзадНМТ)/60

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

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

comment:9 by alx, 5 лет ago

Исправил формулу для K в comment:6.

comment:10 by Art_M, 5 лет ago

Алексей, погоди, мы как раз и стартовали с
Твниз=Твниз_пред+(Nфакт-Nзад):Nфакт,
т.е. к времени спуска прибавляем безразмерную величину, затем преобразовывали
Твниз=Твниз_пред+Nфакт:Nфакт-Nзад:Nфакт
Твниз=Твниз_пред+1-Nзад:Nфакт,
где Nфакт=60:Тцикла, т.е. Nфакт=60:(Твверх+Твниз+ТзадВМТ+ТзадНМТ),
если не сложно, проверь, вроде тут нет ошибки...

В твоем предложении
E=1:Nзад-1:Nфакт=(Nфакт-Nзад):(Nфакт*Nзад), т.е.
Твниз=Твниз_пред+(Nфакт-Nзад):(Nфакт*Nзад)*К где предлагаешь К=0,5 или рассмотреть как отношение скоростей, т.е. К=Vвверх:Vвниз=Твниз:Твверх, но затем что-то у тебя поменялось и в результате К=Твниз:(Твниз+Твверх) почему?

Вот если смотреть в мою формулу Твниз=Твниз_пред+(Nфакт-Nзад):Nфакт, то я ко времени прибавляю разницу в числах качаний, деленных на фактическое число качаний , т.е. чем больше разница, тем больше шаг, чем разница меньше, тем шаг стремится к 0. Шаг я делю на величину фактического числа качаний, т.е. чем оно выше (ход меньше), тем меньше (аккуратнее) шажок.

В прогонах в экселе мы с Андреем увидели, что приближение числа качаний к заданному происходит достаточно долго около 10 ходов, поэтому я предлагал ускорить процесс, увеличением шажка умножив на 2, т.е. (Nфакт-Nзад):Nфакт * 2. Но позже Андрей меня убедил так не делать, лучше чуть подольше, но поточнее.

Если шаг (Nфакт-Nзад):Nфакт еще делить на Nзад, то мы сделаем подбор еще дольше. А далее, Алексей, еще предлагаешь умножить на отношение скоростей К=Vвверх:Vвниз=Твниз:Твверх, которое может быть, как более единицы , так и менее единицы. Но если рассматривать крайнюю формулу К=Твниз:(Твниз+Твверх), то К всегда будет менее 1, соответственно шажок еще меньше и подбор Твниз для обеспечения нужного числа качаний будет происходить еще дольше...

Так, конечно, тоже можно, но шаг получается микроскопический и это будет, как мне кажется, уже слишком долго...

in reply to:  10 comment:11 by alx, 5 лет ago

Replying to Art_M:

Алексей, погоди, мы как раз и стартовали с
Твниз=Твниз_пред+(Nфакт-Nзад):Nфакт,
т.е. к времени спуска прибавляем безразмерную величину,

Не совсем так. Сейчас в коде (и в ТЗ было до сегодняшнего дня) так (если пренебречь задержками в НМТ и ВМТ):

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

В твоем предложении
Твниз=Твниз_пред+(Nфакт-Nзад):(Nфакт*Nзад)*К где предлагаешь К=0,5 или рассмотреть как отношение скоростей, т.е. К=Vвверх:Vвниз=Твниз:Твверх, но затем что-то у тебя поменялось и в результате К=Твниз:(Твниз+Твверх) почему?

Потому что я обнаружил ошибку в формуле (например если скорости подъема и спуска равны, K у меня получался равным 1, а не 0.5) и исправил ее.

Вот если смотреть в мою формулу Твниз=Твниз_пред+(Nфакт-Nзад):Nфакт, то я ко времени прибавляю разницу в числах качаний, деленных на фактическое число качаний , т.е. чем больше разница, тем больше шаг, чем разница меньше, тем шаг стремится к 0. Шаг я делю на величину фактического числа качаний, т.е. чем оно выше (ход меньше), тем меньше (аккуратнее) шажок.

Это все логично, но в результате к размерной величине (времени) прибавляется безразмерная величина (насколько я понял, относительная ошибка).

Давай проверим, будет ли эта формула работать, на примере. Для простоты допустим, вверх и вниз шток движется с одинаковой скоростью, время спуска составило 50 с, время подъема - тоже 50 с, и задержек в мертвых точках нет. И предположим, что требуемое число качаний 1 мин-1. Очевидно, что требуемое число качаний достигается при времени спуска равном 30 сек.

Фактическое время цикла составило 100 с, и число качаний составило (60 / 100) = 0.6 мин-1.

Новое значение времени спуска по формуле составит:

Твниз=50+(0.6-1):0.6 = 49.333 с.

Это значение далеко от требуемых 30 сек. Попробуем посчитать по предложенной мной формуле:

Твниз = 50 + (60/1 - 100) * (50 / (50 + 50)) = 50 + (-40) * 0.5 = 30 c.

Если шаг (Nфакт-Nзад):Nфакт еще делить на Nзад, то мы сделаем подбор еще дольше. А далее, Алексей, еще предлагаешь умножить на отношение скоростей К=Vвверх:Vвниз=Твниз:Твверх, которое может быть, как более единицы , так и менее единицы. Но если рассматривать крайнюю формулу К=Твниз:(Твниз+Твверх), то К всегда будет менее 1, соответственно шажок еще меньше и подбор Твниз для обеспечения нужного числа качаний будет происходить еще дольше...

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

Так, конечно, тоже можно, но шаг получается микроскопический и это будет, как мне кажется, уже слишком долго...

При микроскопической величине ошибки шаг будет микроскопическим. При больщой ошибке и шаг будет большим. Не понимаю, почему долго. Смотри пример выше - вычисленное новое значение времени спуска 30 секунд сразу дает требуемое число качаний 1 мин-1.

comment:12 by Art_M, 5 лет ago

Алексей, похоже, ты прав! Давай сделаем, как ты говоришь! Не забудем добавить, что
if Твниз<1 then Твниз=1
Как учтем в ВМТ при переключении вверху и НМТ при переключении внизу?

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

Replying to Art_M:

Как учтем в ВМТ при переключении вверху и НМТ при переключении внизу?

  1. При измерении Tup и Tdn должно учитываться реальное движение штока. Это значит, что время спуска определяется от включения ЭК до выключения ЭК, а время подъема - от команды старта НУ до команды выключения НУ.
  2. При старте таймера условия разворота (который выполняется при срабатывании верхнего датчика) к вычисленному значению времени спуска (или к 1 с если вычисленный результат меньше 1 с) необходимо добавить время задержки в ВМТ.

comment:14 by Art_M, 5 лет ago

Алексей, следует учесть, что
Тф=Твниз+Твверх+ТзадВМТ+ТзадНМТ,
всё верно?

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

Replying to Art_M:

Тф=Твниз+Твверх+ТзадВМТ+ТзадНМТ,
всё верно?

Все верно. Tф - это полное время цикла.

by Art_M, 5 лет ago

Вложение: messages added

by Art_M, 5 лет ago

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

by Art_M, 5 лет ago

Вложение: smarthdcd added

comment:16 by Art_M, 5 лет ago

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

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

А должен согласно вставке N=4 подбирать согласно формуле Твниз, чтобы обеспечить заданное N=4

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

Replying to Art_M:

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

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

А должен согласно вставке N=4 подбирать согласно формуле Твниз, чтобы обеспечить заданное N=4

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

comment:18 by alx, 5 лет ago

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

comment:19 by alx, 5 лет ago

In 775/smartHDC:

Исправлена ошибка: при вычислении таймаута условия разворота по числу качаний проверялось
состояние привода на stateUp уже после того как оно менялось на stateDown. В результате
таймаут никогда не вычислялся, а вместо этого устанавливался равным значению настройки
"Максимальное время хода вниз". See #222.
Также при возврате функцией longDownTime значения downTime к нему добавляется время
задержки в ВМТ.

comment:20 by andrei, 5 лет ago

По какой-то причине в 15:00:43 после срабатывания ДВ, условие разворота возникает в ту же секунду, хотя ожидалось как минимум задержка в ВМТ+1 сек.

Jun 25 15:00:22 smarthdcd[380]: controller.cpp:1592: НУ1: запуск двигателя (20.0 Гц)
Jun 25 15:00:22 smarthdcd[380]: controller.cpp:1592: НУ2: запуск двигателя (20.0 Гц)
Jun 25 15:00:33 smarthdcd[380]: controller.cpp:3739: верхний датчик положения активен
Jun 25 15:00:33 smarthdcd[380]: controller.cpp:1629: НУ1: останов двигателя (нормальный)
Jun 25 15:00:33 smarthdcd[380]: controller.cpp:1629: НУ2: останов двигателя (нормальный)
Jun 25 15:00:33 smarthdcd[380]: controller.cpp:3889: верхний датчик положения неактивен
Jun 25 15:00:39 smarthdcd[380]: controller.cpp:3094: условие разворота

Jun 25 15:00:39 smarthdcd[380]: controller.cpp:1592: НУ1: запуск двигателя (20.0 Гц)
Jun 25 15:00:39 smarthdcd[380]: controller.cpp:1592: НУ2: запуск двигателя (20.0 Гц)
Jun 25 15:00:43 smarthdcd[380]: controller.cpp:3739: верхний датчик положения активен
Jun 25 15:00:43 smarthdcd[380]: controller.cpp:1629: НУ1: останов двигателя (нормальный)
Jun 25 15:00:43 smarthdcd[380]: controller.cpp:1629: НУ2: останов двигателя (нормальный)
Jun 25 15:00:43 smarthdcd[380]: controller.cpp:3094: условие разворота

Jun 25 15:00:44 smarthdcd[380]: controller.cpp:3889: верхний датчик положения неактивен
Jun 25 15:02:43 smarthdcd[380]: controller.cpp:3094: условие разворота

Думаю где-то может быть ошибка.

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

Replying to andrei:

Думаю где-то может быть ошибка.

По данному предположению создан тикет #224.

comment:22 by alx, 5 лет ago

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

Думаю, что начиная с r776 новый алгоритм условия разворота можно сичтать реализованным.

Note: See TracTickets for help on using tickets.