|
|
|
Моделирование в StateFlow (Matlab), когда моделируемых устройств >100 |
|
|
|
Feb 16 2005, 13:38
|
Местный
Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537
|
В Stateflow достаточно наглядно можно описать алгоритм работы устройства в виде состояний и переходов, промоделировать, сгенерить Си-код, вставить в свою программу. Так, например, лет 5 назад нарисовал алгоритм работы радиотелефона (интерфейс пользователя), вставил в DSP со своими драйверами - милое дело. Начальник говорит, что изменить - меняешь стрелку или добавляешь состояние, генеришь Си-код, компилишь - все Ок. Надо промоделировать - моделируешь.
А если, например, надо промоделировать одновременно работу N устройств с одним и тем же алгоритмом (N=10..1000). Как это реализовать в Simulink? Не копировать же экземпляр блока Stateflow 1000 раз. Может алгоитм Stateflow можно как-то вставить в M-скрипт и выполнять итеррационно?
|
|
|
|
|
Mar 17 2005, 10:01
|
Местный
Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537
|
Цитата(s_yakov @ Mar 17 2005, 11:13) А эти N устройств между собой как-то связаны? Да, они должны взаимодействовать друг с другом, через некоторую модель среды. Вот пример 1: моделируем поезд, 100 вагонов, на каждом вагоне установлен один и тот же механизм, работа которого описана в stateflow, механизмы связаны друг с другом, например посредством тормозной магистрали, т.е. все механизмы должы использовать один внешний параметр - давление в тормозной магистрали. Вот пример 2: сеть Embedded устройств с заданным алгоритмом (stateflow), устройства обмениваются (скажем по RS485 или еще как-то) каким-либо параметром, от которого зависит работа этого алгоритма. В Matlabe я не вижу другого способа, как только размножить блоки Stateflow в окне Simulink и связать их, но это не удобно - т.к. устройств много.
|
|
|
|
|
Mar 17 2005, 13:19
|
Местный
Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537
|
Цитата(s_yakov @ Mar 17 2005, 13:04) Сделайте s-функцию из блока, будет компактнее выглядеть и быстрее считаться. Если Вас в процессе симуляции интересует поведение каждого блока, то, видимо, придется их "размножать". Поясните пожалуйста. Насколько я понимаю, Вы предлагаете засунуть экземпляр алгоритма в S-функцию, а что дальше? Тогда придется блоки S-функций размножать в окне Simulink. Или Вы предлагаете в одной S-функции реализовать N алгоритмов? Вообще было бы наглядно, если на вход блока, реализующего алгоритм, подавать вектор(или матрицу) параметров, и в зависимости от размерности созавалось бы определенное количество экземпляров алгоритма. Как, например в случае, когда мы подаем на вход sin(x) вектор, то и на выходе получаем вектор.
|
|
|
|
|
Mar 18 2005, 08:34
|
Местный
Группа: Свой
Сообщений: 242
Регистрация: 25-08-04
Пользователь №: 537
|
Цитата(s_yakov @ Mar 17 2005, 23:33) Можно разбить на группы по М блоков в S-функции - для удобства размещения на Simulink диаграмме. Можно также попробовать последовательное переключение входных параметров к блоку - в цикле. Вы писали: "Вообще было бы наглядно, если на вход блока, реализующего алгоритм, подавать вектор(или матрицу) параметров, и в зависимости от размерности созавалось бы определенное количество экземпляров алгоритма. Как, например в случае, когда мы подаем на вход sin(x) вектор, то и на выходе получаем вектор." - я такое делал в LabView. Там это "автоматом" получается, в Simulinke размерность нужно явно указывать. Может связку попробовать "LabView-Matlab"? Интересное предложение, надо будет попробовать. А на счет разбиения - пробовал при моделировании динамики поезда, объединяя 10 вагонов в экипаж, и рисуя 10 экипажей - тормозит страшно - это цена за наглядность представления.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|