Прошу прощения - именно загрузку из собственного сообщения не проверял.
Попробовал удалить и загрузить rar архив - не могу считать из сообщения.
Загрузил owl - и, о чудо, могу скачать из сообщения.
Обновил сообщение, теперь можно скачать
Видимо, это какая-то проблема форума.
Может, после исправления, и из исходного сообщения можно будет скачать этот и другие макросы...
Как-то не пришло в голову перепроверять прикреплённый файл на скачивание.
Спасибо.
Последний раз редактировалось FPavel; 27.01.2024 в 12:00.
смог) но было бы удобно. Еще то что оказывается есть старые и новые ПЧВ. В новых номера регистров иные и они ни в каких РЭ не прописаны. Благо что есть OPS сервер.
Вы не могли бы подсказать что означает - "статус не определен" в OPS когда пытаюсь считать регистры с ПР205. Хотя все выставлено верно. И пробовал разные варианты и настройки
Поделюсь макросом ПИ (урезанный ПИД) регулятора для привода с 3-позиционным управлением без обратной связи по положению.
Проверил его на одном объекте - регулировка температуры подачи теплосети при помощи смесительного клапана после гидравлического разделителя.
Т.е. процесс инерционный, время полного хода привода 60 с.
Понадобился такой, а на форуме предлагают или "аналоговый" ПИД с управлением по псевдо-обратной связи от математической модели привода или выход "аналогового" регулятора перерабатывают в ШИМ.
По формуле из РЭ ТРМ12 получил приращение выхода на каждом шаге пересчёта регулятора
dY.PNG
Физический смысл приращения - доля (-1,0...+1,0) от времени полного хода для перемещения привода с учётом направления.
Tm - время пересчёта регулятора
При каждом пересчёте обновляю также и расчётное положение привода, т.е. суммирую перемещения
SY.PNG
Сразу же ограничиваю "взвинчивание интегральной составляющей" значением в 20%, т.е. диапазоном (-1,2...+1,2). Этот параметр не выводил ко входам, а задал константой.
Для "отключения" интегральной, достаточно сделать время интегрирования менее 0,001, т.е. приравнять к 0.
алгоритм:
Также добавлено ограничение на паузу после реверса.
Кроме того, ввёл диагностику, останавливающую вычисления и выводящую сигнализацию на выход ФБ при некорректных входных параметрах.
Наверняка, можно расширить список проверок.
Входные параметры:
fPV — переменная процесса (process variable);
fSP — уставка (задание) процесса (setpoint);
fDeadBand — зона нечувствительности (dead band) - в каждую сторону, т.е. в итоге вся зона в два раза больше;
fKp — коэффициент пропорциональности, значение полосы пропорциональности Xp=1/Kp равно величине невязки (рассогласования) при котором регулятор сформирует импульс длительностью равный времени полного хода привода;
fTi — время интегрирования;
nTRecalc_[ms] — период пересчёта (квантования) значения выхода регулятора,
nTFullStroke_[ms] — время полного хода (full stroke);
nTPulseMin_[ms] — длительность минимального импульса;
nTPauseReverse_[ms] — минимальная длительность паузы между командами реверса;
bEnable - разрешение работы регулятора (при запрете не только останов, но и сброс накопленной интегральной составляющей)
bReset - задумывал, как установку "интегральной" в заданное со входа значение, но не реализовал, поэтому получил второй вход bEnablr, но инверсный
Выходные параметры:
bOpen - команда на привод "открыть" регулирующий орган;
bClose - команда на привод "закрыть" регулирующий орган;
bError - ошибка введённых параметров, вычисления остановлены.
Ошибка введённых параметров для случаев:
1. nTRecalc_[ms] < 1000 мс
2. nTPulseMin_[ms] < 200 мс
3. nTFullStroke_[ms] < 1000 мс
Для зоны нечувствительности покажу изображением
DB.PNG
test_PID_3pos.owle
Спасибо, 1exan
Ваше исправление на обратные связи убрало все предупреждения
ST для OL в январе оставался сырым продуктом, не позволяющем использовать внутри себя таймеры (без ввода времени извне), а также не позволяющий помещать полученный ФБ внутрь другого законченного макроса.
Ведь ФБ ПИД не является самоцелью, он потом помещается внутрь большего ФБ, чтобы на итоговом холсте для однотипных процессов (несколько контуров регулирования) была не рассыпуха, а несколько ФБ - отладка и исправление недочётов резко упрощаются. Так у меня используется один большой ФБ аналоговый ПИД с переходом в сон, плавным изменением уставки и ещё какими-то функциями - очень удобно, при очередном проекте обхожусь импортом вместо рисования.
Поэтому FBD - осмысленное решение, несмотря на большую однозначность последовательности выполнения операций в ST.
Сейчас возможности ST доработаны, рукастый желающий может воспроизвести алгоритм.
После сдачи работы, пока нет возможности проверить переработку в ST на реальном объекте как проверил с FBD, поэтому реализацию на ST отложу до следующего раза.
Работа отнюдь не титаническая - видно, что там всего лишь вычисления по двум формулам и потом условие включения и отключения триггера (разрешить перемещение). И условий установки-сброса триггера - по два-три. Вместе с отладкой сделал за два подхода вместе с изучением опыта на форуме.