Я как-то очередной велосипед изобретал, для сходной задачи. Помогло
:) Люблю "изобретать велосибеды", бо кто-то тут уже высказывался "...чужие велосипеды больно бъют по яйцам... " :))
оговорочка "по Фрейду" - поправлять не стал, буковка "б", несколько меняя смысл, вполне отражает некоторые аспекты процесса "изобретения" :))
В вашем случае ТЭНы меняем на клапаны, или что там ещё, - не суть.
Задача была - терморегулирование в сушилке (большая масса сырья, продуваемая горячим воздухом. Перегревать нельзя, точность соблюдения уставки (считай возможное перерегулирование выше цели - 80-100 "цельсиев") +/-10%, точность поддержания температуры 1-2 градуса, в условиях крайне нестабильной сети и разном (непредсказуемом объёме загрузки сушилки, т.е. разном сопротивлении продуваемому воздуху, т.е. нет стабильных характеристик системы). Мощность трёхфазных нагревателей - до 30киловатт.
Мудрствовать особе не стал, постарался изобразить, как я бы (как человек-оператор) поступал бы в такой ситуёвине, когда есть градусник, контур регулирования с неизвестными параметрами, и ручка управления мощностью ТЭНа.
Назвал сие творение "интегрально-нелинейным алгоритмом", опуская мелкие, но важные моменты по адаптации алгоритма к меняющимся условиям, в двух словах примерно так:
вначале "поддаём жару" , пока температура не начнёт расти, после чего стопорим управление ТЭНами, до стабилизации процесса. Высчитываем на этом этапе тепловую инертность системы, поправочный коэффициент шага регулировки мощности. Эти параметры запоминаются (есть галочка в интерфейсе, - применить уже измеренные параметры и не повторять процесс адаптации-калибровки, это ускоряет первое включение системы)
Далее работает пропорционо-нелинейный алгоритм (прибавляем "жару", в соответсвии разницей "фактическая температура - уставка", с учётом поправок тепловой инертности системы. Как только видим, что температура начала расти, прекращаем "поддавать", и ждём стабилизации "процесса", и так, пока не достигнем уставки, далее вступает в действие интегратор, накапливая ошибку и вводя поправки.
Важный момент - критерием "стабилизации процесса" может выступать не только "нулевая производная", но и определённая скорость её изменения (замедление роста температуры), это уже адаптационные механизмы, которые не меняют сути, но позволяют алгоритму быть более бодрым, приближаясь к оптимальному ПИДу для данной конкретной системы.
Такой алгоритм не даёт перерегулирования, заметно бодрее и точнее просто линейного, и примерно в 2 раза уступает по скорости "выхода на режим" для ПИДа с оптимальными коэффициентами. Плюсы - высокая степень адаптации к меняющимся условиям. "Поставил и забыл" (он ещё и с тёплыми полами неплохо справляется, хотя там обычно тупо "релейный" алгоритм (по сути своей тоже нелинейный, но совсем тупой, там от перерегулирования спасает только то, что относительная мощность нагревателя в системе "никакая" :))
Выглядит это примерно так:
чё там в описании, - даж не спрашивайте, - писалось 20+ лет назад, я уж и позабыл всё что там за буковками :))