Научная статья на тему 'О ВЗАИМОДЕЙСТВИИ SIMULINK-МОДЕЛЕЙ СЛОЖНЫХ И ИНТЕЛЛЕКТУАЛЬНЫХ СИСТЕМ С ПРОГРАММАМИ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ'

О ВЗАИМОДЕЙСТВИИ SIMULINK-МОДЕЛЕЙ СЛОЖНЫХ И ИНТЕЛЛЕКТУАЛЬНЫХ СИСТЕМ С ПРОГРАММАМИ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
56
7
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
MATLAB / SIMULINK-МОДЕЛИ / ЯЗЫКИ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ С / С++ / S-ФУНКЦИИ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ермаков С.Г., Забродин А.В., Красновидов А.В., Хомоненко А.Д.

Пакет MatLab и его расширение в виде системы блочного моделирования Simulink образуют наглядное и эффективное средство моделирования сложных и интеллектуальных систем. Эта связка предоставляет один из эффективных способов, позволяющих сократить время на определение оптимальных параметров управляющих воздействий при моделировании. Дальнейшее повышение эффективности моделирования сложных и интеллектуальных систем можно достигнуть на основе использования языков программирования высокого уровня. Цель исследования состоит в рассмотрении приемов взаимодействия MatLab и Simulink с программами на языках высокого уровня С и С++. для повышения эффективности процесса моделирования. Методы и средства. Реализовано взаимодействие между пакетами MatLab и Simulink с помощью следующих способов: выполнения файла из окна S-модели, а также путем запуска S-модели из командной строки MatLab или из m-файла с последующей обработкой результатов моделирования программными средствами MatLab и языков программирования С или С++. Результаты. Выполнена практическая реализация взаимодействия указанных средств (Matlab+Simulink+языки программирования высокого уровня C или C++). Практическая значимость. Представлены программные реализации по созданию S-функций 1 и 2 уровней с демонстрацией результатов работы и рассмотрена реализация S-функций на языке высокого уровня. Предложенная организация взаимодействия MatLab, Simulink и языков C или C++ позволяет повысить эффективность имитационного моделирования систем.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

INTERACTION SIMULINK-MODELS OF COMPLEX AND INTELLIGENT SYSTEMS WITH PROGRAMS IN HIGH-LEVEL LANGUAGES

The MatLab package and its extension in the form of Simulink block modeling system form a visual and effective tool for modeling complex and intelligent systems. This bundle provides one of the most effective ways to reduce the time to determine optimal parameters of control actions in the simulation. A further increase in the efficiency of modeling complex and intelligent systems can be achieved through the use of high-level programming languages. The purpose of the study is to consider the methods of interaction between MatLab and Simulink with programs in high-level languages C and C++. to improve the efficiency of the modeling process. Methods and means. Interaction between the MatLab and Simulink packages is implemented using the following methods: executing a file from the S-model window, as well as by launching the S-model from the MatLab command line or from an m-file, followed by processing the simulation results using MatLab software and C or C programming languages ++. Results. A practical implementation of the interaction of these tools (Matlab + Simulink + high-level programming languages C or C++) has been completed. Practical significance. Software implementations for creating S-functions of levels 1 and 2 are presented with a demonstration of the results of work and the implementation of S-functions in a high-level language is considered. The proposed organization of the interaction between MatLab, Simulink and C or C++ languages makes it possible to increase the system simulation efficiency.

Текст научной работы на тему «О ВЗАИМОДЕЙСТВИИ SIMULINK-МОДЕЛЕЙ СЛОЖНЫХ И ИНТЕЛЛЕКТУАЛЬНЫХ СИСТЕМ С ПРОГРАММАМИ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ»

О ВЗАИМОДЕИСТВИИ SIMULINK-МОДЕЛЕИ СЛОЖНЫХ И ИНТЕЛЛЕКТУАЛЬНЫХ СИСТЕМ С ПРОГРАММАМИ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

Ермаков Сергей Геннадьевич,

Петербургский государственный университет путей сообщения Императора Александра I, Санкт-Петербург, Россия, ermakov@pgups.ru

Забродин Андрей Владимирович,

Петербургский государственный университет путей сообщения Императора Александра I, Санкт-Петербург, Россия, ivs@pgups.ru

Красновидов Александр Владленович,

Санкт-Петербург, Россия, alexkrasnovidow@mail.ru

Хомоненко Анатолий Дмитриевич,

Петербургский государственный университет путей сообщения Императора Александра I, Санкт-Петербург, Россия, khomon@mail.ru

DOI: 10.36724/2072-8735-2022-16-12-23-31

Manuscript received 14 October 2022; Accepted 28 November 2022

Ключевые слова: MatLab, Simulink-модели, языки программирования высокого уровня С, С++, S-функции

Пакет Ма^аЬ и его расширение в виде системы блочного моделирования 91тиПпк образуют наглядное и эффективное средство моделирования сложных и интеллектуальных систем. Эта связка предоставляет один из эффективных способов, позво-ляю-щих сократить время на определение оптимальных параметров управляющих воздействий при моделировании. Дальнейшее повышение эффективности моделирования сложных и интеллектуальных систем можно достигнуть на основе использования языков программирования высокого уровня. Цель исследования состоит в рассмотрении приемов взаимодействия Ма^аЬ и в1ти!1пк с программами на языках высокого уровня С и С++. для повышения эффективности процесса моделирования. Методы и средства. Реализовано взаимодействие между пакетами Ма^аЬ и в1ти!1пк с помощью следующих способов: выполнения файла из окна в-модели, а также путем запуска в-модели из командной строки Ма^аЬ или из т-файла с последующей обработкой результатов моделирования программными средствами Ма^аЬ и языков программирования С или С++. Результаты. Выполнена практическая реализация взаимодействия указанных средств (Ма^аЬ+91тиПпк+языки программирования высокого уровня С или С++). Практическая значимость. Представлены программные реализации по созданию в-функций 1 и 2 уровней с демонстрацией результатов работы и рассмотрена реализация в-функций на языке высокого уровня. Предложенная организация взаимодействия Ма^аЬ, в1ти!1пк и языков С или С++ позволяет повысить эффективность имитационного моделирования систем.

