В продолжение темы ООП в графических языках программирования разберемся более подробно с model-based design. Что такое модельно-ориентированное проектирование (МОП), как его правильно готовить и с чем его едят. Некоторые авторы в своих публикациях при описании модельно-ориентированного проектирования систем управления транслируют представление, что под словом «модель» подразумевается «модель системы управления». Что не есть правильно. Вот типичный пример – картинка из статьи уважаемых авторов, про «лучшие практики разработки ПО с использованием модельно-ориентированного проектирования»:

 У меня лично, глядя на эту картинку, сразу возникает неприличный вопрос, а из какого места, извиняюсь, у вас появились тестовые вектора?  
 Или, например, картинка к рекомендации типового процесса разработки ПО: А где на этой картинке модель? Вот этот квадратик, из которого получается исходный код? Серьезно?! Так это опять модель управляющего ПО.  Особенно умиляет на этой картинке наличие исходных требований к ПО. 
Как вам, например, такое самое обычное, практически хрестоматийное, требование к системе управления: «При повышении давления выше предельного значения время закрытия (открытия) предохранительного клапана должно составлять не более 5 секунд.»  Model-based design provides an efficient approach for establishing a common framework for communication throughout the design process while supporting the development cycle (V-model). In model-based design of control systems, development is manifested in these four steps:

