Как сделать модель в simulink

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

Далее мы расскажем о том, как создать модель энергосистемы в среде Simulink и записать результаты ее работы в файлы формата COMTRADE для дальнейшего использования в ходе испытаний устройств и алгоритмов РЗА.

В области РЗА моделирование позволяет наглядно изучить принципы и особенности работы элементов энергетической системы, закрепить теоретические знания, полученные из учебников и специализированной литературы. Кроме того, компьютерная техника позволяет выполнить модель реального устройства релейной защиты и автоматики и проанализировать его поведение в различных режимах работы защищаемого объекта.

Моделирование позволяет инженеру не только проанализировать теоретические вопросы, но дает возможность выполнить конкретные практические эксперименты. Такой подход полезен как при разработке цифровых устройств, так и в процессе их наладки и эксплуатации.

Для проведения практических исследований инженеру необходимо:

  1. Создать и верифицировать модель энергосистемы;
  2. Определить перечень и параметры исследуемых режимов (тип и место возникновения короткого замыканий (КЗ) и пр.);
  3. Провести вычисление исследуемых режимов и сохранить данные в формате COMTRADE ;
  4. Выполнить испытания цифровой модели устройства РЗА;
  5. Выполнить испытания исследуемого устройства РЗА, путем подачи на него реальных токов и напряжений, воспроизведенных из записанных ранее файлов в формате COMTRADE , например, с помощью РЕТОМ-51;
  6. Сопоставить результаты работы исследуемого устройства РЗА с его теоретической моделью, проанализировать выявленные отклонения и принять соответствующие меры.


COMTRADE (IEEE Standard Common Format for Trancient Data Exchange for Power Systems) — это международный формат записи осциллограмм, предназначенный для хранения информации о значениях и параметрах электрических сигналов. На момент написания данной статьи актуальной версией стандарта является C37.111-2013.

В Simulink данная модель может быть упрощенно представлена в следующем виде:


Рисунок 1 – упрощенная модель энергосистемы с двухобмоточным понижающим трансформатором и симметричной нагрузкой.

На рисунке 1 оранжевым цветом представлены элементы моделируемой сети, желтым — блоки измерения токов и напряжений, белым — блоки параметров модели.

В блоке имитаторе КЗ задано двухфазное КЗ между фазами А и С на интервалах времени с 0,3 по 0,4 с и с 0,6 по 1 с от момента начала расчета. Фазные токи на стороне ВН трансформатора, полученные в результате работы модели, представлены на рисунке 2.


Рисунок 2 – результаты моделирования двухфазного КЗ на стороне НН силового трансформатора

Съём данных с модели и их передача в рабочую область MATLAB для сохранения в файлы формата COMTRADE выполняется следующей схемой:


Рисунок 3 – схема съема данных с измерителей и передачи в MATLAB с наложением шкалы времени

Для скачивания доступны следующие файлы:

    – файл модели в Simulink , представленной на рисунках 1 и 3; – файл MATLAB , преобразующий данные с рисунка 2 в файлы формата COMTRADE ; – вспомогательный файл MATLAB , преобразующий формат каналов.

Для генерации осциллограммы в формате COMTRADE необходимо выполнить следующие действия:

  1. Запустить M . slx ;
  2. В открывшемся окне Simulink нажать кнопку Run (произойдет моделирование КЗ);
  3. Двойным щелчком левой кнопки мыши открыть осциллограф. Удостовериться, что картина переходного процесса соответствует приведенной на рисунке 2;
  4. Запустить comtrade _ generator . m и в окне MATLAB нажать кнопку Run (произойдет сохранения результатов моделирования КЗ в файлы формата COMTRADE ).

Результатом успешного выполнения действий 1 – 4 будет генерация и сохранение двух файлов M . cfg и M . dat , файлы будут сохранены там же где расположен файл comtrade _ generator . m

Файл с расширением *. dat содержит данные по каналам, файл с расширением *. cfg – описание каналов (наименования каналов, коэффициенты приведения, частоту дискретизации, время записи осциллограммы и прочее).


