Класс!!!!!
Класс!!!!!
Было бы итересно готовый продукт на питоне чтобы можно было пользоваться. Оч полезная бы была приблуда
Думаю, что в существующем виде это вполне законченный продукт - по-большому счёту GUI не требуется, т.к. в ходе работы и, особенно ПНР, в теле скрипта один раз заполняются исходные данные (входной и выходной файлы, название устройства), а потом просто кликом скрипт запускается, формируя обновлённый список тегов.
По крайней мере, для меня бОльшую ценность имеют консольные утилиты - после настройки их можно быстро многократно запускать без лишних диалогов выбора файла и прочего. И дополнительно, консольные утилиты быстрее создаются и используются, а применение - это исходная задача.
Поэтому, моё решение основано на bat и sed - на лично известных и освоенных инструментах.
Немного не закончил демонстрационную программу для 3-позиционного регулятора - хотел сделать FBD вариант и вместе их потестировать. Но время никак не выкрою... Может чуть позже завершу и заменю демку для этого объекта.
При разработке регулятора актуальным остаётся вопрос проверки и отладки алгоритма до начала ПНР на объекте.
Для регулятора с управлением исполнительным механизмом через аналоговый выход можно собрать макет из датчика температуры, твердотельного реле с регулируемым выходом, нагревательным элементом (лампой накаливания или керамическим резистором).
Для регулятора с трёхпозиционным исполнительным механизмом собрать простой макет уже затруднительно.
введение:
Предлагаю самостоятельные реализации эмуляторов для среды разработки OwenLogic, появившиеся благодаря идеям FB100, FB101. Каждый из эмуляторов реализован в двух вариантах - на языках программирования ST и FBD, что связано с неравноценной реализацией отсчёта времени и возможностей вложения полученных ФБ в другие ФБ в среде Owen Logic.
ЭМУЛЯТОР ОБЪЕКТА УПРАВЛЕНИЯ С "НЕПРЕРЫВНЫМ" УПРАВЛЕНИЕМ
Структура эмулятора объекта управления с "непрерывным" регулированием показана на рисунке
Схема Emulator_Cont_.png
Для получения значения выхода эмулятора объекта нужно последовательно трижды найти численное решение дифференциального уравнения
алгоритм решения дифференциального уравнения:
Реализация эмулятора с "непрерывным" управляющим входом
на языке ST:
на языке FBD:
пример использования совместно с ФБ PID:
ЭМУЛЯТОР ОБЪЕКТА УПРАВЛЕНИЯ С ТРЁХПОЗИЦИОННЫМ УПРАВЛЕНИЕМ
ФБ будет состоять из двух частей: эмуляция привода с трёхпозиционным управлением (на вход которого поступают сигналы "открыть" и "закрыть", а выходе формируются сигналы положения регулирующего клапана и состояния концевых выключателей "открыт" и "закрыт") и эмуляция объекта управления с непрерывным управлением.
Имеется возможность эмулировать неидеальный клапан - с отличающимися временами полного хода при открытии и закрытии, временами выборки люфта при открытии и закрытии.
на языке ST:
На FBD не реализовывал - трудоёмко... Хотя для отладки ПИД регулятора "изнутри" при нынешних ограничениях на вложенность ФБ в OwenLogic, лучше бы и на FBD иметь.
ЛИТЕРАТУРА
1. Примеры программ для технологических функций. A5E00130042-01 (является частью документа 6ES7 398-8FA00-8AA0)
https://www.siemens-ru.com/doc/Primeri_programm.pdf
ПРИЛОЖЕНИЕ
1. Демонстрационная программа работы эмулятора объекта с "непрерывным" управлением
Test_Emu_Cont.owle
2. Демонстрационная программа работы эмулятора объекта с "3-позиционным" управлением
Test_EMU_3pos.owle
Последний раз редактировалось FPavel; 06.02.2025 в 21:04. Причина: исправил эмулятор 3pos
FPavel, здравствуйте!
Воспользовался Вашим регулятором с трехпозиционным управлением, огромное спасибо!
Проблема возникла, когда подал на вход уставки величину 3500. Ну и измеренную величину в том же масштабе. В итоге он регулировал без остановок.
Внес в ФБ очень небольшую поправку, предлагаю на суд автора. Screenshot_11.png
Последний раз редактировалось Юра54; 09.10.2024 в 07:52.
Спасибо, за обратную связь!
Тогда уж приводить не к уставке, а к диапазону измерений датчика - уставка может быть равной нулю (например, для уровня воды в котле).
Почему-то думал, что именно абсолютное значение PV и SP не будет влиять на регулирование, ведь можно пропорционально уменьшить Kp и увеличить Ti.
Если PV сильно зашумлён, то его можно дополнительно сгладить фильтром 1-го порядка (например, встроенным - свойства аналогового входа).
Обычно, при настройке ПИД регулятора подбираю Kp, Ti, период пересчёта и постоянную фильтра аналогового сигнала - они все взаимосвязаны.
Физический смысл полосы пропорциональности Xp = 1/Kp - величина невязки, при которой за счёт пропорциональной составляющей полностью откроется клапан. Брал его примерно как 3-4 допустимых диапазона отклонения при регулировании. Т.е. если при SP=3500 предполагается отклонения 50, то Xp=150-200 и Kp=1/200=0.005. Примерно, такой масштаб коэффициента Kp.
Вечером попробую проверить работу ПИД с эмулятором на уставках со значением порядка 3500.
В любом случае, спасибо - доработки означают, что Вы разобрались с логикой работы и по мере необходимости подстроите под конкретный случай.
P.S. Не могу уяснить источник проблемы (автоколебаний) - ведь сам ПИД регулятор не работает с абсолютными значениями, а только с невязкой (E=SP-PV), т.е. "смещение" в 3500 и 10000 не должно оказывать влияние...
Последний раз редактировалось FPavel; 09.10.2024 в 12:32.
Значения ошибки например между 35 и 37 и между 3500 и 3700 отличаются на два порядка. Для этого и предназначен коэффициент пропорциональности.
А если сделать приведение сигналов к диапазону измерения датчика, то при замене на датчик с другим диапазоном придётся менять и коэффициент пропорциональности
Проверил регулятор с уставкой 3500 вместе с эмулятором объекта.
Эмулятор объекта:
- время полного хода клапана 30 с,
- люфт клапана равен 1 с в обоих направлениях
- сам объект - апериодическое звено с постоянной времени 10 с, т.е. через 30 с от начала воздействия будет установлено стабильное состояние
- выход объекта равен 0 при полностью закрытом клапане (rPV_0 = 0)
- выход объекта равен 10000 при полностью открытом клапане (rGain = 100)
- положение клапана измеряется в процентах (rVLV_Min = 0, rVLV_Max = 100)
При Кп=0,0015, Ти=20000, Тм=5000 (время пересчёта), SP=3500, зоне=20 ПИД приводит объект к уставке, хотя и "подрабатывает" время от времени.
И это даже без компенсации люфта в регуляторе.
Т.е. всё-таки не могу принять, что регулятор не работает при уставках, сопоставимых с 3500.
Но, если заработало с делением - пусть работает. В данном случае, этот коэффициент просто перенесён как общий множитель за выражение ПИД регулятора.
Единственно, захотелось добавить слагаемое - дифференциал по времени значения Кп. И вместе с опцией разрешения этого слагаемого, возможно, добавлю.
UNIX_TIME + ПР100
Проблема: в симуляторе и фактически не совпадают значение регистра (в примере 575-й).
Ожидаемое значение: 47024
Фактическое: -17786
01.png
Прибавление 2000, реализовано в макросе. +2000 на входе в макрос- такой же результат.
Последний раз редактировалось Gena72; 10.10.2024 в 10:18.