Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование локальных переменных

Некоторые особенности программирования

Часто в ходе процесса моделирования S-функции требуется хранить некоторые данные. Т. к. S-функция является функцией системы MATLAB, то локальные переменные должны быть инициализированы при каждом вызове S-функции. Существует возможность хранения данных между вызовами с использованием глобальных переменных. При этом может существовать только один экземпляр данной S-функции в модели. В противном случае различные экземпляры S-функции будут разделять между собой одну и ту же область данных. Более предпочтительным является подход, использующий параметр UserData блока S-Finction, который содержит ссылку на данные S-функции. При использовании параметра UserData в моделируемой системе могут существовать различные экземпляры данной S-функции, поскольку каждый экземпляр блока S-функции имеет свой собственный параметр UserData. Параметр UserData может быть скалярной величиной, числовым массивом, массивом ячеек или массивом записей, поэтому не существует ограничения на количество или типы данных, которые можно хранить в параметре UserData блока S-функции.

 

Пример: Хранение локальных переменных с использованием параметра UserData

Предположим, что S-функции необходимо хранить значение времени и вектор состояния до следующего вызова S-функции. Следующий код задает значение параметра UserData:

u_dat.time = t;

u_dat.state = x;

set_param(gcb, 'UserData', u_dat);

где функция gcb получить указатель на текущий блок модели, то есть S-функцию.

Эти данные можно извлечь, используя следующие выражение:

old_data = get_param(gcb, 'UserData').

Динамическое задание размеров векторов входных и выходных переменных

Многие блоки системы Simulink работают с входными данными переменной размерности. Например, блок Gain в качестве входной переменной может использовать как скалярную величину, так и вектор произвольной размерности. В последнем случае необходимо в поле с именем Numlnputs структуры sizes задать значение -1. S-функция может определить размерность вектора входа, когда параметр flag равен 1, 2, 3 или 4, используя выражение:

size_input = size(u);

Если размерность вектора выхода или число непрерывных или дискретных компонентов вектора переменных состояния зависит от размерности вектора входа, необходимо задать в соответствующем поле структуры sizes значение -1. В этом случае размерность любого из указанных векторов будет приниматься равной размерности входного вектора.

<== предыдущая лекция | следующая лекция ==>
 | Примеры S-функций на основе М-файлов
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 275; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.