Рисунок 4 – COMTRADE из М.slx открыт в инструменте анализа осциллограмм KIWI

Изучив рекомендуемую литературу, а также текст стандарта IEC 60255-24, описывающий формат COMTRADE , Вы сможете усовершенствовать предложенную модель. Например, записать в осциллограмму не только токи на стороне ВН, но и напряжения.

Полученный на данном этапе результат позволит Вам перейти к следующим, более трудоемким шагам:

Для запуска программы необходимо предварительно запустить пакет MatLAB. После открытия основного окна программы MatLAB нужно запустить программу Simulink. Это можно сделать одним из следующих способов:

  • - с помощью кнопки Й на панели инструментов командного окна MatLAB (при этом вызывается окно браузера, называемое также окном обозревателя библиотеки - Simulink Library Browser);
  • - набором в строке командного окна слова Simulink с последующим нажатием клавиши [Enter] на клавиатуре (также вызывается окно браузера);
  • - последовательным выбором пунктов меню File (Файл) —>New (Новый) —>Model (Модель) —> открывается окно для создания S- или SPS-модели;
  • - с помощью кнопки открытия документа на панели инструментов (вызывается окно с построенной ранее моделью, сохраненной в виде mdl-файла).

Создание S- или SPS-модели

Для создания S- или SPS- модели необходимо последовательно выполнить ряд действий:

Основные операции при создании и редактировании модели

Для выделения нескольких объектов необходимо выполнять однократные клики ЛКМ по пиктограммам блоков с удержанием клавиши [Shift],

