В этом примере показано, как вызвать функции Simulink Real-Time из скрипта Python®, чтобы создать приложение реального времени из модели, загрузите и запустить приложение, значения настройки параметров и данные сигнала получения.
Устанавливать ваш сеанс работы с MATLAB для этого примера:
1. Откройте MATLAB и установите движок MATLAB для Python. Для получения дополнительной информации смотрите Вызов MATLAB из Python.
2. Преобразуйте сеанс работы с MATLAB в сеанс совместной работы. В Командном окне введите matlab.engine.shareEngine
. Для получения дополнительной информации смотрите matlab.engine.shareEngine
.
Настраивать файлы и запускать скрипт Python:
1. Скопируйте модель matlbaroot/toolbox/slrealtime/examples/slrt_ex_pendulum_100Hz.slx
к рабочей папке.
2. Скопируйте скрипт Python CallingSlrealtimeFromPython.py
к той же рабочей папке.
3. Откройте окно командной строки операционной системы и сделайте рабочую папку текущей папкой для этого окна.
4. Чтобы запустить скрипт Python, в командной строке, введите:
py CallingSlrealtimeFromPython.py -m [.slx file path] -t [target name]
5. Скрипт Python создает модель, запускает приложение реального времени и генерирует график данных о записанном сигнале для положения тележки.
Скрипт Python использует API функции Simulink Real-Time, чтобы запустить приложение реального времени и получить данные сигнала. Это ключевые пункты в скрипте:
1. Чтобы вызвать команды MATLAB из Python, импортируйте matlab.engine
модуль.
import matlab.engine
2. Класс modelManagement
указатели открываются и загрузка модели Simulink, затем это создает модель.
class modelManagement():
3. Класс targetManagement
ответственно за обработку взаимодействий с slrealtime.Target
объект в MATLAB. Например, этот класс загружает приложение, запускает приложение, останавливает приложение, получает и устанавливает значения параметров и получает данные сигнала.
class targetManagement():
4. В основной функции функция пытается найти все активные, разделяемые сеансы работы с MATLAB и подключения к первому. Если нет никакого сеанса, функция открывает новый сеанс работы с MATLAB.
engs = matlab.engine.find_matlab() if not engs: eng = matlab.engine.start_matlab() else: eng = matlab.engine.connect_matlab(engs[0])
5. В основной функции функция инстанцирует modelManagement
возразите и создает модель.
mm = modelManagement(eng, modelFilePath) appPath = mm.buildModel()
6. В основной функции функция инстанцирует targetManagement
объект для данного целевого имени.
tg = targetManagement(eng, targetName)
7. В основной функции функция загружает приложение на целевом компьютере.
tg.load(appPath)
8. В основной функции функция создает slrealtime.Instrument
объект в MATLAB, добавляет сигнал для положения тележки к инструментальному объекту, добавляет этот инструментальный объект к целевому объекту и включает BufferData
режим. Живой переданный потоком сигнал сохранен в памяти, и к ожидает извлечения.
blockPaths = ['slrt_ex_pendulum_100Hz/Pendulum'] portNumbers = [1] tg.captureSignals(appPath, blockPaths, portNumbers)
9. В основной функции функция начинает запускать приложение на целевом компьютере.
tg.start()
10. В основной функции функция ожидает в течение 5 секунд, затем устанавливает параметр Блока управления Волны Value
к 2. Эта установка заставляет тележку перемещаться в синусоидальный шаблон. Значение читается снова, чтобы убедиться, что значение параметров было успешно обновлено.
tg.setparam('slrt_ex_pendulum_100Hz/Wave Control','Value',2) newValue = tg.getparam('slrt_ex_pendulum_100Hz/Wave Control','Value') assert newValue == 2
11. В основной функции функция ожидает в течение 15 секунд и останавливает приложение.
time.sleep(15) tg.stop()
12. В основной функции функция получает данные сигнала и возвращает данные к Python.
[t, data] = tg.getCapturedSignals('slrt_ex_pendulum_100Hz/Pendulum',1)
13. В основной функции функция удаляет ранее добавленный инструментальный объект из целевого объекта, оставляя целевой объект в чистом состоянии.
tg.removeInstrument()
14. В основной функции, графики функций данные о записанном сигнале против времени. В получившемся графике вы видите, что положение тележки стабилизируется в 5 приблизительно 5 секунд, и затем тележка начинает перемещаться в синусоидальный шаблон как ожидалось после 5 секунд.
plt.plot(t, data) plt.xlabel('Time(s)') plt.ylabel('Cart Position') plt.show()