1. modeling a plant,
2. analyzing and synthesizing a controller for the plant,
3. simulating the plant and controller,
4. integrating all these phases by deploying the controller. Разработка модели объекта является первым пунктом при определении МОП. Сначала – модель объекта, а потом уже управление для него. И это правильно: нет модели объекта, «всем спасибо – все свободны» и это не модельно-ориентированное проектирование, а сплошной обман потребителя. В Чернобыле произошло именно, то что происходит при отсутствии модели объекта. Советские ученые задались вопросом: «А что будет, если отключить электросеть, а насосы охлаждения реактора питать током от генератора, работающего на выбегающей турбине? Сколько воды успеют прокачать насосы через реактор, пока турбина и генератор не остановятся?» Интересно, что такой вопрос они задавали на основе опыта протекания аварии на американской АЭС, где подачи воды не хватило для охлаждения и американский реактор расплавился. И чтобы быть уверенным, что наши реакторы не плавятся, решили провести эксперимент. Наверное, ответ на этот вопрос позволил бы сделать следующее поколение реакторов РБМК еще более безопасным. Хотели как лучше, а получилось как всегда. В результате эксперимента безопасный реактор сначала привели к опасному состоянию, а потом взорвали. И следующего поколения реакторов РБМК больше нет и не предвидится. Аминь.  А если бы вместо эксперимента на реакторе можно было все то же самое сделать на математической модели объекта, то, вполне возможно, мы бы сейчас вместо реакторов ВВЭР-1200 строили по миру РБМК-2400.  После Чернобыльской аварии в атомной отрасли модель объекта (ядерного реактора) является обязательной частью проекта. Проектант должен на модели показать, что будет, если что-то пойдет не так. И поэтому у атомщиков модельно-ориентированное проектирование появилось гораздо раньше, чем в других отраслях, из-за требований регулирующих органов.  Но даже когда нет требований от регулирующих органов, модель объекта значительно облегчает проектирования как системы управления, так и самого объекта. Сейчас покажем это на примере из отрасли, где «мечты сбываются». В качестве примера правильного, кошерного МОП рассмотрим процесс разработки управляющего ПО для гидравлической системы управления подводного добычного комплекса (как всегда, абсолютно случайно у меня эта модель оказалась на компьютере). Управления основными потоками добываемого газа подводой осуществляет гидравлическая подводная арматура. На берегу находится насосная станция, которая обеспечивает давление в гидравлической системе, масло по шлангокабелю подается под давлением под воду. Открытие и закрытие арматуры осуществляют гидроприводы, управления которыми осуществляется с помощью распределенной системы управления. Система состоит из:  Для удобства установки и обслуживания трубопроводы объединяются в манифольды, где на одной платформе установлена необходимая арматура и модули управления. Если в наземной станции можно использовать стандартные средства SCADA, архивные сервера и ПЛК с операционными системами обычными и (или) реального времени, то подводный модуль управления – это, как правило, безоперационный микропроцессор, управляющий код для которого должен быть разработан отдельно от берегового управляющего ПО. (Никакого С++, только Си, только хардкод) Потом несколько этих ПМУ должны быть интегрированы в общую систему и протестированы. И при этом вся система должна работать как единое целое и обеспечивать открытие и закрытие арматуры в течении 30 лет под водой.  Задача усложняется тем, что до сего времени все оборудование, используемое на шельфе, было западное, а шельф сейчас под санкциями. И, соответственно, нужно создавать комплекс, в котором многие технические решения для нас новые и неотработанные. Как получить результат, сократив по возможности ошибки проектирования? Хорошо западным разработчикам: у них уже есть опыт, они знают про подводные камни в подводной добыче. И тут на помощь разработчикам приходит модельно-ориентированное проектирование. Вместо того, что бы проводить эксперименты на дорогом оборудовании, как советские атомщики в Чернобыле, мы создаем модель объекта и проводим эксперименты над моделью.  Для проектирования программного обеспечения создается комплексная модель в виде пакета, содержащего как модели течения гидравлической жидкости под водой с арматурой, так и проекты системы управления. (см. рис. 3) 
Рисунок 3. Пакет комплексной модели системы управления СПД. В данном пакете присутствует проект – модель наземной гидравлической станции (файл 200.prt на рис. 3), обеспечивающий моделирование динамических процессов работы оборудования наземной системы подачи гидравлической жидкости под воду. (см. рис. 4) 
Рисунок 4. Расчетная схема наземной гидравлической станции. Одновременно с моделью физических процессов разрабатывается проект системы управления, обеспечивающий включения и выключения оборудования и управления режимами работы данного оборудования. На рисунке 5 представлен проект алгоритмов управления для наземного модуля управления. 
Рисунок 5. Проект системы управления наземным модулем. На данной стадии возможно разделение разработки алгоритмов управления между разными командами. Например, для разработчиков наземной гидравлической станции расходы в подводные модули и давлении в них являются граничными условиями. Для разработчиков подводного оборудования граничным условием является давление, создаваемое насосной станцией на берегу. Разработка подводных модулей управления (ПМУ) осуществляется на основании проекта разделения основных магистралей течения добываемого газа между манифольдами. Сначала формируются скважины, определяется обвязка трубопроводов и арматуры между скважинами и берегом, потом разрабатывается гидравлическая система управления этой арматурой. Для каждого подводного модуля формируется проект-модель системы управления и расчетная схема гидравлической системы манифольда с установленной арматурой. На расчетной схеме гидравлической системы установлена арматура, управление которой осуществляется с данного подводного модуля. Это проектирование может выполнятся параллельно с разработкой наземного модуля управления, при этом разработка может вестись независимо и параллельно. Для разработки алгоритмов ПМУ и работы арматуры внешняя система задается командами управления и граничными условиями по гидравлической системе. Рассмотрим подводный модуль управления (ПМУ) 502. Здесь используются два проекта: 

 
Рисунок 6. Гидравлическая схема ПМУ. Данная расчетная схема обеспечивает моделирование поведения гидравлической системы управления и расчет расходов и давлений в системе, управляемой с помощью 502 ПМУ. Расчетная схема гидравлики позволяет задавать воздействия на исполнительные механизмы и получать данные датчиков, рассчитанные в модели физических процессов. Пока у нас нет наземной станции в блок 502 P (левый нижний угол рис. 6), можно задать давление, создаваемое гидростанцией в качестве граничного условия.  В системе на рисунке изображены 6 гидравлических запорно-регулирующих арматур (ЗРА), каждая из которых по своей сути представляет гидроцилиндр подключенный к двум линиям высокого и низкого давления. Подаем давление большее в верхнюю часть цилиндра, давление двигает шток вниз, подаем больше давление в нижнюю часть цилиндра, шток поднимается вверх.  За переключение отвечают распределительные клапаны, расположенные внутри белого блока (см. рис. 7). 
Рисунок 7. Блок распределительных клапанов в модели. Принцип работы простой: в зависимости от положения золотника камеры цилиндра соединятся с разными линиями. Передвинули золотник – поменяли направление движения штока в цилиндре. (подробнее про моделирование гидравлики можно посмотреть здесь…) Проект управляющего ПО подводного модуля управления содержит несколько расчетных блоков, каждый из которых может быть разработан отдельным разработчиком или командой. В данном случае разделение на модули происходит по функциональному признаку, каждый блок отвечает за управления определенным типом арматуры. Применяется методология объектно-ориентированного программирования, где блок — это класс ООП (подробнее здесь... и здесь...) Рассмотрим процесс проектирования блока управления запорно-регулирующей аппаратурой. Данный блок в схеме получает 4 входных сигнала и формирует 8 выходных сигналов. (см. рис. 9) 
Рисунок 9. Блок управления ЗРА (Тип 1). Внутренняя схема блока состоит из двух листов алгоритмов. Первый лист представлен на рисунке 10а, второй — на рисунке 10b.  
Рисунок 10a. Расчетная схема блока управления арматурой. Лист 1. 
Рисунок 10b. Расчетная схема блока управления арматурой. Лист 2. При разработке данного блока используют следующие виды сигналов:

 Расчетная схема блока управления арматурой является векторной. Это значит, что по каждой линии передается не один сигнал управления, а вектор сигналов, размерность которого соответствует количеству оборудования данного типа, установленного в ПМУ. Для связи между расчетным блоком и сигналами, параметрами и командами для конкретного экземпляра оборудования используются интерфейсные блоки. Таким образом, разработав и проверив одну схему управления типовым элементом, на схему можно поместить столько интерфейсных блоков, сколько оборудования данного типа подключено к подводному модулю управления. В рассматриваемом случае в ПМУ находятся два интерфейсный блока для запорно-регулирующей арматуры тип 1 (см. рис. 8).  Все переменные сигналы и параметры, которые нужны для блока управления, помещаются в соответствующую категорию базы сигналов ZRAT1. Часть категории представлена на рисунке 11. Выделение отдельной категории позволяет сформировать разделение разработки модулей управляющего ПО на части и четко определить интерфейс взаимодействия между различными частями программы. Таким образом, разработка модуля управления идет изолированно по интерфейсам от других модулей в ПО. 