Информация об авторах:

Ермаков Сергей Геннадьевич, д.т.н., профессор, и.о. зав. кафедрой "Информационные и вычислительные системы" Петербургского государственного университета путей сообщения Императора Александра I, г. Санкт-Петербург, Россия Забродин Андрей Владимирович, к.и.н., доцент кафедры "Информационные и вычислительные системы" Петербургского государственного университета путей сообщения Императора Александра I, г. Санкт-Петербург, Россия Красновидов Александр Владленович, к.т.н, доцент, г. Санкт-Петербург, Россия

Хомоненко Анатолий Дмитриевич, д.т.н., профессор, профессор кафедры, "Информационные и вычислительные системы" Петербургского государственного университета путей сообщения Императора Александра I, г. Санкт-Петербург, Россия

Для цитирования:

Ермаков С.Г., Забродин А.В., Красновидов А.В., Хомоненко А.Д. О взаимодействии simulink-моделей сложных и интеллектуальных систем с программами на языках высокого уровня // T-Comm: Телекоммуникации и транспорт. 2022. Том 16. №12. С. 23-31.

For citation:

Ermakov S.G., Zabrodin A.V., Krasnovidov A.V., Homonenko A.D. (2022). Interaction simulink-models of complex and intelligent systems with programs in high-level languages. T-Comm, vol. 16, no.12, pp. 23-31. (in Russian)

Введение

Важным достоинством инструментального пакета MatLab является возможность моделирования сложных и интеллектуальных систем с помощью подсистемы блочного имитационного моделирования Simulink [1, 2]. В ней разработка программы и задание исходных характеристик исследуемых систем выполняется визуально - путем сборки схемы соединений элементарных блоков - стандартных или пользовательских. Тем самым конструируется так называемая S-модель системы. Для ее хранения используются файлы с расширением mdl или six. Таким образом, в Simulink реализован принцип визуального программирования. При этом каждый из элементарных блоков модели реализует определенную математическую функцию.

С помощью подсистемы Simulink при моделировании сложных и интеллектуальных систем обеспечивает [3]:

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

• Реализацию программных методов численного интегрирования дифференциальных уравнений с настраиваемым шагом с помощью решателей (Solvers).

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

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

• Быструю и удобную визуализацию результатов моделирования.

Практические примеры моделирования сложных и интеллектуальных систем с помощью пакета Simulink, в частности, рассматриваются в статьях [4-7]. Однако, моделирование в среде Simulink имеет некоторые недостатки и неудобства, в частности:

• Жесткая и не всегда удобная для дальнейшего использования форма графического представления информации в блоках из раздела Sinks.

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

• Отсутствие возможности оперативно изменять исходные данные и параметры модели в диалоговой форме.

Последние два недостатка отсутствуют при программной реализации процесса моделирования. Отсюда следует целесообразность объединения преимуществ этих двух средств моделирования, организовав взаимодействие между MatLab и Simulink.

Основными способами организации такого взаимодействия являются:

• Выполнение файла из окна S-модели.

• Обмен данными и сигналами.

• Запуск S-модели из командной строки MatLab или из m-файла с последующей обработкой результатов моделирования программными средствами MatLab;

Выполнение файла из окна S-модели заключается в выполнении S-функции. В системе MatLab реализован механизм преобразования функций (методов), написанных на языках программирования высокого уровня (ЯВУ), в S-модели. Начиная с версии MatLab R2010, такими языками программирования являются собственно язык MatLab, а также С, С++ и Fortran. S-функции представляют собой динамически связанные подпрограммы, которые исполнительный механизм

MatLab (MCR) может автоматически загружать и выполнять. Программный код любой S-функции имеет стандартную структуру. В настоящей статье анализируются основные практические аспекты создания S-функций на языках MatLab, С и С++.

S-функции

S-функции (S-functions) служат описанием Simulink-блока на одном из ЯВУ: MatLab, С, С++ или Fortran. Они предоставляют возможность пользователю создавать свои собственные блоки и добавлять их в S-модели.

Для вызова S-функции используется специальный синтаксис, определяемый интерфейсом прикладного программирования (API), который позволяет им взаимодействовать с системой Simulink.

В общем случае, S-функции определяют, как блок работает на различных этапах моделирования, таких как инициализация, обновление, производные, выходные данные и завершение. На каждом этапе моделирования механизм моделирования вызывает метод для выполнения определенной задачи.

Каждый блок S-модели, (S-блок) имеет внутренние характеристики, показанные на рисунке 1.

Рис. 1. Схема взаимосвязи характеристик состояния Б-блока

8-блок состоит из вектора входных величин и, вектора состояний х, и вектора выходных величин у, где выходы являются функцией времени работы модели, входов, параметров и состояний. Зависимости между ними представимы следующими уравнениями:

формирование выхода:

у = >хи);

обновление состояния:

= /и {и хи);

вычисление производной состояния:

