Как экспортировать данные simulink в рабочую область во время моделирования?
Я хочу получить данные из simulink в ходе моделирования, и используйте функцию последовательной сети для отправки этих данных в другую программу. Потому что мне нужно использовать другую программу, чтобы сделать некоторые трюки и отправить команду обратно в simulink, поэтому я должен получить данные от simulink во время выполнения, чтобы другая программа могла сделать правильную команду.
Я попытался использовать блок рабочей области для экспорта данных.
однако, я могу только получить значение в самом начале моделирования.
и я также попытался использовать область и изменить некоторые свойства: проверьте сохранить данные в рабочей области и снимите флажок Limite data to Last.
во-первых, я начал моделирование, и я обнаружил, что ScopeData не появился в рабочей области. Только когда я остановлю симуляцию, ScopeData появится в рабочей области.
и после этого, я могу использовать ScopeData.сигналы.значения для получения значений.
но я хочу: когда я начну моделирование, ScopeData появится в рабочей области, чтобы я мог отправить эти данные в другую программу.
кто-нибудь знает, как этого добиться?
нашел на этой странице может быть полезно, но я все еще не знаю, как непрерывно экспортировать данные во время моделирования.
3 ответов
использовать get_param
для чтения данных только в настоящее время. Также отправить данные обратно в Simulink с set_param
усиления или другого блока.
пример of get_param
первый загрузить и старт моделирование:
load_system('myModel')
set_param('myModel','SimulationCommand','Start');
для чтения данных в любой строке вашей модели simulink:
-
получить объект блока simulink (давайте попробуйте часы с именем часы):
block = 'myModel/Clock'; rto = get_param(block, 'RuntimeObject');
-
затем получите данные о своем первом (или любом) выходном порту (или входе) этого блока.
time = rto.OutputPort(1).Data;
вы можете сделать чтение, в обратном вызове таймера.
также это может быть полезно: функциональность командной строки для Simulink
во время моделирования Simulink сохраняет зарегистрированные данные во внутреннем буфере и записывает их в рабочую область только при приостановке или остановке моделирования. Похоже, вам действительно нужно написать S-функцию (которая будет получать значения сигнала на основе timestep-by-timestep) и общаться с Proteus таким образом.
конечно, Simulink-это симулятор не в реальном времени, поэтому, если вы говорите о чем-то похожем на контроль в реальном времени, то вы, скорее всего, ошибаетесь подход в целом.
в любое время во время моделирования вы можете заставить Simulink записать выходные данные моделирования в рабочую область:
set_param(bdroot,'SimulationCommand','WriteDataLogs');
я обнаружил, что эта команда довольно нестабильна в моем Matlab 2010a для Win64. В частности, я должен избегать этого, когда моделирование остановлено (т. е. первая проверка
get_param(bdroot,'SimulationStatus')
), в противном случае Matlab показывает ошибку и просит перезапустить.