Рисунок 11. Группа сигналов для блока управления ZRAT1 В системе присутствует несколько экземпляров оборудования данного типа, а значит, переменных в управляющем ПО еще больше. Для того чтобы исключить ошибки, связанные с наименованием переменных используется система кодирования оборудования. В базе данных сигналов формируются группы сигналов, уникальные имена которых содержат код системы, тип оборудования и уникальный код в рамках системы. В рассматриваемом примере на гидравлической схеме мы имеем два экземпляра арматуры, расположенной в системе 502, которая управляется блоком ЗРА ТИП 1. (см. рис. 12.) Их имена в базе данных – 502GTVOO1 и 502GTVOO2. Окно базы данных сигналов представлено на рисунке 12.  
Рисунок 12. База данных сигналов оборудования СУ СПД. Система кодирования определяет имена переменных для модулей управляющего программного обеспечения и позволяет автоматизировать процессы наименования сигналов в пределах всего разрабатываемого программного модуля. Любое имя переменной состоит из имени группы сигналов и имени переменной соединенной знаком «_». Для любой запорно-регулирующей арматуры, относящееся к тиру «ЗРА Тип1», наименование входных сигналов, переменных состояния, выходных переменных выглядит как «код_арматуры»_«имя_сигнала». Для клапана 502GTV002 в базе данных сигналов находятся 65 переменных, например: Если мы добавим еще одну единицу арматуры на эту схему, то ее имя будет 502GTV003, где по принятой системе кодирования  Во время разработки модуля управления значения параметров могут быть заданы в базе данных сигналов, и, таким образом, осуществляется верификация работоспособности отдельного блока управления. В частности, состояние арматуры в данном примере определяется по давлению в линиях подвода и отвода гидравлической жидкости. Для проверки модуля управления отдельно от остальной части системы это давление можно задать в базе сигналов вручную. При работе блока в составе ПМУ необходимо передать значения давления от соответствующих датчиков к блоку управления. Для этого используются интерфейсные блоки, имя которых совпадает с именем оборудования – см. рис. 13. Для удобства отладки этот же блок отображает значения сигналов, полученных с датчиков.  В результате работы данного блока формируется команда на перемещение золотников в распределительных клапанах, отвечающих за ЗРА с именем 502GTV002. Во время совместного расчета значения параметров, рассчитанные в гидравлической модели, передаются в блок обработки показаний датчиков (см. рис. 14), где выполняется анализ полученных данных на достоверность, фильтрация, перевод в требуемые величины измерения. Приведенная на рисунке 14 расчетная схема обработки показаний датчиков также является полностью работоспособной программой. Для переноса данной схемы в реальную аппаратуру управления достаточно, чтобы на такте обмена данными в реальной аппаратуре в переменную «Расчетное значение» было помещено значение, полученное с платы ввода–вывода реального датчика. Данная схема также является векторной и обеспечивает обработку всех датчиков, входящих в гидравлическую схема 502.prt Разработанные и проверенные типовые расчетные блоки помещаются в библиотеку типовых решений и в дальнейшем используются другими разработчиками для всего оборудования данного типа. После отладки и проверки всех необходимых расчетных схем типовых программ разработка управляющего ПО любого подводного модуля становится наглядной, простой и эффективной. Добавить любое оборудование можно в два шага: Методология ООП в графических языках в действии. Проверенные путем изолированного моделирования расчетные модули управляющего ПО запускаются в расчет совместно с математической моделью гидравлической системы СПД. Рассчитанные значения передаются в блок обработки сигналов датчиков и направляются в алгоритмы обработки. Физическая модель оборудования позволяет оценить работу системы в динамике и проверить принимаемые проектные решения в динамических режимах. Такая модель уже вполне может подтвердить выполнения требования к управляющему ПО типа приведенного выше. «При превышении давления выше предельного, время открытия (закрытия) предохранительного клапана не должно превышать 5 секунд»  Например, для гидравлической системы управления подводной добычей важным фактором является сохранение давления в подводных аккумуляторах. Отсутствие давления в гидроаккумуляторе делает невозможным работу гидравлической системы управления. После активного использования гидравлической системы необходимо время для восстановления давления за счет работы наземной гидравлической станции. Модель позволяет оценить снижение и скорость восстановления давления при открытии и закрытии арматуры. Для этого мы выдаем команды на открытие и закрытие и оцениваем переходной процесс. А поскольку мы работаем с графическим языком и визуальной системой моделирования, все, что происходит в управляющем ПО и проектируемой системе, становится наглядно и понятно. Программист может видеть, как работает объект, а инженер-гидравлик видит, как работает программа. Расчетное моделирование отображается прямо на расчетной схеме, что позволяет оценить положение запорно-регулирующей арматуры (см. рис. 15). 
Рисунок 15. Отображение положения клапана на расчетной схеме. Также можно посмотреть состояния клапанов. Например, распределительные клапаны отображают положение подключения гидравлических линий сравните положения РК9, РК10 и РК7, РК8 (см. рис. 16). 
Рисунок 16. Распределительные клапаны гидросистемы. Схема алгоритма при моделировании отображает значения сигналов на линиях связи (см. рис. 17). Управляющее ПО, созданное в графическом виде, понятно даже не программисту. Да и программисту тоже удобнее разбираться с графическим видом, чем с тем, что напрограммировали другие разработчики или он сам несколько лет назад. 
Рисунок 17. Схема алгоритма в режиме отображения параметров. Ну, и конечно, проверка соблюдения требования и параметров работы управляющего ПО. На графике 18 представлен процесс изменения давления в аккумуляторе и расхода при открытии и закрытии одновременно двух клапанов. Можно оценить просадку давления, расход гидравлической жидкости и время восстановления давления.  На графике 19 представлен процесс открытия и закрытия одного клапана. 
Рисунок 18. Результаты моделирования работы 2-х ЗРА. 
Рисунок 19. Результаты моделирования работы одной ЗРА. Сравнение графиков показывает, что, когда гидравлическая система открывает два клапана одновременно, время открытия увеличивается почти в два раза, и давление в гидроаккумуляторе снижается до 30,5 МПа, а если открывать только один клапан, то давление снижается до 32, МПа.  На этом графике мы видим очевидную проверку требования типа «При повышении давления предельного значения время закрытия (открытия) предохранительного клапана должно составлять не более 5 секунд» На графике видно, что два клапана одновременно открываются за 5 секунд, при полностью заряженном гидроаккумуляторе. Отсюда можно сделать вывод, что для удовлетворения требования «закрытия (открытия) аварийного клапана за 5 сек», мы должны одновременно открывать или закрывать только одну арматуру ЗРА, подключенную к тому же аккумулятору, что и аварийный клапан, и выдерживать после каждой операции не менее 8 секунд (время восстановления давления в гидроаккумуляторе). В противном случае мы можем не обеспечить требуемое время закрытия (открытия аварийного клапана). Правильное модельно-ориентированное проектирование систем управления, должно содержать математическую модель объекта! Математическая модель объекта значительно повышает качество тестирования управляющего программного обеспечения. Математическая модель позволяет оценить переходные процессы и проверить выполнение требований в различных режимах работы объекта.  В приведенном простом примере для подводного добычного комплекса математическая модель позволяет оценить величину снижения давления в гидроаккумуляторах и время восстановления давления при различных режимах работы. Эти данные используются для настройки временных задержек и блокировок в системе управления.  Без модели технического объекта мы можем получить ситуацию, когда отлаженные автономно управляющие программы, безошибочно работающие в нормальных режимах, приведут к том, что на объекте гидроаккумуляторы будут опустошены в самый неподходящий момент. И операторы с удивлением обнаружат, что что-то пошло не так, как планировалось при разработке. Пользуйтесь правильным модельно-ориентированным проектированием, и будет вам счастье!  В качестве бонуса, тем кто дочитал — короткое видео с демонстрацией работы модели. Моделирование сложных технических систем