(1)

(2)

dx dt

= fd (t, X

(3)

Вектор состояния может включать в себя непрерывные состояния Хс, дискретные ха, или их комбинации:

x =

*dk ■

Для всех блоков подсистема моделирования вызывает функции, вычисляющие переменные х состояния блока, их производные, и выходы у [8]. Процесс продолжается до завершения моделирования (см. рис. 2).

x

с

Собственно, моделирование выполняется путём численного интегрирования. В системе БгтиНпк имеется несколько методов интегрирования. Эти методы реализованы в виде набора т-функций, который принято называть решателем. Выбор метода интегрирования зависит от способности модели определять производные её состояний. Подробное описание решателей БгтиИпк можно найти, например, в[1].

• удобство решения задач на ЭВМ;

• единообразие описания одномерных и многомерных систем;

• возможность применения к некоторым типам нелинейных и нестационарных систем.

Таблица 1

Результаты работы 8-функции

Рис. 2. Процесс моделирования

S-функции Simulink

Для вызова S-функции используется специальный синтаксис, определяемый интерфейсом прикладного программирования (API), который позволяет им взаимодействовать с системой Simulink.

В системе Simulink, начиная с версии MatLab R2010, существуют S-функцииуровня 1 иуровня 2 [9, 10].

Создание S-функций уровня 1 на языке MATLAB

Заголовок S-функции MatLab уровня 1 имеет вид [10, 11]: [sys,xO,str,ts, simStateCompliance] = fname(t,x,u,flag,pl,p2,...),

где fname - имя S-функции.

Формальные параметры функции имеют следующий смысл (в соответствии с (1) - (3)):

t - текущее время;

х - вектор текущих состояний;

и - вектор входных сигналов;

flag - флаг - целое число, определяющее какая функция внутри S-функции выполняется при вызове;

pl,...,pn - параметры, задаваемые в окне диалога "S-function".

Результат, возвращаемый S-функцией в момент t, зависит от значений параметров flag, х и и.

Результаты работы S-функции представлены в таблице 1.

Параметры pl,...,pn передаются в S-функцию.

В качестве примера ниже рассматривается S-функция непрерывной системы, описываемой уравнениями пространства состояния. Метод пространства состояний [12] по сравнению с классическим (частотным) методом имеет ряд преимуществ:

flag Результат Выполняемый callback-метод Описание

0 [sys,xO,str,ts] mdllnitializesizes Инициализация: Расчёт размеров матриц в возвращаемой структуре ^уч, задание начального состояния хО, определение порядка состояний в и времени расчета (е.

1 dx mdlDerivatives Расчет значений производных вектора х состояния системы.

2 ds mdlUpdate Расчет значений вектора состояний х дискретной системы в структуре 5уя = х(п+1).

3 У mdl Outputs Расчет значений выходного вектора в структуре вуя

4 tncxt mdlGetTimeOfNe xtVarHit Расчет значения времени для следующей точки дискретной части системы.

5 Зарезервировано для использования в последующих версиях.

9 И mdlTerminate Завершение работы

Требованию сохранения линейности по отношению к сумме сигналов отвечает только взвешенная сумма:

^ Ц) = Сх[$) + Бх(Г),

где г(£) - сигнал, представляющий предысторию поведения системы; г - вектор: г 6 Я"; х(£) - входное воздействие; С и О - матрицы соответствующих размерностей.

Значение г(£) должно зависеть от г(£) (для моделирования автономного поведения) и от входного сигнала х. Зависимости должны соответствовать свойству линейности. Отсюда следует дифференциальное уравнение:

dz(t) dt

= Az(t) + Bx(t).

Это - система линейных переопределенных обыкновенных дифференциальных уравнений или неавтономная динамическая система. Запись линейной системы в виде

dz(t) dt

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

= Az(t) + Bx(t);

у{1) = СгЦ) + Вх{1),

называется представлением в пространстве состояний. Здесь переменные х,у,г — вектора соответствующих размерностей п, к,т (х 6 Я", у £ Я1, г Е Ят), эта модель описывает системы с множеством входов и выходов.

7ТЛ

Схема модели приведена на рисунке 3.

Заданная скорость

Рис. 3. Структурная схема модели с S-функцией 1-го уровня

S-функция подключается к модели с помощью блока User Defined Functions | S-Function.

S-function name - имя S-функции. He должно совпадать с именем S-модели (mdl-файла). У нас имя S-функции - sfl.

S-function parameters - параметры S-функции. Записываются в окне диалога через запятую в том же порядке, что и в заголовке S-функции. Значения параметров могут быть константами, именами переменных, определенных в рабочем пространстве Workspace, или выражениями на языке MatLab. В рассматриваемом случае используются четыре параметра: pi, р2, рЗ, р4, значениями которых являются матрицы A,B,C,D.

S-function modules - параметр используется только в том случае, когда блок представляет S-функцию в виде C/C++ mex-файла (см. ниже). Окно задания параметров показано на рисунке 4.

Рис. 4. Окно параметров блока S-функции levellfuncl

Текст S-функции levellfuncl приведён на рисунке 5, результат работы модели показан на рисунке 6.

Интерфейс прикладного программирования (application programming interface - API) S-функции MATLAB уровня 2 определяет сигнатуры и общие цели методов обратного вызова, которые составляют S-функцию MATLAB уровня 2. Сама S-функция обеспечивает реализацию этих методов обратного вызова.

Реализации, в свою очередь, определяют атрибуты блока (например, порты, параметры и состояния) и поведение (например, выходные данные блока как функцию времени и входные данные блока, состояния и параметры).

function [яуя,хО,atr, t.srsimSt:at:eConipI iancej - levellfuncl (tfx.rurНад,PIfP2,P3,P4) % UNTITLED Surwnary of this function goes hero \ Detailed explanation goes here

switch flag \ b зависимости от значения переменной flag происходит % ешэоо того или иного метода:

case 0 % Инициализация |нуя,хО,я!.г# Ls, я i nS LaLeComp 1 iancel-itdlTni t.ial t/.eSi кея(Р1, Р?,РЗ,Р4) ;

case 1 i Расчет производных oyc=fndl Derivatives (t,x,u);

case 3 % Расчет значений вектора выход! 1ш сигналов sys-mdlQuLpuLs(L,х,и);

V Неиспользуемые значения переменной flag % % В примере не используются нетолы для завершения работы S-фунхции, % нет дискретных переменных состояния,

% поэтому значения переменной flag s 2, 4, 9 не используются. I Результатом S-функции и этом случае является пустая матрица.

ease \ 2, 9 } «у*-I]:

