Перейти к содержанию
    

Моделирование в StateFlow (Matlab)

В Stateflow достаточно наглядно можно описать алгоритм работы устройства в виде состояний и переходов, промоделировать, сгенерить Си-код, вставить в свою программу.

Так, например, лет 5 назад нарисовал алгоритм работы радиотелефона (интерфейс пользователя), вставил в DSP со своими драйверами - милое дело. Начальник говорит, что изменить - меняешь стрелку или добавляешь состояние, генеришь Си-код, компилишь - все Ок. Надо промоделировать - моделируешь.

 

А если, например, надо промоделировать одновременно работу N устройств с одним и тем же алгоритмом (N=10..1000). Как это реализовать в Simulink? Не копировать же экземпляр блока Stateflow 1000 раз. Может алгоитм Stateflow можно как-то вставить в M-скрипт и выполнять итеррационно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А эти N устройств между собой как-то связаны?

 

Да, они должны взаимодействовать друг с другом, через некоторую модель среды.

 

Вот пример 1: моделируем поезд, 100 вагонов, на каждом вагоне установлен один и тот же механизм, работа которого описана в stateflow, механизмы связаны друг с другом, например посредством тормозной магистрали, т.е. все механизмы должы использовать один внешний параметр - давление в тормозной магистрали.

 

Вот пример 2: сеть Embedded устройств с заданным алгоритмом (stateflow), устройства обмениваются (скажем по RS485 или еще как-то) каким-либо параметром, от которого зависит работа этого алгоритма.

 

В Matlabe я не вижу другого способа, как только размножить блоки Stateflow в окне Simulink и связать их, но это не удобно - т.к. устройств много.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделайте s-функцию из блока, будет компактнее выглядеть и быстрее считаться. Если Вас в процессе симуляции интересует поведение каждого блока, то, видимо, придется их "размножать".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделайте s-функцию из блока, будет компактнее выглядеть и быстрее считаться. Если Вас в процессе симуляции интересует поведение каждого блока, то, видимо, придется их "размножать".

Поясните пожалуйста.

Насколько я понимаю, Вы предлагаете засунуть экземпляр алгоритма в S-функцию, а что дальше? Тогда придется блоки S-функций размножать в окне Simulink. Или Вы предлагаете в одной S-функции реализовать N алгоритмов?

 

Вообще было бы наглядно, если на вход блока, реализующего алгоритм, подавать вектор(или матрицу) параметров, и в зависимости от размерности созавалось бы определенное количество экземпляров алгоритма. Как, например в случае, когда мы подаем на вход sin(x) вектор, то и на выходе получаем вектор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Вы писали: "Вообще было бы наглядно, если на вход блока, реализующего алгоритм, подавать вектор(или матрицу) параметров, и в зависимости от размерности созавалось бы определенное количество экземпляров алгоритма. Как, например в случае, когда мы подаем на вход sin(x) вектор, то и на выходе получаем вектор." - я такое делал в LabView. Там это "автоматом" получается, в Simulinke размерность нужно явно указывать. Может связку попробовать "LabView-Matlab"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Вы писали: "Вообще было бы наглядно, если на вход блока, реализующего алгоритм, подавать вектор(или матрицу) параметров, и в зависимости от размерности созавалось бы определенное количество экземпляров алгоритма. Как, например в случае, когда мы подаем на вход sin(x) вектор, то и на выходе получаем вектор." - я такое делал в LabView. Там это "автоматом" получается, в Simulinke размерность нужно явно указывать. Может связку попробовать "LabView-Matlab"?

Интересное предложение, надо будет попробовать.

А на счет разбиения - пробовал при моделировании динамики поезда, объединяя 10 вагонов в экипаж, и рисуя 10 экипажей - тормозит страшно - это цена за наглядность представления.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...