Для выделения фрагмента модели (группы блоков) необходимо установить курсор мыши вблизи группы объектов, нажать ЛКМ и, удерживая ее, начать перемещение мыши. В результате вокруг выделяемых объектов появиться пунктирная рамка, размеры которой будут изменяться при перемещении мыши. Все охваченные рамкой объекты становятся выделенными.

  • 1.2.3.3 Копирование блока. В процессе создания и редактирования модели необходимо копировать блоки, в том числе и из другой модели в текущую модель. Для этого необходимо открыть окно модели-прототипа, выделить нужный блок и перетащить его, нажав и не отпуская правую клавишу мыши (ПКМ), в окно создаваемой (редактируемой) модели. Скопированный блок получает те же значения настраиваемых параметров, что и блок-оригинал. Копировать блоки можно и другим способом. Для этого необходимо выполнить следующие действия:
    • - выделить блок;
    • - выбрать команду Edit (Правка ) —>Сору (Копировать) или нажать кнопку ЧЗ на панели инструментов, также можно нажать ПКМ (курсор предварительно навести на выделенный блок) и выбрать в появившемся контекстном меню команду Сору (Копировать).
    • - сделать активным окно, в которое нужно скопировать блок;
    • - в этом окне на панели инструментов выбрать команду Edit —> Paste (Правка —> Вставить) или нажать на кнопку ®, также можно нажать ПКМ на свободном месте в окне модели и выбрать в появившемся контекстном меню команду Paste (Вставить).

    Чтобы создать копию блока внутри модели достаточно выделить нужный блок, а затем выполнить одно из следующих действий:

    - нажать сочетание клавиши [Ctrl] + ЛКМ и, не отпуская их, перенести блок на свободное место в окне модели;

    Каждому из скопированных блоков автоматически присваивается имя с добавлением порядкового номера. Пользователь может переименовать блок.

    Необходимо отметить, что при выполнении данных операций объекты помещаются в собственный буфер MatLAB и недоступны для других приложений. Использование команды Edit Copy model to clipboard позволяет поместить графическое изображение модели в буфер Windows и, соответственно, делает его доступным для остальных программ.

    1.2.3.4 Перемещение блоков в модели. Любой блок модели можно переместить, выделив его, и передвинув, держа нажатой ЛКМ. При этом автоматически будут перерисованы линии связей перемещенного блока с другими (соединительные линии не разрываются, а лишь сокращаются или увеличиваются в длине).

    Также блок можно переместить кнопками , —> расположенными на кла

    виатуре, предварительно блок следует выделить.

    Для одновременного перемещения нескольких блоков вместе с соединительными линиями следует выделить нужную область рамкой, а затем переместить с помощью ЛКМ один из выделенных блоков в нужное место. Остальные блоки займут новые места. Все относительные расстояния между выделенными блоками и линиями при этом сохранятся.

    1.2.3.5 Удаление блоков. Для удаления блоков из модели, необходимо их вы

    делить и нажать клавишу [Delete] или [Backspace] на клавиатуре, также можно воспользоваться командами Edit Delete (Правка —> Удалить), Edit Cut (Правка

    Вырезать) или кнопкой X на панели инструментов. В случае использования команды Edit —> Cut (Правка —> Вырезать) или кнопки & объекты будут вырезаны (перемещены в буфер) и их можно вставить обратно в модель, воспользовавшись командой Edit —> Paste (Правка Вставить) или кнопкой ® на панели инструментов.

    При наличии соединения удаляемого блока с другим блоком линия соединения останется, но изменит свой цвет, станет пунктирной и должна быть либо удалена отдельно, либо подключена к другому блоку.

    1.2.3.6 Установка параметров блока. Параметры блока устанавливаются в диалоговом окне его настройки, которое вызывается двойным кликом ЛКМ на пиктограмме блока.

    После внесения изменений нужно закрыть окно кнопкой ОК.

    В результате применения одного из способов между блоками появится соединительная линия, стрелка на конце которой будет указывать направление передачи сигнала. Если между блоками появилась связь, то линия будет сплошной и черного цвета, если связи нет - пунктирной и красного цвета.

    • 1.2.3.7.2 Создание разветвления линии. Для создания точки разветвления в соединительной линии необходимо подвести курсор мыши к предполагаемому узлу и, нажав ПКМ, протянуть линию к входному порту нужного блока. Можно воспользоваться и другим способом: входной порт блока подключить к уже существующей линии.
    • 1.2.3.7.3 Создание петли линии выполняется аналогично перемещению блока. Линия соединения выделяется, и затем нужная часть линии перемещается.
    • 1.2.3.7.4 Удаление линий выполняется также как и удаление любых других объектов.
    • 1.2.3.7.5 Отделение блока от линии. Для отделения блока необходимо подвести к нему курсор мыши, нажать клавишу [Shift] + ЛКМ, не отпуская их переместить блок на другое место.
    • 1.2.3.8 Изменение размеров блока. Для изменения размеров блока необходимо выделить блок, установить курсор мыши в один из углов блока и, нажав ЛКМ, изменить размер блока (курсор при этом превратится в двухстороннюю стрелку).
    • 1.2.3.9 Изменение имени блока. Чтобы ввести новое имя блока выполняется однократный клик ЛКМ по старому имени. Имя блока будет обведено рамкой и появится текстовый курсор, после чего можно редактировать имя.

    Не допускается отсутствие имени блока (пустая строка) и наличие в одном окне блоков с одинаковыми именами.

    При работе с блоками можно изменять пиктограммы и их окраску, разворачивать на плоскости, изменять и перемещать их названия (блочные подписи), шрифт текста и т. д. Команды форматирования блоков располагаются в меню Format (Формат), а также и в контекстном меню, вызываемом нажатием ПКМ на блоке.

    1.2.3Л0 Форматирования блока. Некоторые команды форматирования блоков:

    Font - Форматирование шрифта надписей и текстовых блоков.

    Show /Hide name - Отображение или скрытие подписи блока.

    Flip пате - перемещение подписи блока.

    Flip block - поворот блока на 180° относительно вертикальной оси.

    Rotate block - вращение блока на 90° по часовой стрелке.

    Show drop shadow - отображение тени от блока.

    Show port labels - показ меток портов.

    Foreground color - выбор цвета линий для выделенных блоков.

    Background color - выбор цвета фона выделенных блоков.

    Для наглядности и удобств линии можно снабдить метками, указывающими, какие сигналы по ним проходят. Чтобы создать метку сигналов, нужно дважды щелкнуть на сегменте линии и затем ввести текст метки.

    1.2.3.11 Добавление текстовых надписей. Для повышения наглядности модели удобно использовать текстовые надписи. Для создания надписи нужно указать мышью место надписи и дважды кликнуть ЛКМ. После этого появится прямоугольная рамка с курсором ввода.

    В прошлой серии ликбеза мы говорили о том, как создать модель, в которой одна и та же подсистема будет представлена разными моделями. Мы делали это, чтобы оценить разные структурные реализации одного и того же функционального блока - исполнительного устройства. Нужно было понять, как разные реализации (в нашем случае гидравлическая и электрическая) будут влиять на систему, оценить возможные размеры компонентов подсистемы, выполняемость всей системой требований. Решим, что мы определились с реализацией исполнительного устройства (это будет гидропривод). Более того: решим, что мы и систему управления настроили (об этом я напишу в другой раз: до сих пор мы об этом не говорили применительно к элерону).

    Сейчас у нас есть работающая модель объекта (элерона, гидропривода), которой мы довольны. У нас есть настроенная модель системы управления (выбрана структура системы управления, заданы параметры системы управления). Мы хотим использовать эти модели вне среды виртуальной симуляции. Например, у нас уже есть запрограммированный в соответствии с моделью системы управления контроллер, но нет объекта. И мы хотим проверить его работоспособность, учитывая обмен данными с настоящим объектом. Для этого нам нужна аппаратура, которая способна исполнять модель объекта (она уже есть у нас) в режиме жесткого реального времени. Эта аппаратура должна обладать такими интерфейсами, какие есть у реального объекта, чтобы контроллер "думал", что он общается с реальным объектом.

    Чтобы "вынимать" машиночитаемые модели из среды MATLAB/Simulink, существует генератор кода. Он выдает описание, соответствующее модели (тут нужно отметить, что это соответствие вообще-то нужно подтверждать, и для этого есть специальные практики; но об этом мы не говорим в этом посте), на языке C. Это описание компилируется и исполняется в режиме реального времени. Проблема с нашей моделью в том, что в ней присутствуют компоненты, которые описаны при помощи так называемой жесткой системы дифференциальных уравнений. Это такая система, в которой есть существенно (на несколько порядков) отличающаяся по скорости динамика. Как правило, физические (акаузальные) модели все такие. если их решать обычными численными методами, то чтобы обеспечить точность, необходимо выбирать слишком маленький шаг интегрирования (из-за быстрой динамики). Это здорово замедляет вычисления, и не то, что о реальном времени, о простой виртуальной симуляции речи идти не может. Поэтому для таких систем и рекомендуют применять специальные неявные методы. Они могут "игнорировать" быструю, но не слишком влияющую на результат динамику. Однако, они более требовательны к вычислительным мощностям, чем явные методы.

    Всё это верно и для Simulink. На всех предыдущих шагах ликбеза с физическими моделями мы применяли неявные методы. Но заметим, что применяли мы их ко всей модели системы, тогда как жесткими уравнениями описывается только ее часть. Вычислительный ресурс - довольно дорогое удовольствие, и вряд ли правильно тратить его на обсчет неявными методами того, что можно считать явными. Кроме того, всё это время мы использовали численные методы с переменным шагом (они обеспечивают заданную точность, но шаг интегрирования может быть какой угодно). Это неприемлемо для вычислений в реальном времени. Всё это надо перенастроить перед тем, как делать из модели код (то есть, выносить ее из среды виртуального моделирования для запуска на другой платформе в реальном времени). Этим и займемся.

    Рис. 1. Модель, подготовленная для виртуальной симуляции.

    У нас есть модель гидравлического исполнительного устройства, системы управления и механическая модель элерона. До сих пор мы использовали метод решения дифференциальных уравнений с переменным шагом, гарантирующий определенную точность вычислений. Теперь мы хотим запустить эту модель в режиме жесткого реального времени. Для этого необходимо использовать метод с фиксированным шагом.

    Рис. 1. Модель, подготовленная для виртуальной симуляции.

    Рис. 2. Возможный вариант выбора численных методов, неприемлемый из-за нагрузки на вычислитель.

    Однако, часть нашей модели описывает численно жесткую задачу. Нам нужно выбрать такие настройки методов решения уравнений, которые позволят исполнить модель системы в режиме жесткого реального времени. Для этого мы будем использовать локальные методы Simscape (Simscape Local Solvers). Мы могли бы попробовать считать модель всей системы в реальном времени, используя неявные методы с фиксированным шагом. Однако для этого нам потребуется гораздо больше вычислительных ресурсов, чем на самом деле нужно для обсчета нежесткой части нашей системы.

    Рис. 2. Возможный вариант выбора численных методов, неприемлемый из-за нагрузки на вычислитель.

    Рис. 3. Правильный выбор методов решения для симуляции в реальном времени.

    Поэтому мы применим неявный метод с фиксированным шагом к численно жесткой задаче, соответствующей физической сети нашей модели. К остальной части модели мы применим явный метод.

    Рис. 3. Правильный выбор методов решения для симуляции в реальном времени.

    Мы настроим соответствующим образом модель, сгенерируем код и загрузим его на программно-аппаратную платформу для вычислений в режиме жесткого реального времени. Будет показано, что результаты моделирования с фиксированным шагом будут сравнимы с результатами, полученным с переменным шагом.

    Рис. 4. Блок-схема верхнего уровня модели системы.

    У нас есть трехмерная механическая модель элерона, описанная в SimMechanics. Гидравлическое исполнительное устройство описано в SimHydraulics. В модели есть оборотные клапаны, трубопроводы, предохранительные клапаны и цилиндр двухстороннего действия. Модель системы управления описана в Simulink.

    Рис. 4. Блок-схема верхнего уровня модели системы.

    Рис. 5. Результаты моделирования с применением методов с переменным шагом.

    Во-первых, запишем эталонные результаты. Эталонными мы будем считать результаты, полученные с использованием метода решения уравнений с переменным шагом ODE15s. Сохраним результаты на графике, чтобы было проще сравнивать их с результатами моделирования с фиксированным шагом.

    Рис. 5. Результаты моделирования с применением методов с переменным шагом.

    Рис. 6. Сравнение результатов симуляции с применением разных методов интегрирования.

    Настроим модель для счета по методу с фиксированным шагом, перезапустим моделирование. Сравним вновь полученные результаты с эталонными. Видно, что результаты достаточно близки. Если изменить масштаб, можно увидеть, насколько точные результаты мы получили на самом деле.

    Рис. 6. Сравнение результатов симуляции с применением разных методов интегрирования.

    Рис. 7. Сравнение результатов виртуальной симуляции и симуляции в реальном времени.

    Теперь мы сгенерируем C-код из модели, скомпилируем его и загрузим его на целевую платформу для исполнения в реальном времени. Для исполнения модели в реальном времени используем операционную систему xPC Target и оборудование Speedgoat. Переключим режим исполнения модели в External. Так мы сможем управлять процессом из Simulink. Запустим модель на целевой платформе. Результаты можно наблюдать на виртуальном осциллографе в Simulink и на экране Speedgoat. Но вычисления при этом идут только на компьютере Speedgoat в режиме реального времени. Добавим результаты моделирования на график.

    Рис. 7. Сравнение результатов виртуальной симуляции и симуляции в реальном времени.

    Видно, что результаты моделирования в реальном времени совпадают с результатами, полученными в виртуальной среде с методом с фиксированным шагом. Итак, нам удалось настроить модель таким образом, чтобы провести моделирование в реальном времени. Эксперимент прошел удачно, без превышения времени, отведенного на каждую итерацию.

    Я супер новичок в моделях Simulink и системах управления. У меня есть модель .slx Simulink для системы динамики дронов. Он принимает два входа (roll cmd, pitch cmd) и выводит скорость x, скорость y, положение x и положение y.

    Отсюда кажется, что я могу открыть систему, позвонив

    simulink model

    Но как мне поместить входные данные и получить выходные значения? Есть ли способ, которым я могу сделать это в графическом интерфейсе?

    РЕДАКТИРОВАТЬ: Вот полный макет моей модели:

    Я получил предупреждение:

    Как получить выходные данные с номерами портов? Я попытался

    [vx, vy, px, py] = sim ('SimpleDroneDynamics.slx');

    И получил ошибку, сказав

    1. Есть ли способ непрерывной подачи входных данных на каждом временном шаге? Будучи модулем контроллера, я думаю, что должен вводить разные значения в зависимости от выходного положения и скорости.

    EDIT2: я использую Matlab2017a

    2 ответа

    Прежде всего, в модели Simulink используется основное рабочее пространство Matlab. Таким образом, вы можете изменить значения переменных в командном окне (или просто в вашем скрипте) и запустить модель Simulink.

    Есть несколько способов инициализации этой константы для Simulink. Еще один полезный способ - создать скрипт, содержащий все ваши переменные, и загрузить его при запуске модели Simulink. Вы можете сделать это, добавив имя скрипта в Simulink / Model Explorer / Callbacks. (Существуют разные обратные вызовы - при загрузке, при запуске и т. Д.). Подробнее об этом читайте: здесь.

    Теперь вы можете запустить симуляцию, используя функцию sim :

    name_of_model должен содержать путь, если модель не находится в активной папке MATLAB (активную папку вы можете увидеть в окне matlab прямо под главным меню).

    Существуют различные свойства функции sim , прочтите о них в справке, это может быть полезно для вас. Кстати, вы можете изменить некоторые параметры вашей модели, используя sim . Вы даже можете найти любой блок в вашей модели и изменить его свойства. Подробнее о sim и о поиск текущих блоков. Интересно, что последнее решение даст вам возможность изменять параметры во время симуляции!

    О получении вывода. После запуска симуляции вы получаете переменную tout в основном рабочем пространстве. Это массив временных шагов. Но если вы добавите блок вывода (как на моем изображении), вы также получить другую переменную в рабочей области yout . yout - это наборы данных. Он содержит все ваши выходные значения. Для 2-х аутпортов например:

    Получить значения любого из аутпортов:

    это тип данных временного ряда, поэтому:

    yout.get(1).Values.Time - дать вам время

    yout.get(2).Values.Data - каждый раз выдаю вам значения этого вида

    У нас есть еще один метод для получения выходных значений:

    он возвращает двойные массивы. t - временной массив, y - матрица всех выходных значений (она уже двойная и содержит только значения без времени, но для каждого времени моделирования!)

    Так что теперь вы можете создавать общий графический интерфейс Matlab и работать с этими переменными! Нет никаких сложностей. Вы можете прочитать больше о графическом интерфейсе для Simulink .

    О первых двух пунктах вашего вопроса:

    В Simulink .

    simulink block diagram

    • Для входных данных вы можете использовать постоянный блок, а если дважды щелкнуть входной блок, вы можете назначить значение, которое может быть переменной рабочей области.

    constant block

    Чтобы получить выходные данные в ваше рабочее пространство, вы можете использовать блок simout (убедитесь, что вы сохранили формат в массив).

    Подключите входы к вашей модели Simulink

    Подключите выходы вашей модели Simulink к блокам Simout.

    Сценарий MATLAB

    О третьем пункте вашего вопроса

    Вы можете определить продолжительность вашего моделирования в редакторе блок-схем. Вы можете поместить переменную, которая определена в вызывающем скрипте. Есть несколько способов получения зависящих от времени входных переменных:

    Один вариант, который я лично не рекомендую, это использовать цикл for и вызывать модель simulink с разными значениями roll и pitch .

    Второй и более эффективный подход заключается в замене постоянных блоков на другие исходные блоки, такие как сигналы линейного изменения или синусоидальные сигналы.

    Читайте также: