Защо интерпретиран функционален блок на MATLAB ще бъде оценен два пъти в Simulink?

Имам модел Simulink, който включва следната подсистема.

Simulink подсистема с интерпретирана MATLAB функция

Блокът bm_train_adapter ще извика функция на MATLAB със същото име, предавайки всички входни аргументи в един вектор.

На подсистемата е дадено време за извадка от 900 (секунди), поради което всички сигнали са оцветени в червено (за дискретни сигнали).

В програмата за отстраняване на грешки обаче забелязах, че функцията bm_train_adapter се извиква два пъти на всяка стъпка от времето на симулация. Това води до ужасно грешни резултати, тъй като функцията включва странични ефекти.

Защо Simulink извиква моята интерпретирана MATLAB функция повече от веднъж на времева стъпка? Как мога да предотвратя това?


person lindelof    schedule 02.08.2012    source източник


Отговори (2)


Мисля, че това се дължи на вашата настройка на решаващия инструмент. Във вашия прозорец Configuration Parameters вижте панела Solver Options.

Вярвам, че солвърите discrete и ode1 ще се обаждат веднъж на стъпка от време. ode2 ще се обажда два пъти на времева стъпка, ode4 ще се обажда 4 пъти на времева стъпка и т.н.

Това поведение е много полезно за симулиране на непрекъсната динамика, но може да бъде объркващо при взаимодействие с отделни елементи.

person Ned Twigg    schedule 14.08.2012

Причината беше, че моят модел имаше алгебрични цикли, причинени от блокове за забавяне на модула в подсистемите. За да разреши тези цикли, решаващият нямаше друг избор, освен да оцени някои блокове повече от веднъж.

Решението беше да се премахнат всички забавяния на модулите от техните подсистеми.

person lindelof    schedule 13.09.2012