#208 closed баг (invalid)
При развороте по числу качаний происходит систематическое включение/отключение НУ находящейся в режиме "авто".
Сообщил: | Art_M | Владелец: | |
---|---|---|---|
Приоритет: | средний | Этап разработки: | 2-я очередь |
Ключевые слова: | Копия: | andrei, san, alx |
Описание
При работе в режиме разворота по числу качаний и недостижению нижнего датчика привод систематически подключает/отключает НУ находящуюся в режиме "авто".
Ожидалось, что привод включит все НУ для максимального быстрого перемещения вверх и достижения верхнего датчика, с целью обеспечения максимального времени на спуск, который так же должен производиться на двух клапанах и в этом режиме будет продолжать работу...
Лог тот же, что и тикете #208
вот пример лога:
Jun 7 14:10:02 smarthdcd[380]: Настройка 'selectedValve2' изменена: 'не выбран' --> 'выбран'
Jun 7 14:10:02 smarthdcd[380]: Настройка 'freqDrive1' изменена: 1.00 --> 15.00
Jun 7 14:10:02 smarthdcd[380]: Настройка 'freqDrive2' изменена: 1.00 --> 15.00
Jun 7 14:10:02 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:10:02 smarthdcd[380]: Сброс счетчика АПВ
Jun 7 14:10:02 smarthdcd[380]: Сброс счетчика АПВ НУ1
Jun 7 14:10:02 smarthdcd[380]: Сброс счетчика АПВ НУ2
Jun 7 14:10:02 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (15.0 Гц)
Jun 7 14:10:07 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:10:07 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:10:07 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 09:10:27 ntpd[372]: Soliciting pool server 2001:67c:1560:8003::c8
Jun 7 14:10:57 smarthdcd[380]: smbus.cpp:542: /dev/ttyS2: request timeout
Jun 7 14:11:07 smarthdcd[380]: Настройка 'selectedDrive2' изменена: 'Не выбран' --> 'Выбран'
Jun 7 14:11:07 smarthdcd[380]: Авария привода: 17.1 Снижение длины хода по числу качаний
Jun 7 14:11:07 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:11:07 smarthdcd[380]: Сброс счетчика АПВ
Jun 7 14:11:07 smarthdcd[380]: Сброс счетчика АПВ НУ1
Jun 7 14:11:07 smarthdcd[380]: Сброс счетчика АПВ НУ2
Jun 7 14:11:07 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (15.0 Гц)
Jun 7 14:11:07 smarthdcd[380]: controller.cpp:1559: НУ2: запуск двигателя (15.0 Гц)
Jun 7 14:11:11 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:11:11 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:11:11 smarthdcd[380]: controller.cpp:1596: НУ2: останов двигателя (нормальный)
Jun 7 14:11:12 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 14:11:25 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:11:25 smarthdcd[380]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
Jun 7 14:11:25 smarthdcd[380]: Сброс счетчика АПВ
Jun 7 14:11:25 smarthdcd[380]: Сброс счетчика АПВ НУ1
Jun 7 14:11:25 smarthdcd[380]: Сброс счетчика АПВ НУ2
Jun 7 14:11:25 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (15.0 Гц)
Jun 7 14:11:25 smarthdcd[380]: controller.cpp:1559: НУ2: запуск двигателя (15.0 Гц)
Jun 7 09:11:30 ntpd[372]: Soliciting pool server 2001:67c:1560:8003::c7
Jun 7 14:11:31 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:11:31 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:11:31 smarthdcd[380]: controller.cpp:1596: НУ2: останов двигателя (нормальный)
Jun 7 14:11:31 smarthdcd[380]: Авария привода: 17.1 Снижение длины хода по числу качаний
Jun 7 14:11:31 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 14:11:41 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:11:41 smarthdcd[380]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
Jun 7 14:11:41 smarthdcd[380]: Сброс счетчика АПВ
Jun 7 14:11:41 smarthdcd[380]: Сброс счетчика АПВ НУ1
Jun 7 14:11:41 smarthdcd[380]: Сброс счетчика АПВ НУ2
Jun 7 14:11:41 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (15.0 Гц)
Jun 7 14:11:41 smarthdcd[380]: controller.cpp:1559: НУ2: запуск двигателя (15.0 Гц)
Jun 7 14:11:46 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:11:46 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:11:46 smarthdcd[380]: controller.cpp:1596: НУ2: останов двигателя (нормальный)
Jun 7 14:11:46 smarthdcd[380]: Авария привода: 17.1 Снижение длины хода по числу качаний
Jun 7 14:11:46 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 14:11:55 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:11:55 smarthdcd[380]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
Jun 7 14:11:55 smarthdcd[380]: Сброс счетчика АПВ
Jun 7 14:11:55 smarthdcd[380]: Сброс счетчика АПВ НУ1
Jun 7 14:11:55 smarthdcd[380]: Сброс счетчика АПВ НУ2
Jun 7 14:11:55 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (15.0 Гц)
Jun 7 14:11:55 smarthdcd[380]: controller.cpp:1559: НУ2: запуск двигателя (15.0 Гц)
Jun 7 14:11:59 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:11:59 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:11:59 smarthdcd[380]: controller.cpp:1596: НУ2: останов двигателя (нормальный)
Jun 7 14:11:59 smarthdcd[380]: Авария привода: 17.1 Снижение длины хода по числу качаний
Jun 7 14:12:00 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 14:12:09 smarthdcd[380]: Настройка 'selectedDrive2' изменена: 'Выбран' --> 'Не выбран'
Jun 7 14:12:09 smarthdcd[380]: Настройка 'freqDrive1' изменена: 15.00 --> 1.00
Jun 7 14:12:09 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:12:09 smarthdcd[380]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
Jun 7 14:12:09 smarthdcd[380]: Сброс счетчика АПВ
Jun 7 14:12:09 smarthdcd[380]: Сброс счетчика АПВ НУ1
Jun 7 14:12:09 smarthdcd[380]: Сброс счетчика АПВ НУ2
Jun 7 14:12:09 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (1.0 Гц)
Jun 7 14:12:14 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:12:14 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:12:15 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 14:12:29 smarthdcd[380]: smbus.cpp:542: /dev/ttyS2: request timeout
Jun 7 09:12:40 ntpd[372]: Soliciting pool server 2001:67c:1560:8003::c8
Jun 7 14:13:14 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:13:14 smarthdcd[380]: Сброс счетчика АПВ
Jun 7 14:13:14 smarthdcd[380]: Сброс счетчика АПВ НУ1
Jun 7 14:13:14 smarthdcd[380]: Сброс счетчика АПВ НУ2
Jun 7 14:13:14 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (1.0 Гц)
Jun 7 14:13:20 smarthdcd[380]: smbus.cpp:542: /dev/ttyS2: request timeout
Jun 7 14:13:21 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:13:21 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:13:21 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 09:13:45 ntpd[372]: Soliciting pool server 2001:67c:1560:8003::c7
Jun 7 14:13:50 smarthdcd[380]: smbus.cpp:542: /dev/ttyS2: request timeout
Jun 7 14:14:20 smarthdcd[380]: smbus.cpp:542: /dev/ttyS2: request timeout
Jun 7 14:14:21 smarthdcd[380]: Настройка 'selectedDrive2' изменена: 'Не выбран' --> 'Выбран'
Вложения (1)
История изменений (12)
by , 5 лет ago
Вложение: | 047-A02100.rar added |
---|
следующие: 3 4 comment:2 by , 5 лет ago
Алексей, загвоздка в том, что это число качаний 4.3 было получено путем уменьшения длины хода, в условиях когда производительности привода недостаточно для обеспечения заданного числа качаний и полной длины хода.
Логика на которую я рассчитывал в ТЗ и ожидал от контроллера следующая:
Допустим привод работал нормально, т.е. успевал выполнять 4 качания доходя от датчика до датчика. Но в какой то момент
вариант 1: скважина замедляет спуск постепенно, в таком случае привод постепенно наращивает производительность, что бы успеть выполнить цикл сходив от датчика до датчика. С этим вроде порядок.
вариант 2: скважина начала мгновенно подклинивать на спуске. Контроллер совершает несколько ходов на сохраненных пп, разворачиваясь по условию максимального времени хода вниз не достигнув нижнего датчика. Затем увеличивает производительность подключает второй клапан, продолжая ходить с разворотом по условию максимального времени хода вниз. Затем повторно увеличивает производительность подключает второй двигатель, и так же совершает несколько ходов с разворотом по условию максимального времени хода вниз. А уже затем отображает 17.1 и начинает выполнять разворот по числу качаний, тут тоже все хорошо - привод нормально повышает производительность.
А далее привод должен продолжать удерживать высокую производительность, пока не начнет доходить до нижнего датчика.
Фактически же получается, что привод уменьшив себе ход (подгонка времени спуска, а значит и самого цикла, ведется же итерационно), сделал цикл быстрее и поэтому принял решение снизить производительность или выключить мотор. Хотя производительности и так недостаточно, чтобы привод успевал доходить от датчика к датчику.
Вот кстати тоже примечательный лог:
Jun 13 11:06:27 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:06:27 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (50.0 Гц)
Jun 13 11:06:29 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:06:29 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:06:29 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:06:30 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:06:37 smarthdcd[376]: controller.cpp:3025: условие разворота
Jun 13 11:06:37 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:06:37 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:06:37 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:06:37 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:06:37 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (50.0 Гц)
Jun 13 11:06:39 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:06:39 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:06:39 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:06:39 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:06:47 smarthdcd[376]: controller.cpp:3025: условие разворота
Jun 13 11:06:47 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:06:47 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:06:47 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:06:47 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:06:47 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (50.0 Гц)
Jun 13 11:06:48 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:06:48 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:06:48 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:06:49 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:06:57 smarthdcd[376]: Настройка 'freqDrive1' изменена: 50.00 --> 49.00
Jun 13 11:06:57 smarthdcd[376]: Настройка 'freqDrive2' изменена: 50.00 --> 49.00
Jun 13 11:06:57 smarthdcd[376]: controller.cpp:3025: условие разворота
Jun 13 11:06:57 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:06:57 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:06:57 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:06:57 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (49.0 Гц)
Jun 13 11:06:57 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (49.0 Гц)
Jun 13 11:06:58 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:06:58 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:06:58 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:06:59 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:07:10 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:07:10 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:07:30 smarthdcd[376]: controller.cpp:4228: нижний датчик положения активен
Jun 13 11:07:30 smarthdcd[376]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
Jun 13 11:07:30 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:07:30 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:07:30 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:07:30 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (49.0 Гц)
Jun 13 11:07:30 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (49.0 Гц)
Jun 13 11:07:31 smarthdcd[376]: controller.cpp:4308: нижний датчик положения неактивен
Jun 13 11:07:40 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:07:40 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:07:40 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:07:40 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:07:50 smarthdcd[376]: controller.cpp:4228: нижний датчик положения активен
Jun 13 11:07:50 smarthdcd[376]: Настройка 'freqDrive1' изменена: 49.00 --> 50.00
Jun 13 11:07:50 smarthdcd[376]: Настройка 'freqDrive2' изменена: 49.00 --> 50.00
Jun 13 11:07:50 smarthdcd[376]: Авария привода: 17.1 Снижение длины хода по числу качаний
Jun 13 11:07:50 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:07:50 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:07:50 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:07:50 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:07:50 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (50.0 Гц)
Jun 13 11:07:51 smarthdcd[376]: controller.cpp:4308: нижний датчик положения неактивен
Jun 13 11:07:55 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:07:55 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:07:55 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:07:56 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:08:02 smarthdcd[376]: controller.cpp:3025: условие разворота
Jun 13 11:08:02 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:08:02 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:08:02 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:08:02 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:08:02 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (50.0 Гц)
Jun 13 11:08:05 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:08:05 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:08:05 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:08:05 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:08:12 smarthdcd[376]: controller.cpp:3025: условие разворота
Jun 13 11:08:12 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:08:12 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:08:12 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:08:12 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:08:12 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (50.0 Гц)
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:08:22 smarthdcd[376]: Настройка 'selectedDrive2' изменена: 'Выбран' --> 'Не выбран'
Jun 13 11:08:22 smarthdcd[376]: controller.cpp:3025: условие разворота
Jun 13 11:08:22 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:08:22 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:08:22 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:08:22 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:08:24 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:08:24 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:08:25 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:08:46 smarthdcd[376]: controller.cpp:4228: нижний датчик положения активен
Jun 13 11:08:46 smarthdcd[376]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
Jun 13 11:08:46 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:08:46 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:08:46 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:08:46 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:08:46 smarthdcd[376]: controller.cpp:4308: нижний датчик положения неактивен
Jun 13 11:08:54 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:08:54 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:08:55 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:09:04 smarthdcd[376]: controller.cpp:4228: нижний датчик положения активен
Jun 13 11:09:04 smarthdcd[376]: Настройка 'selectedDrive2' изменена: 'Не выбран' --> 'Выбран'
Jun 13 11:09:04 smarthdcd[376]: Авария привода: 17.1 Снижение длины хода по числу качаний
Jun 13 11:09:04 smarthdcd[376]: Настройка 'freqDrive1' изменена: 50.00 --> 22.00
Jun 13 11:09:04 smarthdcd[376]: Настройка 'freqDrive2' изменена: 50.00 --> 22.00
Jun 13 11:09:04 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:09:04 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:09:04 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:09:04 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (22.0 Гц)
Jun 13 11:09:04 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (22.0 Гц)
Jun 13 11:09:05 smarthdcd[376]: controller.cpp:4308: нижний датчик положения неактивен
Jun 13 11:09:10 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:09:10 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:09:10 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:09:10 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:09:35 smarthdcd[376]: НУ1: переключатель режима работы: руч
Jun 13 11:09:35 smarthdcd[376]: controller.cpp:5623: остановка привода
Смотрите:
06:27 начало хода вверх на двух НУ 50Гц
подъем 2сек
06:29 верхний датчик, спуск на обоих ЭК
спуск 8сек
06:37 условие разворота по ЧК, ход вверх на двух НУ 50Гц
подъем 2сек
06:39 верхний датчик, спуск на обоих ЭК
спуск 8сек
06:47 условие разворота по ЧК, ход вверх на двух НУ 50Гц
подъем 1сек (намеренное занижение времени хода вверх)
06:48 верхний датчик, спуск на обоих ЭК
спуск 9сек
06:57 условие разворота по ЧК, ход вверх на двух НУ 50=>49Гц
подъем 1сек
06:58 верхний датчик, спуск на обоих ЭК
в этом месте контроллер решил, что ему нужно использовать разворот по максимальному времени хода, несмотря на наличие 17.1. Поэтому подождав 30 секунд я сработал нижним датчиком,естественно, авария 17.1 долгого хода вниз снялась. Вопрос почему контроллер себя так повел?
07:30 нижний датчик, ход вверх на двух НУ 49Гц
подъем 10 секунд
07:40 верхний датчик, спуск на обоих ЭК
спуск длительностью 10секунд, т.к. цикл получился 20сек, в завершении снова авария 17.1
07:50 нижний датчик, ход вверх на двух НУ 49=>50Гц
подъем 5сек
07:55 верхний датчик, спуск на обоих ЭК
спуск 7сек
08:02 условие разворота по ЧК, ход вверх на двух НУ 50Гц
подъем 3сек
08:05 верхний датчик, спуск на обоих ЭК
спуск 7сек
08:12 условие разворота по ЧК, ход вверх на двух НУ 50Гц
подъем 3сек
08:15 верхний датчик, спуск на обоих ЭК
спуск 7сек
08:22 условие разворота по ЧК, ход вверх на ОДНОЙ НУ 50Гц Вот здесь контроллер совсем плохо себя повел, для чего нужно было отключать насосную установку? Если он пусть и ошибочно принял решение снизить производительность, то почему не начал со снижения частоты
подъем 2сек
08:24 верхний датчик, спуск на обоих ЭК
Тут контроллер забил болтяру, решил, что более не нужно соблюдать время цикла, спуск длится более 20сек, пока я не сработал нижним датчиком. Естественно авария 17.1 опять же снялась
08:46 нижний датчик, ход вверх на снова на ОДНОЙ НУ 50Гц.
подъем 8сек
08:54 верхний датчик, спуск на обоих ЭК
спуск 10 сек, срабатываю нижним датчиком, т.к. понял, что контроллер опять собрался уходить на максимальное время спуска
09:04 нижний датчик, возврат аварии 17.1, снова подключение второй насосной установки, ход вверх на двух НУ на 22Гц
Очевидно, что работа крайне не стабильная.
Все это проявляется, когда сокращаешь время цикла срабатываением верхним датчиком ранее положенного, т.е. при установленном ЧК=6, срабатываешь верхним датчиком так, что бы цикл получился 9сек. Если наоборот срабатывать верхним датчиком дольше времени цикла, то никаких багов не наблюдается, привод работает на двух НУ и ЭК на максимуме соблюдая время циклов.
Ребята, давайте, разбираться:
- Почему в этих условиях контроллер, вместо снижения частоты на обоих насосных установках, предпочитает отключение одной из насосных установок?
- Почему контроллер при наличии 17.1 периодически, вместо разворота по числу качаний, предпочитает воспользоваться максимальным временем спуска?
По первому пункту, чтобы привод в этих условиях не менял кол-во насосных установок предлагаю запретить снижать производительность, пока будет висеть 17.1 и не будет достигнут!
Ребята, хочу выслушать ваши размышления на эту тему?
следующий: 5 comment:3 by , 5 лет ago
Replying to Art_M:
Очевидно, что работа крайне не стабильная.
Ребята, давайте, разбираться:
Ребята, хочу выслушать ваши размышления на эту тему?
Артем, мои размышления на эту тему следующие. Создавай, пожалуйста, один тикет на одну проблему. Не надо описывать новую проблему в комментарии к уже закрытому тикету, как ты это делаешь сейчас. Это приводит только к тому, что потом эту проблему трудно будет находить и отслеживать. И мы тогда будем разбираться с проблемой - анализировать поведение станции и делать вывод о том, действительно ли в описанном случае имеет место ошибка или нет, и если да - принимать меры по ее устранению.
По описаннным событиям создал два новых тикета - #209 и #210.
comment:4 by , 5 лет ago
Replying to Art_M:
А далее привод должен продолжать удерживать высокую производительность, пока не начнет доходить до нижнего датчика.
Фактически же получается, что привод уменьшив себе ход (подгонка времени спуска, а значит и самого цикла, ведется же итерационно), сделал цикл быстрее и поэтому принял решение снизить производительность или выключить мотор. Хотя производительности и так недостаточно, чтобы привод успевал доходить от датчика к датчику.
В тексте ТЗ сказано следующее:
Если число качаний выше требуемого, то для обеспечения требуемого числа качаний осуществляется ряд действий по снижению производительности
В данном случае число качаний было выше заданного. Следовательно, контроллер должен был осуществить действия по снижению производительности. Если бы он этого не сделал, то нарушил бы требование ТЗ.
следующие: 7 9 comment:5 by , 5 лет ago
Replying to alx:
Replying to Art_M:
Очевидно, что работа крайне не стабильная.
Ребята, давайте, разбираться:
Ребята, хочу выслушать ваши размышления на эту тему?
Артем, мои размышления на эту тему следующие. Создавай, пожалуйста, один тикет на одну проблему. Не надо описывать новую проблему в комментарии к уже закрытому тикету, как ты это делаешь сейчас. Это приводит только к тому, что потом эту проблему трудно будет находить и отслеживать. И мы тогда будем разбираться с проблемой - анализировать поведение станции и делать вывод о том, действительно ли в описанном случае имеет место ошибка или нет, и если да - принимать меры по ее устранению.
По описаннным событиям создал два новых тикета - #209 и #210.
Ну так давай создавать по 100500 тикетов на одну тему и тут же их закрывать! Вот именно, что в комментарии необоснованно закрытого тикета та же самая проблема, изложенная в заголовке, зачем еще одну такую же тему создавать. Я более чем уверен, что создав еще один тикет, Вы бы спросили, а какого хрена я пложу однотипные тикеты. Я только создам, а Вы его снова сразу закроете инвалидом. От этого же сразу станет понятнее, где и кто в каком тикете что-то дельное написал, так ведь? Это всё для чего? Чтоб специалист АДС смог отчитаться: "хух сегодня выполнили невероятный план, побили вчерашний рекорд, закрыв миллион тикетов!", для этого чтоль? %) Я, конечно, не хочу в чужой монастырь со своим уставом... Но мне было бы гораздо удобнее решать проблемы по правилам форумов, где размножение тем является признаком "плохого тона".
проблемный фрагмент заглавного тикета
Jun 7 14:11:55 smarthdcd[380]: controller.cpp:1559: НУ1: запуск двигателя (15.0 Гц)
Jun 7 14:11:55 smarthdcd[380]: controller.cpp:1559: НУ2: запуск двигателя (15.0 Гц)
Jun 7 14:11:59 smarthdcd[380]: controller.cpp:3602: верхний датчик положения активен
Jun 7 14:11:59 smarthdcd[380]: controller.cpp:1596: НУ1: останов двигателя (нормальный)
Jun 7 14:11:59 smarthdcd[380]: controller.cpp:1596: НУ2: останов двигателя (нормальный)
Jun 7 14:11:59 smarthdcd[380]: Авария привода: 17.1 Снижение длины хода по числу качаний
Jun 7 14:12:00 smarthdcd[380]: controller.cpp:3735: верхний датчик положения неактивен
Jun 7 14:12:09 smarthdcd[380]: Настройка 'selectedDrive2' изменена: 'Выбран' --> 'Не выбран'
Jun 7 14:12:09 smarthdcd[380]: Настройка 'freqDrive1' изменена: 15.00 --> 1.00
Jun 7 14:12:09 smarthdcd[380]: controller.cpp:3015: условие разворота
Jun 7 14:12:09 smarthdcd[380]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
проблемный фрагмент комментария
Jun 13 11:08:12 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:08:12 smarthdcd[376]: controller.cpp:1565: НУ2: запуск двигателя (50.0 Гц)
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:1602: НУ2: останов двигателя (нормальный)
Jun 13 11:08:15 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:08:22 smarthdcd[376]: Настройка 'selectedDrive2' изменена: 'Выбран' --> 'Не выбран'
Jun 13 11:08:22 smarthdcd[376]: controller.cpp:3025: условие разворота
Jun 13 11:08:22 smarthdcd[376]: Сброс счетчика АПВ
Jun 13 11:08:22 smarthdcd[376]: Сброс счетчика АПВ НУ1
Jun 13 11:08:22 smarthdcd[376]: Сброс счетчика АПВ НУ2
Jun 13 11:08:22 smarthdcd[376]: controller.cpp:1565: НУ1: запуск двигателя (50.0 Гц)
Jun 13 11:08:24 smarthdcd[376]: controller.cpp:3620: верхний датчик положения активен
Jun 13 11:08:24 smarthdcd[376]: controller.cpp:1602: НУ1: останов двигателя (нормальный)
Jun 13 11:08:25 smarthdcd[376]: controller.cpp:3753: верхний датчик положения неактивен
Jun 13 11:08:46 smarthdcd[376]: controller.cpp:4228: нижний датчик положения активен
Jun 13 11:08:46 smarthdcd[376]: Снятие аварии: 17.1 Снижение длины хода по числу качаний
Алексей, ты продолжаешь быть уверенным, что эти фрагменты из разных опер? Да даже если бы это было так, зачем раньше времени, не спросив у создателя тикета (он же участник разработки, он же заказчик) закрывать тикет? Почему нельзя уточнить допустимость закрытия тикета у всех участников? Почему нельзя было ответить в этом тикете тоже самое, что и здесь https://trac.adc-line.ru/smartHDC/ticket/209#comment:3? Зато появился еще один инвалид #209, который будет теперь постоянно маячить перед глазами...
следующий: 10 comment:6 by , 5 лет ago
Теперь исходя из обоих тикетов #208 и #209 стало понятным, что фрагмент
06:47 условие разворота по ЧК, ход вверх на двух НУ 50Гц
подъем 1сек (намеренное занижение времени хода вверх)
06:48 верхний датчик, спуск на обоих ЭК
спуск 9сек
06:57 условие разворота по ЧК, ход вверх на двух НУ 50=>49Гц
подъем 1сек
06:58 верхний датчик, спуск на обоих ЭК
в этом месте контроллер решил, что ему нужно использовать разворот по максимальному времени хода, несмотря на наличие 17.1. Поэтому подождав 30 секунд я сработал нижним датчиком,естественно, авария 17.1 долгого хода вниз снялась. Вопрос почему контроллер себя так повел?
07:30 нижний датчик, ход вверх на двух НУ 49Гц
подъем 10 секунд
07:40 верхний датчик, спуск на обоих ЭК
спуск длительностью 10секунд, т.к. цикл получился 20сек, в завершении снова авария 17.1
07:50 нижний датчик, ход вверх на двух НУ 49=>50Гц
был вызван ошибочной реакцией контроллера на сокращение времени цикла, в условиях недостижения нижнего датчика. А именно ошибочное действие снизить производительность 50=>49 привело к тому, что пропало одно из условий возникновения разворота по минимальному числу качаний.
Очевидно, ниже произошло тоже самое
08:22 условие разворота по ЧК, ход вверх на ОДНОЙ НУ 50Гц Вот здесь контроллер совсем плохо себя повел, для чего нужно было отключать насосную установку? Если он пусть и ошибочно принял решение снизить производительность, то почему не начал со снижения частоты
подъем 2сек
08:24 верхний датчик, спуск на обоих ЭК
Тут контроллер забил болтяру, решил, что более не нужно соблюдать время цикла, спуск длится более 20сек, пока я не сработал нижним датчиком. Естественно авария 17.1 опять же снялась
08:46 нижний датчик, ход вверх на снова на ОДНОЙ НУ 50Гц.
подъем 8сек
08:54 верхний датчик, спуск на обоих ЭК
спуск 10 сек, срабатываю нижним датчиком, т.к. понял, что контроллер опять собрался уходить на максимальное время спуска
09:04 нижний датчик, возврат аварии 17.1, снова подключение второй насосной установки, ход вверх на двух НУ на 22Гц
Тогда решение только одно - пока висит 17.1. запретить снижать производительность
Это решит оба вопроса:
- ложное снижение частоты и ложное отключение второго мотора.
- следствие из первого - длинный последующий ход.
Для меня в этом тикете остается непонятным только один вопрос - почему в одном случае произошло
06:57 условие разворота по ЧК, ход вверх на двух НУ 50=>49Гц
а в другом
08:22 условие разворота по ЧК, ход вверх на ОДНОЙ НУ 50Гц
при аналогичных условиях?
следующий: 8 comment:7 by , 5 лет ago
Replying to Art_M:
По описаннным событиям создал два новых тикета - #209 и #210.
Ну так давай создавать по 100500 тикетов на одну тему и тут же их закрывать!
Артем, причина твоего сарказма мне непонятна. В данном тикете ты жаловался на то, что контроллер отключил НУ2. В тикете 209 (который я создал по твоему комментарию здесь) ты жалуешься на снятие аварии 17.1. Какое отношение жалоба на снятие аварии 17.1 имеет к жалобе на выключение из работы НУ2? По-моему, никакого. Два разных эксперимента, проведенные в разное время (с разницей в 6 дней) с разными настройками привода...
следующий: 11 comment:8 by , 5 лет ago
Replying to alx:
Replying to Art_M:
По описаннным событиям создал два новых тикета - #209 и #210.
Ну так давай создавать по 100500 тикетов на одну тему и тут же их закрывать!
Артем, причина твоего сарказма мне непонятна. В данном тикете ты жаловался на то, что контроллер отключил НУ2. В тикете 209 (который я создал по твоему комментарию здесь) ты жалуешься на снятие аварии 17.1. Какое отношение жалоба на снятие аварии 17.1 имеет к жалобе на выключение из работы НУ2? По-моему, никакого. Два разных эксперимента, проведенные в разное время (с разницей в 6 дней) с разными настройками привода...
Так это же всё (отключение НУ, снижение производительности и снятие аварии 17.1) последовательные следствия одной причины, ну зачем их размазывать по нескольким тикетам? Ну и что, что тут два эксперимента в разное время и с разными уставками? Ну вот сейчас, например, ты попросишь меня провести какой-нибудь эксперимент, где я должен буду опробовать нечто с несколько другими уставками, мне для публикации результатов нужно будет еще один тикет создать? А в результате погрязнем в горе тикетов, что-то пропустим, закрыв неразобравшись толком в причинах, а где-то на одну тему могут попадаться противоположные решения. Ну для чего это нужно? Я считаю, что и 209 и 210 не нужно было создавать, а обсуждать нужно было здесь... Вот прямо вместо этого флуда...
comment:9 by , 5 лет ago
Replying to Art_M:
Вот именно, что в комментарии необоснованно закрытого тикета
Причина закрытия тикета была обоснована в первом комментарии. 25 (прописью: двадцать пять! ) строк текста последовательно, по шагам, с указанием значений настроек и выдержками из требований ТЗ обосновывают, почему контроллер должен был отключить НУ2! Если это - необоснованно, то я не знаю, что значит обоснование...
Ничто не мешало тебе, создавая тикет, так же конкретно, по шагам, со ссылками на требования ТЗ обосновать, почему ты считаешь, что контроллер что-то сделал неправильно. Ты же написал: "Ожидалось, что привод включит все НУ ... и в этом режиме будет продолжать работу". Обоснования почему ты этого ожидал - нет. Сразу уточню, что у меня к тебе по этому поводу нет никакой претензии - вся нужная информация для анализа инцидента есть - написано, что делали, написано, что ожидали, написано, что получили, приложены настройки. Я на основании имеющейся информации провел анализ и дал подробный отчет.
Наконец, ничто не мешает тебе и после закрытия тикета обосновать, почему ты не согласен с моим выводом об отсутствии ошибки в действиях контроллера. Если ты считаешь, что в моем рассуждении допущена ошибка, то укажи на нее. Только конкретно - с указанием на конкретные настройки, требования ТЗ и прочие обстоятельства, которые важны в данном случае. Я тоже человек, и могу ошибаться в своих рассуждениях. :) В твоем comment:2 я не увидел ничего, что противоречило бы моим рассуждениям. Ты там пишешь, что рассчитывал на другую логику в ТЗ. Но мы-то, разрабатывая станцию, следуем той логике, которая есть в ТЗ фактически! Например требовение ТЗ снижать производительность привода, если фактическое число качаний превышает требуемое, не обусловлено тем, получено оно за счет сокращения длины хода или нет. Нет в ТЗ требования удерживать высокую производительность, пока шток не начнет достигать нижнего датчика (если я неправ, покажи, где это написано). Из твоего комментария я понял, чего ты ожидал. Но факт в том, что твои ожидания противоречат требованиям ТЗ, а действия контроллера - нет.
Далее в комментарии ты приводишь фрагмент лога совсем другого эксперимента, проходившего в другое время и при других настройках, и задаешь следующие вопросы:
- Почему контроллер снял аварию 17.1?
- Почему контроллер, вместо снижения частоты отключил одну НУ?
Первый вопрос вообще не имеет никакого отношения к теме тикета. Поэтому я сичтаю, что обоснованно вынес его в отдельный тикет #209. Второй вопрос, хоть симптомы и похожи на исходный (неожиданное выключение из работы НУ2), как оказалось (см. #210), вызвано совсем другими причинами. Причем в последнем случае (в отличие от исходного) я согласен, что имеет место баг! Так что выделение второго вопроса в отдельный тикет я тоже считаю оправданным.
та же самая проблема, изложенная в заголовке, зачем еще одну такую же тему создавать.
Приведу выдержку из начальной wiki-странички:
Не пытайтесь догадаться о причинах ошибочного поведения устройства (если только Вы не разработчик), описывайте только факты... Только разработчики, имея схемы, чертежи и исходные коды, могут проанализировать ситуацию и найти причину ошибочного поведения.
Эксперименты в #208 и #210 происходили при совершенно разных условиях (в первом двигатели работали на минимально разрешенной частоте, во втором - нет), поэтому и при подборе числа качаний выполнялись разные ветки алгоритма. Поэтому в случае данного тикета контроллер действительно должен был отключить НУ2, и ошибки нет, а во втором - нет, и имеет место ошибка.
Я более чем уверен, что создав еще один тикет, Вы бы спросили, а какого хрена я пложу однотипные тикеты. Я только создам, а Вы его снова сразу закроете инвалидом. От этого же сразу станет понятнее, где и кто в каком тикете что-то дельное написал, так ведь?
Если ты создаешь тикет, разработчики анализируют изложенную в нем проблему. Если в результате анализа они приходят к выводу, что имеет место баг - принимаются меры к его устранению (см. #210). Если в результате анализа они приходят к выводу, что бага нет, а автор тикета неправ, ожидая другого поведения от устройства - тикет закрывается как invalid (см. #209). По-моему, все логично.
Это всё для чего? Чтоб специалист АДС смог отчитаться: "хух сегодня выполнили невероятный план, побили вчерашний рекорд, закрыв миллион тикетов!", для этого чтоль? %)
У нас в компании нет плана по закрытию тикетов. Наша задача - сделать так, чтобы наши изделия работали максимально хорошо и правильно. И система отслеживания багов - это средство для более эффективного выполнения этой задачи.
Я, конечно, не хочу в чужой монастырь со своим уставом... Но мне было бы гораздо удобнее решать проблемы по правилам форумов, где размножение тем является признаком "плохого тона".
Попробую объяснить на (намеренно утрированном) примере, почему это неудобно и неэффективно. Предположим, ты в комментариях к уже закрытому тикету сообщил о еще десяти разных ошибках. Когда разработчик заканчивает работу над какой-то проблемой и решает, какую следующую проблему ему решать, он идет в список тикетов и, естественно, смотрит только открытые, то есть десять новых проблем он просто не заметит! А если, допустим, все-таки заметит и начнет анализировать, он попросит дополнительную информацию, например приложить конфиг-файлы с настройфками для описанных ситуаций. В результате к одному тикету быдет приложено десять разных конфиг-файлов. Каждый раз, когда надо посмотреть что-то в конфиг-файле, разработчик, анализирующий проблему, должен будет тратить свое время на выяснение, какой конфиг-файл к какой из заявленных проблем относится. С ненулевым шансом их все-таки перепутать. Да и комментарии, касающиеся разных проблем, будут идти все вперемешку, что также затруднит работу по анализу какой-то конкретной проблемы... Я думаю, в наших общих интересах упростить работу разработчиков - чтобы они думали над сутью проблемы, а не над тем, какой файл или какой комментарий к какой проблеме относится, а какой - нет.
проблемный фрагмент заглавного тикета
...
проблемный фрагмент комментария
...
Алексей, ты продолжаешь быть уверенным, что эти фрагменты из разных опер?
Да, продолжаю.
Да даже если бы это было так, зачем раньше времени, не спросив у создателя тикета (он же участник разработки, он же заказчик) закрывать тикет?
Артем, ты сам написал комментарий к уже закрытому тикету! Тикет был закрыт 10 июня, а ты добавил комментарий 13-го июня. Твой второй лог я вынес с отдельный тикет #210, который не закрыт, так как, в отличие от данного, в результате анализа я пришел к выводу, что действительно, имеет место баг. Данный же тикет я закрыл потому что (повторяю) в результате проведенного анализа ситуации я пришел к выводу о том, что контроллер действовал правильно, и ошибки в его действиях нет. Неверными были твои ожидания. Еще раз повторю, что если ты с моими выводами не согласен, ничто не мешает тебе указать в комментарии на ошибки в моих рассуждениях (я мог, например, не учесть какое-то требование ТЗ, которое контроллер нарушил, выключив НУ2 из работы). Если я увижу, что закрыл тикет по ошибке, я его переоткрою и продолжу работу над ним.
Почему нельзя уточнить допустимость закрытия тикета у всех участников?
Артем, при всем уважении к тебе как консультанту и тестеру, тикеты - инструмент организации работы разработчиков. Поэтому и решение о том, когда тикет следует открыть, когда закрыть, а когда снова переоткрыть, принимают разработчики. Еще раз замечу, что закрытие тикета никак не препятствует тебе добавить в него новый комментарий, если, например, появилась какая-то новая информация по теме тикета.
Почему нельзя было ответить в этом тикете тоже самое, что и здесь https://trac.adc-line.ru/smartHDC/ticket/209#comment:3?
Мне кажется, что в comment:1 этого тикета я ответил не менее подробно и обоснованно, со ссылками на требования ТЗ и значения настроек, как и в ticket:209#comment:3, который ты привел в пример.
Зато появился еще один инвалид #209, который будет теперь постоянно маячить перед глазами...
Воспользуйся, запросами, показывающими только открытые тикеты (например {1}, {3}, {8}), и закрытые тикеты никак тебя не побеспокоят.
comment:10 by , 5 лет ago
Replying to Art_M:
Теперь исходя из обоих тикетов #208 и #209 стало понятным, что фрагмент
...
был вызван ошибочной реакцией контроллера на сокращение времени цикла, в условиях недостижения нижнего датчика. А именно ошибочное действие снизить производительность 50=>49 привело к тому, что пропало одно из условий возникновения разворота по минимальному числу качаний.
Я не согласен с тем, что данное решение контроллера ошибочно. Как я указал в comment:4, ТЗ требует от контроллера принять меры по снижению производительности.
Тогда решение только одно - пока висит 17.1. запретить снижать производительность
Это решит оба вопроса:
- ложное снижение частоты и ложное отключение второго мотора.
- следствие из первого - длинный последующий ход.
...и это будет нарушать требование ТЗ.
Для меня в этом тикете остается непонятным только один вопрос - почему в одном случае произошло
06:57 условие разворота по ЧК, ход вверх на двух НУ 50=>49Гц
а в другом
08:22 условие разворота по ЧК, ход вверх на ОДНОЙ НУ 50Гц
при аналогичных условиях?
Предполагаю, что в первом случае разница между фактическим и требуемым числами качаний была больше 0.05 мин-1, а во втором - меньше. Поэтому в первом случае шаг тонкой подстройки частоты был равен -1 Гц, и баг #210 не имел места, а во втором случае шег тонкой подстройки частоты был равен нулю, в результате чего и произошли все рассмотренные в #210 события. Если есть желание исследовать этот вопрос более детально, в коде имеется возможность вывода в отдельный файл отладочной информации, касающейся принятия решений при подборе числа качаний, только эта функция сейчас закомментарена. Если необходимо, я могу ее раскомментарить, и после повторения экспериментов мы, намерное, сможет узнать более точно, почему контроллер принял именно то или иное решение.
comment:11 by , 5 лет ago
Replying to Art_M:
Ну вот сейчас, например, ты попросишь меня провести какой-нибудь эксперимент, где я должен буду опробовать нечто с несколько другими уставками, мне для публикации результатов нужно будет еще один тикет создать?
Если ты считаешь, что в процессе проведения эксперимента обнаружил новый баг, который еще не известен (нет тикета с его описанием) - то да, лучше создать новый тикет.
А в результате погрязнем в горе тикетов, что-то пропустим,
Гораздо вероятнее пропустить баг, если о нем было сказано в комментарии к уже закрытому тикету, чем если он описан в отдельном тикете, который все разработчики видят в списке, так как он еще не закрыт.
закрыв неразобравшись толком в причинах, а где-то на одну тему могут попадаться противоположные решения.
Я не думаю, что наши разработчики так делают. Был один такой, но он у нас больше не работает. :)
Ну для чего это нужно? Я считаю, что и 209 и 210 не нужно было создавать, а обсуждать нужно было здесь...
Твое мнение я понял, но с ним не согласен. Считаю, что в отличие от случая, описанного в данном тикете, в случае тикета #210 имеет место баг, который требуется исправить.
Насколько я понял из описания тикета суть проблемы, в 14:12:09 контроллер изменил параметр производительности 'selectedDrive2' (выбор НУ2) из значения "выбран" в значение "не выбран", таким образом исключив НУ2 из последующей работы. Ожидалось, что контроллер этого делать не будет.
Судя по выдержке из журнала, помещенной в описании тикета, предшествующий событию цикл начался в 14:11:55 и закончился в 14:12:09. Таким образом, цикл длился 14 секунд, что дает число качаний приблизительно 4.3 мин-1.
Согласно приложенному к тикету файлу конфигурации, настройка "Режим задания числа качаний" установлена в значение "Прямое указание". При такой настройке задание числа качаний осуществляется настройкой "Число качаний", которая установлена в значение 4. Таким образом, фактическое число качаний превышает заданное, и контроллер должен скорректировать параметры производительности для снижения производительности привода.
Настройка "Приоритет увеличения производительности" установлена в значение "Клапан - двигатель". Согласно ТЗ, при такой настройке первой мерой по снижению производительности является:
Настройки "Минимальная частота двигателя" для обеих НУ имеют значение 15 Гц, и именно на таких частотах НУ1 и НУ2 работали в завершившемся цикле. Таким образом, обе НУ уже работали на минимальной частоте, и процитированная мера уже исчерпана (неприменима). Далее в тексте ТЗ говорится:
Так как настройка "Режим насосной установки 1" установлена в значение "вкл", а настройка "Режим насосной установки 2" - в значение "авто", приоритетной является НУ1, и выключить из работы контроллер может только НУ2. Именно это и было выполнено согласно записи в журнале:
Вывод: в рассматриваемом случае выключение НУ2 из работы было выполнено правильно. Ошибки в этом нет.