Учебное пособие для студентов высших учебных заведений
Скачать 5.41 Mb.
|
391 Рассмотрим теоретически движение тела при этих условиях. Уравнения Ей- лера в этом случае приобретут следующий вид: ⎪ ⎪ ⎪ ⎩ ⎪⎪ ⎪ ⎨ ⎧ ⋅ ⋅ − − = ⋅ = ⋅ ⋅ ⋅ − = ⋅ X Y e Z e Y Z Y e X e J J dt d J dt d J J J dt d J ω ω ω ω ω ω ω ) ( 0 ) ( и имеют такие решения при заданных начальных условиях: ) cos( 0 t k X Ω ⋅ = ω ω ; Ω = Y ω ; ) sin( 0 t k Z Ω ⋅ − = ω ω , (7.6) причем e e J J J k − = . (7.7) Итак, если для образованной модели обеспечить указанные условия, то, ес- ли она правильна (адекватна), при моделировании должны получить результаты соответствующие (7.6). Добавим в блок-схему блок констант, который формирует нулевой вектор моментов внешних сил (рис. 7.102), а также блоки Scope по которым можно про- контролировать результаты моделирования в виде зависимостей от времени про- екций угловой скорости и углового ускорения тела. Перед началом моделирования нужно присвоить значение матрицы момен- тов инерции. Это можно сделать в командном окне MatLab, вводя строку J=diag([400,600,400]) Результатом будет возникновение в том же окне записи J = 400 0 0 0 600 0 0 0 400 Блок-схема перевірки роботи блока S_DUE 2 EPS 1 OM [0 0 0] Момент om eps S_DUE S-Function m Проекції ку тов ої ШВИДКОСТІ тіла Проекції ку тов ого ПРИСКОРЕННЯ тіла Рис. 7.102 Аналогично нужно ввести вектор начальных условий 7.4. Объединение S-моделей с программами MatLab 392 UgSk0=[0.001 0.01 0] Получим UgSk0 = 1.0000e-003 1.0000e-002 0 Теперь следует перейти к окну блок-схемы, установить параметры интегри- рования, указанные на рис. 7.103 и запустить блок схему на моделирование Рис. 7.103 По окончании процесса моделирования, обращаясь к окнам блоков Scope, можно убедиться, что созданная модель работает полностью адекватно. Но убедить в этом читателя довольно трудно из-за следующих обстоя- тельств. Графические результаты блоков Scope представлены на черном поле. Поэтому скопировать соответствующее графическое окно означает получить не- качественное изображение на бумаге, вдобавок израсходовав нерациональное ко- личество красящего материала. Можно скопировать изображение этого окна при помощи команды печати в графическом окне блока Scope, но тогда соответст- вующее изображение займет целый лист, его невозможно уменьшить средствами текстового редактора. Вдобавок, линии на графике после печати на черно-белом принтере, не будут отличаться один от другого. На них невозможно нанести над- писи, чтобы указать особенности кривых, нельзя довольно просто изменить стиль линии. Все это говорит о том, что наиболее рациональн передать результаты в ра- бочее пространство с помощью введения выходных портов (рис. 7.102) и подания на них тех сигналов, которые нужно представить графически, а потом построить необходимые графики, пользуясь огромными графическими возможностями MatLab. Последнее можно сделать непосредственно, пользуясь командами MatLab в его командном окне, но более рационально сделать это программно, причем жела- тельно объединить в этой программе все действия: - введение значений параметров, начальных условий и т.п.; - установление параметров интегрирования; - обращение к S-модели и запуск ее на моделирование; 7.4. Объединение S-моделей с программами MatLab 393 - обработку полученных результатов моделирования, построение и оформление графиков. Пример такой программы приведен ниже. % Prov_DUEupr.m % Управляющая программа % для запуска модели Prov_DUE.mdl % Лазарев Ю.Ф. 18-12-2001 J=[400 0 0; 0 600 0; 0 0 400 ]; % Введения значений матрицы инерции UgSk0=[0.001 0.01 0]; % Введения начальных значений % проекций угловой скорости тела % Установления параметров моделирования options=simset('Solver','ode45','RelTol',1e-6); sim('Prov_DUE',5000,options); % МОДЕЛИРОВАНИЯ на S-модели % Формирования данных и вывод ГРАФИКОВ tt=tout; omx=yout(:,1); omy=yout(:,2); omz=yout(:,3); epsx=yout(:,4); epsy=yout(:,5); epsz=yout(:,6); subplot(2,1,1) h=plot(tt,omx,tt,omy,'.',tt,omz,'--');grid set(h,'LineWidth',2); set(gca,'LineWidth',2) set(gca,'FontAngle','italic','Fontsize',16) title(' Проекции угловых скоростей') ylabel('радианы в секунду') legend('omx','omy','omz',0) subplot(2,1,2) h=plot(tt,epsx,tt,epsy,'.',tt,epsz,'--');grid set(h,'LineWidth',2); set(gca,'LineWidth',2) set(gca,'FontAngle','italic','Fontsize',16) title('Проекции угловых ускорений ') ylabel('1/c2)') xlabel('Время (с)') set(gcf,'color','white') legend('epsx','epsy','epsz',0) Обратившись к этой программе, получим графики, приведенные на рис. 7.104. Теперь читатель может наглядно убедиться в правильности модели. 7.4. Объединение S-моделей с программами MatLab 394 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 -5 0 5 10 x 10 -3 Проекції кутових швидкостей раді а н и у сек ун ду omx omy omz 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 -5 0 5 x 10 -6 Проекції кутових прискорень 1/ c 2 ) Час (с) epsx epsy epsz Рис. 7.104 Следует указать еще один, более удобный, способ объединения S-модели с программами на языке MatLab, который состоит в возможности вызова m-файлов непосредственно из S-модели специально предусмотренными для этого средства- ми. Например, предыдущий (перед началом загрузки S-модели) вызов m-файла "PERVdan.m", содержащий операции присваивания исходных значений всех дан- ных, которые используются при моделировании в S-модели по имени "MODEL.mdl", можно осуществить, если при создании S-модели с этим именем в командном окне MatLab ввести команду set_param('MODEL','PreLoadFcn','PERVdan') Если после выполнения этой команды записать на диск эту S-модель, то при дальнейших ее вызовах сначала автоматически будет вызван и выполнен файл PERVdan.m и лишь после этого на экране возникнет блок-схема S-модели, гото- вая к моделированию. Проверить, какой именно m-файл используется в данной S-модели как предварительно выполняемый, можно путем привлечения команды get_param('имя S-модели','PreLoadFcn') Если же нужно вызвать некоторый m-файл перед или после проведения собственно моделирования на S-модели (например, нужно вызвать программу, которая позволяет изменить установленные значения параметров модели в диало- говом режиме, или использовать программу вывода результатов моделирования в графической форме), можно установить на свободном месте блок-схемы пустые блоки Subsystem (из раздела Sygnals & System), каждый из которых будет осуще- ствлять вызов соответствующего m-файла. После установления блока Subsystem в поле блок-схемы модели следует щелкнуть правой клавишою мышки на его изображении. В окне, которое возник- 7.4. Объединение S-моделей с программами MatLab 395 нет, следует выбрать команду Block propertіes. Возникнет окно настраивания бло- ка, изображенное на рис. 7.105. Рис. 7.105 Теперь достаточно внести имя m-файла (например, как на рис. 7.105, - ModelMENU) в окошко Open function окна настраивания блока, возвратиться в окно блок-схемы и сделать надпись на установленном блоке Subsystem, которая раскрывала бы его назначение. Если m-файл, имя которого вписано в окно настраивания блока Subsystem, существует, то его выполнение теперь можно осуществить, дважды щелкнув мышью на изображении этого блока. Осуществление связи S-модели с определенными m-файлами описанным способом, наверное, является, пожалуй, наиболее удобным, так как, во-первых, позволяет вызвать m-файлы лишь в случае необходимости и в произвольном по- рядке, а во-вторых, все управление моделированием и вызовом программ осуще- ствляется только из блок-схемы S-модели. 7.5. Создание библиотек S-блоков пользователя 396 7.5. Создание библиотек S-блоков пользовате- ля Когда серьезный пользователь углубленно занимается моделированием сис- тем, он неизбежно, рано или поздно, соприкоснется с необходимостью подготов- ки собственных блоков, имеющих свойства стандартных библиотечных блоков пакета SimuLink. Потребность в этом возникает, когда пользователь при разных задачах моделирования в собственной предметной области вынужден или неод- нократно использовать элементарные созданные ним блоки, которые являются оригинальными и не входят в состав стандартных библиотек SimuLink, или ис- пользовать одни и те же блоки многократно в определенных устойчивых их со- единениях. В таких случаях время создания новой модели можно значительно со- кратить и при этом предотвратить многочисленные ошибки, если оформить эти новые блоки или соединения блоков в виде новых блоков и разместить их в биб- лиотеке. Преимущество использования собственных блоков в составе библиотек со- стоит в следующем: - их возможно использовать неоднократно путем перетягивания изображения блока из библиотеки в окно блок-схемы модели; - пользоваться ими удобнее всего, когда общение с ними осуществляется через специальные диалоговые окна настраивания блоков, аналогичные тем, которые рассматривались при описании стандартных блоков SimuLink. Создания окон настраивания блоков осуществляется через так называемую маскировку блока, т. е. создание маски блока. 7.5.1. Создание библиотеки Рассмотрим процесс создания новой собственной библиотеки S-блоков на конкретных примерах. Образование новой библиотеки начинается с обращения к браузеру SimuLink через предпоследнюю пиктограмму линейки инструментов командного окна MatLab. В результате на экране возникает окно этого браузера (рис. 7.106). Нажав мышкой на изображении первой пиктограммы в окне браузера, вызовем появление еще одного пустого окна untitled для введения блок-схемы модели. В этом новом окне следует вызвать меню File, а в нем – раздел New, а в возникаю- щем нисходящем меню – раздел Library (см. рис. 7.107). В результате этих дейст- вий на экране возникнет пустое окно новосоздаваемой библиотеки (рис. 7.108) с именем Library untitled1. Теперь в нем можно создавать, или перетягивать в него созданные S-блоки. Напомним, что в общем случае образовать S-блок можно на основе двух видов стандартных блоков: - блока S-Function из раздела Function & Table библиотеки SimuLink; - блока SubSystem из раздела Signals & Systems той же библиотеки. 7.5. Создание библиотек S-блоков пользователя 397 Блок на основе S-Function получается на грунте написанных языком MatLab файлов S-функции, и имеет лишь один вход (возможно векторный) и один выход (тоже векторный). Блок на основе SubSystem состоит как схема из сущест- вующих блоков и может иметь произвольное количество входов и выходов про- извольного вида. Рис. 7.106 Рис. 7.107 Рис. 7. 108 Образуем в этой библиотеке S-блок S_DUE, на основе созданной прежде одноименной S-функции. Прежде всего, перетянем в окно создаваемой библиотеки блок S-Function из указанного раздела библиотеки Function & Table библиотеки SimuLink. Окно библиотеки приобретет вид, приведенный на рис. 7.109. Теперь, дважды щелкнув мышкой на изображении этого блока, вызовем его окно настраивания (рис. 7.110). В окошко S-Function name введем имени S- функции (S_DUE), а в окошко S-Function parameters – ее параметры (J, UgSk0) (рис. 7.111) и нажмем мышкой на кнопку (если соответствующий файл существует в путях, достижимых для MatLab, а спи- сок введенных параметров отвечает списку параметров, указанных в S-функции) 7.5. Создание библиотек S-блоков пользователя 398 окно настраивания исчезнет, а изображение блока в окне библиотеки изменится (см. рис. 1.112). Рис. 7.109 Рис.7.110 Рис. 1.111 Рис. 1.112 В завершение изменим название под блоком на такое "Динамические урав- нения Эйлера", чтобы точнее отобразить сущность преобразований, которые осу- ществляет блок. В дальнейшем, для моделирования процесса управления ориентацией, на- пример, космического аппарата (КА), обращающегося вокруг планеты по опреде- ленной замкнутой орбите, станет необходимым еще один блок, осуществляющий интегрирование кинематических уравнений ориентации, вычисляя значения па- раметров, определяющих текущее угловое положение корпуса КА относительно орбитальной системы отсчета. Например, если в качестве таких параметров из- брать кватернион поворота , который переводит текущее положение КА в нуж- ное, соответствующие кинематические уравнения будут иметь вид Q ) ( 2 1 Q Ω ω Q Q o o − = dt d , где обозначено: - вектор-кватернион абсолютной угловой скорости КА; - вектор-кватернион абсолютной угловой скорости орбитальной системы отсчета (жестко связанной с положением КА на орбите); - знак кватернионного умно- жения. ω Ω o Кватернионное кинематическое уравнение недостаточно удобно для прове- дения вычислений из-за того, что действия над кватернионами существенно отли- 7.5. Создание библиотек S-блоков пользователя 399 чаются от действий над матрицами и не предусмотрены в системе MatLab. Значи- тельно удобнее превратить его в совокупность сугубо матричных уравнений: ⎪ ⎩ ⎪ ⎨ ⎧ + ⋅ × + − ⋅ = − ⋅ − = )] ( ) ( ) ( [ 2 1 ) ( 2 1 0 0 Ω ω q Ω ω q Ω ω q q dt d dt dq t В этих уравнениях величины q , ω и Ω суть векторы-столбцы из проекций, соответственно, векторной части кватерниона поворота, вектора абсолютной уг- ловой скорости КА на оси связанной системы координат и вектора угловой скоро- сти орбитальной системы координат на ее же оси; скалярная часть кватернио- ну поворота; ( ) – обозначения кососиметричной матрицы, составленной из проекций вектора q 0 q × q Создадим М-файл S-функции, осуществляющей интегрирование этих кинематических уравнений. Ниже приведен текст этого М-файла по имени S_KUqwat. function [sys,x0,str,ts] = S_KUqwat(t,x,u,flag,OM0,Qw0) % S-функция S_KUqwat Кинематических Уравнений в кватернионах % Реализует переход от заданного вектора абсолютной % угловой скорости орбитального космического аппарата % к кватерниону поворота КА относительно орбитальной % системы отсчета % ВХОД блока: % u = [omx,omy,omz]- вектор проекций абсолютной угловой % скорости КА на оси CК, жёстко связанной с ним % ВЫХОД блока: % y=[qw0,qw1,qw2,qw3] - вектор компонентов кватерніону поворота КА % относительно орбитальной декартової системы координат % Входные ПАРАМЕТРЫ S-функции: % OM0 - орбитальная угловая скорость; % Ug0 - вектор начальных значений углов поворота % Лазарев Ю.ф. Укрaина 18-12-2001 switch flag, case 0 [sys,x0,str,ts] = mdlInitializeSizes(Ug0); case 1, sys = mdlDerivatives(t,x,u,OM0); case 3, sys = mdlOutputs(x); case 9 sys = []; end % Конец процедуры % %=============================================== % Далее идут тексты внутренних процедур %=============================================== % function [sys,x0,str,ts] = mdlInitializeSizes(Ug0) sizes = simsizes; sizes.NumContStates = 4; sizes.NumDiscStates = 0; 7.5. Создание библиотек S-блоков пользователя 400 sizes.NumOutputs = 4; sizes.NumInputs = 3; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = Qw0; str = []; ts = [0 0]; % Конец процедуры mdlInitializeSizes %============================================= function z = mdlDerivatives(t,x,u,OM0) % ВХОДНОЙ вектор "u" является вектором проекций моментов внешних сил, % действующих на космический аппарат соответственно по осям X Y Z % х(1)=qw0 - скалярная часть кватерниона; % х(2:4)=qw(1:3) - векторная часть кватерниона; % z(1)=d(qw0)/dt; z(2:4)=d(qw)/dt; % Формирования векторов угловых скоростей и кватерниона |