Экспорт данных из блока осциллографа simulink (параметр log data to workspase) для цели построения фазовой траектории системы
Привет сообщество!
На неделе ознакомился с замечательной книгой Емельянова С.В. и др. "Теория систем с переменной структурой" в которой был описан метод фазового пространства (траектории) как наиболее удобный и наглядный для анализа работы сложных динамических систем. см стр 41 приложенной книги. Отсюда появилось желание построить такой блок в simulink, которй можно подключить к любой точке системы и получить ее фазовую траекторию. Этот блок должен быть универсальным, подключаться к любой ранее разработанной системе управления и работать полностью автоматически.
Моих знаний симулинка не хватило, что бы сделать полностью автоматическую функцию, поэтому было принято рещение просто "выдернуть" данные из симулинка что бы потом обрабатывать их как душе угодно. Для этого использовал блок scope, активировал параметр log data to workspase.
Собрал несколько вариантов подсистемы:
1 Вариант
2 Вариант
Написал функцию, которая строит график фазового портрета из экспортированных с осцилогрофов данных.
Казалось бы - на этом все, но ....Далле подробно с какими проблемами столкнулся.
1.При подключении блока к простой тестовой системе все работает замечательно. Никаких проблем.
2. При подключении к реальной, более сложной системе управления, размеры экспортированных массивов получаются разные. 30 304 отсетов (u) против 264 046 (du). Более того они имеют очень странную (трехмерную?) структуру. Это при подключении 1 варианта подсистемы построения фазовой траектории.
При подключении 2 варианта наблюдется выравнивание количества элементов массива, однако структура у первого и второго массива данных становиться разной.
3. При переключении экспортируемых данных в тип "Array" вылетает ошибка:
Далле вопросы и соображения.
Из всего перечисленного можно сделать вывод что система работает в каком-то непонятном формате данных, при чем при работе некоторых блоков этот формат меняется.
1 вопрос. Как посмотреть тип данных каждого соединения (стрелочки) модели?
2 вопрос. Как изменить тип данных на тот, который мне нужен?
3 вопрос. Как преобразовать тип данных "1x1x30304 double" в "30304x1 double"?
Вообще я не гуру матлаба и симулинка, поэтому возможно кто-то может предложить другие варианты реализации построения фазовой траектории, более подходящие требованиям, описанным в начале статьи.
П.С. матлаб 2018 года. Сложную реальную систему не могу предоставить изза соображений конфиденциальности.
Комментарии
По третьему вопросу все просто
squeeze(data1.signals.values)
Большое спасибо! Как раз команда то что нужно для моего случая. Теперь можно построить графики и увидеть результат.
В ошибке он пишет, что матричный сигнал не может запихнуть в переменную типа "array".
Получается что на выходе системы идет сигнал с покадровой разверткой, где каждый кадр - это матрица (похоже, что в действительности это матрица размера 1*1). Можете перед выводом попробовать вставить какой-нибудь блок (типа unbuffer или может тот же squeeze есть в симулинке), чтобы привести сигнал к нужному виду.
Да, понятно что у меня на входе с какого-то перепугу матрица (сам не знаю почему). Постави squeeze по входу, но он не помогает(( Работает как надо только в матлабе
"На неделе ознакомился с замечательной книгой Емельянова С.В. и др. "Теория систем с переменной структурой" в которой был описан метод фазового пространства (траектории) как наиболее удобный и наглядный для анализа работы сложных динамических систем. см стр 41 приложенной книги. Отсюда появилось желание построить такой блок в simulink, которй можно подключить к любой точке системы и получить ее фазовую траекторию. Этот блок должен быть универсальным, подключаться к любой ранее разработанной системе управления и работать полностью автоматически...."
1. Это неверный подход - метод фазовой плоскости применим только к системам второго порядка! Это видно в указанной книге, где ВСЕ примеры с фазовой плоскостью только второго порядка.
2. Есть специализированные программы (в том числе для матлаба) построения решений на фазовой плоскости.
3. Использовать разностную производную не лучшее решение (тогда надо использовать метод интегрирования с фикс.шагом или ограничивать максимальный шаг)
1.Т.е. вы хотите сказать, что метод фазовой плоскости неприменим к любой системе выше второго порядка? Хотите сказать, что в нем нету смысла и он ничего не покажет?
2. Каки есть специализированные программы для матлаба и не только, можете привести примеры?
3. В целом мне немного не понятно как симулинк считает блок производной, бывали с ним проблемы.
По п.1 - а еще он неприменим к нестационарным системам. С точки зрения ТАУ, это означает, что нужно рассматривать системы без какого-либо входного воздействия, только собственные движения, вызванные ненулевыми нач. усл.
Для анализа САУ в Simulink может быть удобнее будет использовать готовые инструменты: https://www.mathworks.com/help/slcontrol/index.html
Если вам все же нужна своя фазовая траектория, то выложите модель - посмотрим, что там с логированием.