otherwise % Неизвестное значение переменной flag error (| 'Urihandled flay - %питЯк1.г (flag)]);

function [sys,xO,st r,ts,simStateCoraplianceJ mdllnitializeSizes(PI, P2, РЗ, P4)

$ Функция инициализации f 131

% Расчет начальных условий, значений вектора модельного времени, % размерности матриц

sizes ■ У'imsifc ТТефьый нычов функции simsizes издает * нничииигшкчкр-пианную структуру sizes, которую необходимо %заполнить

sizes.NumcontStates = 2; % Число непрерывных переменных состояния, sizes.NumDiscStates - 0? t Дискретных состояний лет sizes.NumtKitputs = 2? \ Количество выходных переменных (размерность \ выходного вектора)

sizes.HumInputs - 2; \ Количество входных переменных [размерность

\ входного вектора) sizes.DirFeedthrough - 1; % Прямой проход. Есть проход входного сигнала на % выход

sizos.NumSampleTimes - 1; % Размерность вектора шагон модельное нремени. sys = simsizes(sizes);

хО - zeros(2,1); % Задание иектора начальных значений переменных состояния

sit - II;

ts - [О 0J; Ч Матрица из двух колонок, задашая шаг модельного времени gimStateCoapМалое 'ниМ.йimSi.dI.fi'; % Определяет, как опрабатнндтк йдок %-при сохранении и восстановлении ^состояния модели. % Объявление глобальными переменных, необходимых для % расчетов внутри функций mdlDerivatives и »dlOutputs.

global Л В С D;

% Приём фактических параметров: A-Pl; I (Матрица системы) R-P2; \ (Матрица нхода) С-РЭ; % (Матрица выхода)

d=p4; * (Матрица обхода, т,е,, входной сигнал проходит на выход)

function sys-nxi] Derive Li уеа(1гх, и) % Функция для расчета значений производных вектора состояния непрерывной % части системы global A В; sys - А*х + В*и;

tunction sys-ir<jlOutputS (t, X, u)

$ Функция для расчета значений вектора выходных сигналов global С D; sys = С*х + D*u;

Рис. 5. Текст S-функции levellfuncl с комментариями

---- 1 I

< 1LÏ>"'LIL

-.........У

ill ЕрСН>ДННЯ

i

Рис. 6. Результат работы модели

Создание 8-функции с соответствующим набором методов обратного вызова позволяет определить тип блока, который соответствует конкретным требованиям разрабатываемого приложения. Каждая 8-функция уровня 2 МАТЬАВ должна включать следующие методы обратного вызова:

• Функция настройки для инициализации основных характеристик 8-функции.

• Функция выходов для вычисления выходов 8-функции.

Создание 8-функций уровня 2 на языке МАТЬАВ

Конкретная 8-функция может содержать и другие методы, в зависимости от требований блока, который определяет 8-функция. Практически все методы 8-функций уровня 2 имеют эквивалентные им методы среди 8-функций уровня 1. Некоторые саИЬаск-методы 8-функций уровней 1 и 2 приведены в таблице 2 [14, 15].

Для упрощения разработки пользовательских 8-функций целесообразно использовать шаблон, который находится в каталоге .. .\toolbox\simulink\block.

Таблица 2

Соответствие между саНЬаск-методами 8-функций уровней 1и 2

Выполняемый callback-метод S-функции уровня 2 Выполняемый callback-метод S-функции уровня 1

Setup (block) mdllnitializesizes

CheckParameters mdlCheckParameters

Derivatives mdlDerivatives

Disable mdlDisable

Enable mdlEnable

InitializeConditions mdllnitializeConditions

Outputs mdlOutputs

PostPropagationSetup mdlSetWorksWidth

SetlnputPortComplexSignal mdlSetlnputPortComplexSignal

SetlnputPortDataType mdlSetlnputPortDataType

SetlnputPortDimensions mdlSetlnputPortDimensionsInfo

Update mdlUpdate

Terminate mdlTerminate

Г\у

level 2funct

S-Фужция Matt ab уровня 2

IHE

Scope

Входной сигнал

Рис. 7. Структурная схема модели с S-функцией 2-го уровня

Рис. 8. Окно параметров блока S-функцни 2-го уровня

Текст S-функции level2funcl с комментариями приведен на рисунке 9.

function level2funcí(block) setup(block);

%endfunction

function setup(block)

%% Регистрация входных и выходных портов модели block.NumlmputPorts = 1; block.NumOutputPorts = 1;

%% Установка динамических свойств портов для динамического наследования

block.SetPreCompEnpPortlnfoToDynamic; block - Se tPreCompOutPort Inf oToDynarttic;

block.InputPort(1).Dimensions = 1; %Размерносгь входного порта

block.InputPort(1),DirectFeedthrough : false; ^Проход входного сигнала на выход

block.OutputPort(1).Dimensions = 1; '¿¡Размерность выходного порта

block.NumDialogPrrns = 1; I Количество параметров модели

%% Установка наследуемого шага вычислений block.SampleTimes = [-1 0];

% Обработка блока при сохранении и восстановление состояния модели % по умолчанию (т.е., как встроенный блок) block,SimStateCompliance = 1DefaultSimState';

GDoPostPropSetup); @InitConditions); @0utput); ^Update);

