Запустите приложение реального времени при помощи скрипта Python

В этом примере показано, как вызвать функции Simulink Real-Time из скрипта Python®, чтобы создать приложение реального времени из модели, загрузите и запустить приложение, значения настройки параметров и данные сигнала получения.

Настройте сеанс работы с MATLAB для Python

Устанавливать ваш сеанс работы с MATLAB для этого примера:

1. Откройте MATLAB и установите движок MATLAB для Python. Для получения дополнительной информации смотрите Вызов MATLAB из Python.

2. Преобразуйте сеанс работы с MATLAB в сеанс совместной работы. В Командном окне введите matlab.engine.shareEngine. Для получения дополнительной информации смотрите matlab.engine.shareEngine.

Настройте файлы и запущенный скрипт Python

Настраивать файлы и запускать скрипт 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

Скрипт 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()