Анализ таблицы 2 показывает, что метод инициализации S-функции уровня 2 в качестве параметра использует структуру block. Вся необходимая для работы информация содержится в этой структуре.

В качестве примера ниже рассматривается S-функция, выделяющая положительные и отрицательные полуволны входного синусоидального сигнала и обнуляющая отрицательные полуволны. Амплитуда положительных полуволн увеличивается вр1 раз. Схема модели приведена на рисунке 7.

В окне параметров S-функции 2-го уровня отсутствует поле S-function modules. Параметры функции указываются в поле Parameters Окно параметров блока S-функции 2-го уровня показано на рисунке 8.

%% Регистрация методов обработки событий

block.RegBlockMethod('PostPropagationSetup1 block.RegBlockMethod('InitializeConditions' block.RegBlockMethod('Outputs', block.RegBlockMethod('Update',

%endfunction

function DoPostPropSetup(block)

%% Setup Dwork

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

block.NumDworks = 1;

block.Dwork(1).Name = 'xO1;

block.Dwork(1).Dimensions = 1;

block,Dwork(1).DatatypelD = 0;

block.Dwork(1).Complexity = 'Real1;

block.Dwork(1).UsedAsDiscState = false;

function InitConditions(block)

%% Initialize Dwork block.Dwork(1).Data = 0/

%endfunction

function Output(block) %Вывод результатов вычисления, block,OutputPort(1).Data = block.Dwork(1),Data;

%endfunction

function Update(block) %Вычисление функции block.Dwork(1).Data = block.InputPort(1).Data; if block.Dwork(1).Data < 0

block.Dwork(1).Data = 0; else block.Dwork (1).Data = block.Dwork(1).Data*block.DialogPrm(1).Data; end

%endfunction

Рис. 9. Текст S-функции level2funcl с комментариями

В отличие от метода инициализации S-функции уровня 1, в аналогичном методе отсутствует переменная flag, значения которой определяют выполняемый на некотором шаге callback-метод. Вместо этого происходит регистрация методов обработки событий, т. е., S-функцияуровня 2 является событийно управляемым модулем.

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

Рис. 10. Результаты моделирования

Создание S-функций на языке высокого уровня

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

Файл МЕХ - это тип, обеспечивающий интерфейс между MatLab и S-функциями, написанными на С, С++. Он означает «исполняемый файл MatLab».

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

Для разработки файлов МЕХ MatLab реализует функции передачи данных между файлами МЕХ и рабочей областью.

S-функции уровня 1 поддерживают только использование языка С. Поэтому далее рассматривается пример создания S-функции на языке С.

Simulink обеспечивает два способа создания S-функций на языке С:

• с помощью утилиты Builder (способ отличается простотой и меньшей трудоемкостью [16]);

• с помощью шаблона аналогично созданию их на языке MatLab (способ обладает наибольшими возможностями).

В статье рассматривается создание S-функций на языке С вручную.

МЕХ-файл на языке С, который определяющий блок S-функции, предоставляет информацию о модели Simulink во время моделирования. В процессе моделирования решатель ODE и МЕХ-файл взаимодействуют для выполнения определенных задач. Эти задачи включают определение начальных условий и характеристик блоков, а также вычисление производных, дискретных состояний и выходных данных.

Как и в случае с S-функциями М-файла, Simulink взаимодействует с S-функцией С МЕХ-файла, обращаясь к методам обратного вызова, которые реализует S-функция. Каждый метод выполняет предопределенную задачу, такую как вычисление выходных данных блока, необходимых для имитации блока, функциональность которого определяет S-функция. Simulink в общем определяет задачу каждого обратного вызова. S-функция может свободно выполнять задачу в соответ-

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

Набор методов обратного вызова и, следовательно, функциональность, которую могут реализовать МЕХ-файлы "С", намного больше, чем набор, доступный для S-функций М-файла [17]. Структура S-функции, реализованной на языке "С", в целом повторяет структуру S-функции М-файла, естественно, с учётом синтаксисаязыка "С".

В качестве входного параметра методов используется указатель на структуру SimStruct, объявленную в файле simstruct. h. Файл simstruct. h - это заголовочный файл языка С, который определяет структуру данных Simulink и макросы доступа SimStruct. Он инкапсулирует все данные, относящиеся к модели или S-функции, включая параметры блоков и выходные данные.

В качестве примера реализации "С" МЕХ S-функции ниже рассматривается та же задача, что была решена выше с помощью S-функций М-файла. При этом структура модели практически не изменилась (рис. 3).

В окне параметров этой S-функции вместо имени М-файла указывается имя МЕХ- файла (рис. 11), который получается в результате обработки исходного текста на языке "С" МЕХ-компилятором, как показано ниже.

>> тех levellfuncC.c;

Building with 'Microsoft Visual С++ 2010 Professional (C)'.

МЕХ completed successfully.

Компилятор вызывается из командной строки и должен быть настроен на установленный в системе компилятор C/C++, в данном случае, это 'Microsoft Visual С++ 2010 Professional.

Рис. 11. Окно параметров блока S-функции levellfuncC

Текст "С" МЕХ S-функции levellfuncC приведён на рисунке 12.

Эта функция состоит из трёх частей:

1. Definesandincludes.

2. Реализация callback-методов.

3. Интерфейсы среды Simulink.

/* Эти две строки являются обязательными! */

fdefine S_FUSCTION_NAME levellfuncC /* Определяет имя S-функции */

Idefine S_FlJNCTION_LEVEL 2 /* S-функция имеет формат уровня 2*1

tin-: .1 г 'Lsimstruc.h" /* Заголовочный файл доступа к структуре SittStruct и API */

Idefine u(element) (*uptrs[element}) /* Pointer to Input PortO */

/* Матрицы A,B,C,D */ static real_T f. - -0,1; static real_T В - 0.1; static real_T G - 1; static real_I D = 0;

/* Методы S-функции '

Инициализация*/

* Информация о размерах используется Simulin}; для определения ".

* характеристик блока (количество входов, выходов, состояний и т.д.). */

static void mdllnitializeSizes[SimStruct ' [

ssSetNuirSFcnParams {S, 0) ; ' Количество ожидаемых параметров ' if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S))

I

return; /* Отсутствие параметров */

ssSetNuinContStates (3, ; ssSetNumDiscStates(3, 0);

if (!ssSetNumlnputPorts(Sr 1]) return; ssSetlnputPortWidtli (S, [), ?); ssSetlnputPortDirec.tFeedThrough [S, 0, 1);

if (IsssetNumciutputPorts (s, 1)1 return; ssSetOutputPortWiclth(S, 0, 2);

ssSetNumSamp(S, 1 ); ssSetNumEWor): (S, 0) ; ssSetNumlWorkIS, 0); ssSoLNuniPKork (S, 0) ; ssSetNurcModes (S, ; ssSetNnmNonsaraplediCsIS, 11) ;

sssetsinistatecompliance (sr USE_DEFAULT_SIM_3TATE) ; sssetoptions (S, 33 option exception fp.ee code);

static yoid mdllnitializeSampleliiries (SimStruct SS] [/-' Указание на непрерывное время. */

ssSetSnn.ploTimo (S, 0, CONTINUOUS SAMPLE TIME); sssetoff set'l'ime (3, 0, 0.0) ;

ssSetModelReferenceSampleTimeDefaultInheritance(3);

Idefine MDL INITIALISE CONEITIONS

!'" Инициализация нулем обоих непрерывных состояний 1.

static void mdllriitializeConditions [SimStruct ■Г

[

real T - ssGctContSLatns(S);

int_T lp;

for [lp-0;lp<2;lp++) [

*x0I 1=0.0;

!* Формирование выходного сигнала */

static void TdI Outputs(SimStruct *S, int_T tic)

[

roal_T *y - saGctOutputPortRcalSignal(S,0);

real_T ■ - ssGetContStates[S);

InpntRealPtrsType uPtrs = ssGetlnputPortRealSignalPtrs (S, I)) ;

UNUSED_AF:G(tid); " Использование многозадачного режима */

/* v=Cx+Du Ч

V 0J=C*x[0]+C»X l]+D*n(0)+D»U(l);

f

♦define MDL DERIVATIVES

/* формиропа[|ио производной входного сигнала

static void mdlDerivatives(SimStruct *3)

[

red T *dx - ssGetdX(S);

rea__T '' = saGetContStates IS);

InpnLRealPLrsType uPLia - saGe LInpuLPurLRealSicjiialPLrз (S, 0) ;

dx[0]-A*x[0]+A«x11 J tR*n(0)tB'IJ (1); )

static void radlTerminate(SimStruct *3)

Л Завершение работы '/ I

UNUSED ARG(S); Л Входных аргументов нет

lifdef MATLAEJHEXJr'ILE finclude "simuTink.c11 lelse

linclude 1 ¡n .' "

lendif

/* Компиляция исходного файла в MEX-file Ч

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

1* Интерфейс >fFX- файла */ /* Регистрация откомпилированного кода *!

Рис. 12. Текст S-функции levellfuncC с комментариями

S-функции уровня 2, в отличие от S-функций уровня 1, поддерживают все типы данных, которые поддерживает Simulink, и блоки Simulink, имеющие несколько входов и выходов. Кроме того, S-функции уровня 2 допускают использование нескольких ЯВУ для создания [18].

Ниже рассматривается пример реализации "С++" МЕХ S-функции, которая выделяет положительные и отрицательные полуволны входного синусоидального сигнала и обнуляет отрицательные полуволны (см. модель S-функции уровня 2 на рисунке 7). На рисунке 13 представлен метод вычисления выходного вектора.

// В этом методе происходит вычисление выходных данных S-функции.

Рис. 13. Метод вычисления выходного вектора "С++" МЕХ S-функции

Формат исходного кода С++ для S-функции level2funcCpp в части инициализации почти идентичен формату исходного кода для S-функции, написанной на С, поэтому на рисунке 14 представлен только метод вычисления выходного вектора.

Заключение

Анализ рассмотренных способов реализации S-функций с программами на языках MatLab, С и С++ в рамках среды моделирования Simulink позволяет сделать следующие выводы:

1. S-функции являются описанием Simulink-блока на одном из ЯВУ: MatLab, С, С++ и других.

2. В системе Simulink, начиная с версии MatLab R2010, существуют S-функции уровня 1 и уровня 2.

3. S-функции уровня 2 предоставляют пользователям более широкие возможности: поддержку нескольких портов ввода/ вывода, поддержку различных языков программирования.

4. При моделировании задачи решаются путем вызова S-функции с помощью саИЬаск-метода.

5. Для вызова S-функции применяется специальный синтаксис, определяемый интерфейсом прикладного программирования (API), который позволяет им взаимодействовать с системой Simulink.

6. S-функции уровня 1 во время сеанса моделирования используют системную переменную, в зависимости от значения которой инициируется выполнение соответствующего саИЬаск-метода.

7. S-функции уровня 2 связывают выполнение соответствующего саИЬаск-метода с наступлением определённого события, происходящего во время моделирования, т.е., реализуют событийно - управляемый принцип.

8. S-функции, реализованные на языке MatLab, подключаются к S-модели без дополнительных преобразований. S-функции, реализованные на ЯВУ, требуют дополнительного преобразования в МЕХ-файл, являющийся промежуточным интерпретируемым кодом времени выполнения.

9. Преимуществом использования языка MatLab для написания S-функций является простота его использования и большие возможности, предоставляемые этим языком в части большого количества встроенных средств решения математических задач. Структура S-функции, реализованной на ЯВУ, в целом повторяет структуру S-функции m-файла, с учётом синтаксиса, используемого ЯВУ. Синтаксис ЯВУ предоставляет пользователям большие возможности для работы с различными типами данных. Основное отличие состоит в возможности использования средств объектно-ориентированного программирования для создания собственных классов и их объектов.

Дальнейшие исследования целесообразно продолжить в направлениях практической реализации подходов к интеграции инструментальных средств, таких, например, как MatLab, R и систем программирования высокого уровня для повышения удобства и эффективности решения сложных научно-технических задач, в частности, [19, 20].

Литература

1. Chaturvedi, Devendra K. Modeling and simulation of systems using MATLAB® and Simulink®. CRC press, 2010. 734 p.

2. Xue D., Chen Y. System simulation techniques with MATLAB and Simulink. John Wiley & Sons, 2013.

3. Трусфус M.B., Кирпичников А.П., Якимов И.М. Моделирование в системе структурного и имитационного моделирования Simulink. Вестник Казанского технологического университета. Т. 20. № 8. 2017. С. 107-110.

4. Adadurov S., Khomonenko A., Krasnovidov A. Comparison of Control Systems Based on PID Controllers and Based on Fuzzy Logic Using MatLab and Simulink II Lecture Notes in Networks and Systems, 2021, vol. 229, pp. 224-237.

5. Дунин В.О., Егоров, В.А. Проблемы создания интеллектуальных средств поиска, анализа и обработки биомедицинской информации II Инженерный вестник Дона, 2012, 22 (4-1), 24.

6. Тушканов Н.Б., Назаров В.А. Программная среда для имитации процессов обучения и управления мультизвенным манипулятором II Известия Южного федерального университета. Технические науки, Тематический выпуск «Интеллектуальные САПР». Т. 38,№ 3.2004. С. 133-137.

7. Tsai H.L., Tu C.S., and Su Y.J. Development of Generalized Photovoltaic Model Using MATLAB/SIMULINK II Proceedings of the World Congress on Engineering and Computer Science 2008 WCECS 2008, October 22-24, 2008, San Francisco, USA.

8. Черных И.В. Моделирование электротехнических устройств в MATLAB, SimPowerSystems и Simulink / 2-е изд. ДМК Пресс, 2014, 288 с.

9. https: //www.mathworks. com/help/ simulink/ slreff sfunction.html

10. https://ch.mathworks.com/help/simulink/s-function-concepts-c.html

11. https://www.mathworks.com/.../maintaining-level-l-matlab-s-functions.html

12. Бесекерский B.A., Попов, Е.П. Теория систем автоматического управления. М.: Профессия, 2007. 752 с.

13. https://ch.mathworks.com/help/simulink/sfg/mdlinitializesizes.html

14. https://ch.mathworks.com/help/simulink/sfg/maintaining-level-l-matlab-s-functions.html.

15. https://pages.mtu.edu/~tbco/cm416/MatlabTutorialPart5 .pdf

16. https://ch.mathworks.com/help/simulink/c-c-s-functions.html ?s_tid=CRUX_lftnav.

17. https://ch.mathworks.com/help/simulink/create-cc-s-functions.html

18. Смоленцев Н.К. MATLAB. Программирование на С++, С#, Java и VBA. Второе изд. М.: ДМК Пресс, 2015. 498 с.

19. Krasnovidov A.V., Khomonenko A.D. Integration of MatLab and R with high-level languages using C# and Microsoft Visual Studio as an example/ Conference Paper II Journal of Physics: Conference Series, 2021,2131(2), 022096.

20. Smagin V.A., Bubnov V.P. Vector hyper-delta distribution and recommendations on how to apply it II Automatic Control and Computer Sciences. 2021. Vol. 55. № Suppl. 1.

INTERACTION SIMULINK-MODELS OF COMPLEX AND INTELLIGENT SYSTEMS WITH PROGRAMS IN HIGH-LEVEL LANGUAGES

Sergey G. Ermakov, Petersburg State University of Communications of Emperor Alexander I, St. Petersburg, Russia, ermakov@pgups.ru Andrei V. Zabrodin, Petersburg State University of Communications of Emperor Alexander I, St. Petersburg, Russia, ivs@pgups.ru Alexander V. Krasnovidov, St. Petersburg, Russia, alexkrasnovidow@mail.ru Anatoly D. Homonenko, Petersburg State University of Communications of Emperor Alexander I, St. Petersburg, Russia, khomon@mail.ru

Abstract

The MatLab package and its extension in the form of Simulink block modeling system form a visual and effective tool for modeling complex and intelligent systems. This bundle provides one of the most effective ways to reduce the time to determine optimal parameters of control actions in the simulation. A further increase in the efficiency of modeling complex and intelligent systems can be achieved through the use of high-level programming languages. The purpose of the study is to consider the methods of interaction between MatLab and Simulink with programs in high-level languages C and C++. to improve the efficiency of the modeling process. Methods and means. Interaction between the MatLab and Simulink packages is implemented using the following methods: executing a file from the S-model window, as well as by launching the S-model from the MatLab command line or from an m-file, followed by processing the simulation results using MatLab software and C or C programming languages ++. Results. A practical implementation of the interaction of these tools (Matlab + Simulink + high-level programming languages C or C++) has been completed. Practical significance. Software implementations for creating S-functions of levels 1 and 2 are presented with a demonstration of the results of work and the implementation of S-functions in a high-level language is considered. The proposed organization of the interaction between MatLab, Simulink and C or C++ languages makes it possible to increase the system simulation efficiency.

Keywords: MatLab, Simulink models, high-level programming languages C, C++, S-functions. References

1. Chaturvedi, Devendra K. (2010). Modeling and simulation of systems using MATLAB® and Simulink®. CRC press. 734 p.

2. Xue D., Chen Y. (2013). System simulation techniques with MATLAB and Simulink. John Wiley & Sons.

3. Trusfus M.V., Kirpichnikov A.P., Yakimov I.M. (2017). Modeling in the system of structural and simulation modeling Simulink. Bulletin of the Kazan Technological University. Vol. 20. No. 8. 2017, pp. 107-110.

4. Adadurov S., Khomonenko A., Krasnovidov A. (2021). Comparison of Control Systems Based on PID Controllers and Based on Fuzzy Logic Using MatLab and Simulink. Lecture Notes in Networks and Systems. Vol. 229, pp. 224-237.

5. Dunin V.O., Egorov, V.A. (2012). Problems of creating intelligent tools for searching, analyzing and processing biomedical information. Engineering Bulletin of the Don, no. 22 (4-1), p. 24.

6. Tushkanov N.B., Nazarov V.A. (2004). Software environment for imitation of learning processes and control of a multilink manipulator. Izvestiya of the Southern Federal University. Engineering sciences, Thematic issue "Intelligent CAD".Vol. 38. No. 3. 2004, pp. 133-137.

7. Tsai H.L., Tu C.S., and Su Y.J. (2008). Development of Generalized Photovoltaic Model Using MATLAB/SIMULINK. Proceedings of the World Congress on Engineering and Computer Science 2008 WCECS 2008, October 22-24, San Francisco, USA.

8. Chernykh I.V. (2014). Simulation of electrical devices in MATLAB, SimPowerSystems and Simulink. 2nd ed. DMK Press. 288 p.

9. https://www.mathworks.com/help/simulink/slref/sfunction.html.

10. https://ch.mathworks.com/help/simulink/s-function-concepts-c.html.

11. https://www.mathworks.com/.../maintaining-level-1-matlab-s-functions.html.

12. Besekersky V.A., Popov, E.P. (2007). Theory of automatic control systems. Moscow: Profession. 752 p.

13. https://ch.mathworks.com/help/simulink/sfg/mdlinitializesizes.html.

14. https://ch.mathworks.com/help/simulink/sfg/maintaining-level-1-matlab-s-functions.html.

15. https://pages.mtu.edu/~tbco/cm416/MatlabTutorialPart5.pdf.

16. https://ch.mathworks.com/help/simulink/c-c-s-functions.html ?s_tid=CRUX_lftnav.

17. https://ch.mathworks.com/help/simulink/create-cc-s-functions.html.

18. Smolentsev N.K. (2015). MATLAB. Programming in C++, C#, Java and VBA. Second ed. Moscow: DMK Press. 498 p.

19. Krasnovidov A.V., Khomonenko A.D. (2021). Integration of MatLab and R with high-level languages using C# and Microsoft Visual Studio as an example/ Conference Paper. Journal of Physics: Conference Series. No. 2131(2), 022096.

20. Smagin V.A., Bubnov V.P. (2021). Vector hyper-delta distribution and recommendations on how to apply it. Automatic Control and Computer Sciences. Vol. 55. No. Suppl. 1.

Information about authors:

Sergey G. Ermakov, Doctor of Technical Sciences, Professor, Acting head Department of Information and Computing Systems, St. Petersburg State University of Communications of Emperor Alexander I, St. Petersburg, Russia

Andrey V. Zabrodin, Candidate of Historical Sciences, Associate Professor of the Department of Information and Computing Systems, Emperor Alexander I St. Petersburg State University of Communications, St. Petersburg, Russia

Alexander V. Krasnovidov, Candidate of Technical Sciences, Associate Professor, St. Petersburg, Russia

Anatoly D. Homonenko, Doctor of Technical Sciences, Professor, Professor of the Department, "Information and Computing Systems", Emperor Alexander I St. Petersburg State University of Communications, St. Petersburg, Russia

f I л

i Надоели баннеры? Вы всегда можете отключить рекламу.