Это содержимое характерно для программного обеспечения Simscape™ Multibody™ First Generation. Функции первого поколения намечают, чтобы быть удержанными от использования и нужно избежать.
Обрезка, которую механическая система отсылает к открытию решений для входных параметров, выходных параметров, состояний и производных состояния удовлетворяющие условия, которые вы задаете заранее. Например, можно искать установившиеся решения, где некоторые или все производные состояний системы - нуль. Чтобы использовать команду Simulink® trim
в системе, представленной моделью Simscape Multibody, необходимо выбрать режим Simscape Multibody Trimming (см. Выбор Analysis Mode). Необходимо также задать условия, которые должно удовлетворить решение. Примеры после затем показывают вам, как обрезать механические модели.
Консультируйтесь с документацией Simulink для больше на обрезке моделей (Simulink). Можно также ввести help trim
в командной строке MATLAB®.
Необходимо избегать использования определенного Simscape Multibody или функций Simulink при обрезке модели.
Должен быть собран обрезанный механизм Simscape Multibody. Не используйте демонтированные соединения при обрезке.
Для получения дополнительной информации смотрите Моделирование Демонтированные Соединения.
Вы не можете использовать Блоки драйверов при обрезке модели.
Проигнорированы объединенные Начальные блоки Привода Условия в обрезанной модели Simscape Multibody.
Не включайте события или разрывы движения в вашей обрезанной модели. В частности, не используйте блоки Привода Прилипания Соединения Simscape Multibody. Обрезка механических моделей с прилипанием вызывает ошибку.
Если вы хотите обрезать модель Simscape Multibody, содержащую приводы движения, вы должны
Заставьте части скорости и положения/угла приведения в действие движения сигнализировать о зависимом только на ускоряющем сигнале
Сделайте скорость и положение/угол сопоставимыми с ускоряющей частью при помощи блоков Интегратора. Сигнал приведения в действие движения является вектором с компонентами, упорядоченными как положение/угол, скорость и ускорение, соответственно.
Этот метод рекомендуется в Стабилизации Числовых Производных в Сигналах Приведения в действие. Это требуется здесь.
Режим Simscape Multibody Trimming использует только ускорение в качестве независимого входа приведения в действие движения, потому что это эквивалентно силе или крутящему моменту. Как следствие только ускоряющий сигнал может использоваться в качестве независимого входа приведения в действие движения.
Подобное ограничение содержит для линеаризации модели; смотрите Линеаризацию в присутствии Приведения в действие Движения.
Приведение в действие движения как образцовый вход для обрезки
Приведение в действие движения как Косвенный Вход. Можно поместить образцовый входной порт в другую часть модели, затем питать тот вход как ускорение в привод движения со строкой Сигнала Simulink. Необходимо все еще вывести сигналы приведения в действие движения скорости и положения/угла таким же образом: путем интеграции любого сигнала вы используете для ускорения однажды и дважды, соответственно.
Рассмотрите следующий пружинный двойной маятник.
Соединение, соединяющее плечи и предплечья этого маятника, содержит крутильную пружину и систему демпфера, которая проявляет против часовой стрелки крутящий момент, линейно зависящий от углового смещения и скорости соединения. Предположим, что предплечье свернуто вверх почти вертикально и затем позволено подпасть под силу тяжести. В том, какая точка делает систему пружинного демпфера, достигают равновесия. Таким образом, в какой точке это прекращает разворачиваться?
Найти точку равновесия для пружинного двойного маятника,
Создайте модель Simscape Multibody системы. Эта схема показывает пример такой модели, mech_dpend_trim
.
Эта модель использует блоки Тела, чтобы смоделировать плечи и предплечья маятника и блока (J1) Revolute Joint, чтобы смоделировать связь между маятником и землей.
Модель использует блок Subsystem (J2), чтобы смоделировать пружинное шарнирное соединение между руками. Эта подсистема использует цикл отрицательной обратной связи, чтобы смоделировать объединенный предмет к ослабленной крутильной пружине путем умножения углового смещения и скорости соединения, соответственно, к константам демпфера и пружине. Цикл суммирует получившиеся крутящие моменты и подает их назад в соединение с блоком Joint Actuator.
Результат состоит в том, что соединение испытывает крутящий момент, выступающий против его движения и пропорциональный его угловому смещению и скорости. Вы могли также смоделировать эту ослабленную крутильную пружину с Joint Spring & Damper block.
Пружина и константы демпфера, используемые здесь, были выбраны путем выполнения модели с различными значениями кандидата и выбора тех, которые привели к умеренному отклонению маятника.
Запустите модель в режиме Forward Dynamics, чтобы оценить исходное предположение для нетривиальной точки равновесия маятника.
Симуляция показывает, что пружина прекращает разворачиваться приблизительно после 9 секунд; то есть, это достигает установившейся точки. В этой точке углы верхних и более низких соединений являются приблизительно-18 и-51 градусом, соответственно, и скорости являются нулем. Команда trim
может найти значения этих состояний точно.
Исследуйте вектор состояния модели и подготовьте его к использованию в обрезке.
Определите размещение вектора состояния модели в порядке сказать команду trim
, где в пространстве состояний модели, чтобы запустить его поиск точки равновесия маятника (точка, где это прекращает разворачиваться). Используйте Simscape Multibody команда mech_stateVectorMgr
, чтобы выполнить эту задачу. Обратитесь к блоку Ground, G.
StateManager = mech_stateVectorMgr('mech_dpend_trim/G'); StateManager.StateNames ans = 'mech_dpend_trim/J2/RevoluteJoint:R1:Position' 'mech_dpend_trim/J1:R1:Position' 'mech_dpend_trim/J2/RevoluteJoint:R1:Velocity' 'mech_dpend_trim/J1:R1:Velocity'
Поле StateNames
объекта вектора состояния, возвращенного mech_stateVectorMgr
, перечисляет имена состояний модели в порядке, в котором они появляются в векторе состояния модели. Таким образом поле показывает, что вектор состояния модели имеет следующую структуру:
x(1) = position of lower joint (J2) x(2) = position of upper joint (J1) x(3) = velocity of lower joint (J2) x(4) = velocity of upper joint (J1)
Определите вектор начального состояния.
Вектор начального состояния задает точку в пространстве состояний системы, где команда trim
запускает свой поиск точки равновесия. Команда trim
ищет пространство состояний, исходящее от отправной точки, возвращая первую точку равновесия, с которой это сталкивается. Таким образом отправная точка не должна быть в или около ни одной из тривиальных точек равновесия системы. Для двойного маятника, точка [0; 0; 0; 0] (т.е. маятник, первоначально сложенный и стационарный), тривиальная точка равновесия и поэтому должна избежаться. Вектор начального состояния должен быть вектор-столбцом и должен задать угловые состояния в радианах.
Часто, выбор хорошей отправной точки может быть найден только экспериментом, то есть, путем выполнения команды trim
неоднократно от различных отправных точек, чтобы найти нетривиальную точку равновесия. Это верно для двойного маятника этого примера. Эксперимент показывает что эта отправная точка,
ix(1) = J2 (lower joint) angle = -35 degrees = -0.6109 radians ix(2) = J1 (upper joint) angle = -10 degrees = -0.1745 radians ix(3) = J2 angular velocity = 0 radians/second ix(4) = J1 angular velocity = 0 radians/second
приводит к нетривиальной точке равновесия.
Команда trim
игнорирует начальные состояния, заданные Объединенными Начальными блоками Привода Условия. Таким образом вы не можете использовать эти блоки, чтобы задать отправную точку для обрезки модели. Если ваша модель содержит блоки IC, создайте вектор начального состояния, как будто блоки IC не существовали.
Сбросьте аналитический тип к Trimming
на вкладке Parameters диалогового окна Среды Машины.
Эта опция вставляет ограничительную подсистему и сопоставленный вывод в верхнем уровне модели. Обрезка вставляет ограничение вывод, чтобы сделать ограничения доступными для команды trim
. Пружинный двойной маятник не имеет никаких ограничений. Следовательно ограничительный выходной порт не выводит нетривиальные ограничительные данные и не нужен, чтобы обрезать маятник.
Введите следующие команды, чтобы найти точку равновесия самой близкой к отправной точке.
ix = [-35*pi/180; -10*pi/180; 0; 0]; iu = []; [x,u,y,dx] = trim('mech_dpend_trim',ix,iu);
Массив ix
задает отправную точку, определенную в Анализе и Инициализации Вектора состояния. Массив iu
задает начальные входные параметры системы. Его значение является пустым, потому что система не имеет никаких входных параметров. (Таким образом u
и y
выходные параметры является пустым.) В этой форме команда trim
находит систему установившейся (равновесие) точки, т.е. точки, где производные системы состояния являются нулем. Массив x
содержит вектор состояния, соответствующий первой точке равновесия, расположенной trim
:
x = -0.8882 -0.3165 -0.0000 0.0000
Получившиеся состояния являются угловыми положениями и скоростями, выраженными в радианах. На основе размещения вектора состояния модели (определенный ранее в Анализе и Используя Вектор состояния) маятник достигает равновесия, когда его верхнее соединение отклонило к углу-18.1341 градусов и его более низкого соединения к углу-50.8901 градусов. Системные производные состояния dx
являются нулем в допусках.
Рассмотрите плоские четыре системы панели, состоящие из заводной рукоятки, разветвителя и рокера. Следующие данные показывают блок-схему четырех систем панели. Моделью является mech_four_bar_trim
.
Эта система ограничивается на основании того, чтобы быть замкнутым циклом. Не все степени свободы независимы. (На самом деле только один.) Предположим вы хотите найти крутящий момент требуемым повернуть заводную рукоятку в угловой скорости 1 радиана/секунда в области значений углов заводной рукоятки. Этот раздел обрисовывает в общих чертах процедуру с командой trim
и режимом Simscape Multibody Trimming, чтобы определить крутящий момент.
Реконфигурируйте модель прежде, чем выполнить обрезку.
Сократите замкнутый цикл, который представляет четыре системы панели в соединении (Revolute1), соединяющий рокера, чтобы основываться (см. Территорию Моделирования и Тела).
Вручную сокращение соединения рокера гарантирует, что симуляция не сокращает четыре цикла панели в заводной рукоятке, соединяют и таким образом устраняют положение чудака и скорость от вектора состояния системы.
Для инструкций и дополнительной информации о сокращении соединений, смотрите Циклы Схемы Металлорежущего станка и Ограничения Поддержания.
Выберите Signal Dimensions из меню Display> Signals & Ports.
Simulink затем отображает ширину сигналов на диаграмме модели и следовательно позволяет вам считать количество ограничений на четыре системы панели из схемы на следующем шаге.
Установите аналитический режим на Trimming
в блоке Machine Environment.
Режим Trimming затем вставляет подсистему и выходной блок, который выводит сигнал, представляющий механические ограничения на четыре системы панели. Эти ограничения являются результатом закрытия цикла.
Ширина ограничительного сигнала (4) отражает то, что четыре системы панели ограничиваются переместиться в плоскость и таким образом имеют только четыре ограничения: два ограничения положения и два скоростных ограничения.
Исследуйте вектор состояния и подготовьте его к использованию в обрезке.
Покажите размещение вектора состояния системы с mech_stateVectorMgr
:
Handle = get_param('mech_four_bar_trim/Revolute2','handle'); StateManager = mech_stateVectorMgr(Handle); StateManager.StateNames ans = 'mech_four_bar_trim/Revolute2:R1:Position' 'mech_four_bar_trim/Revolute3:R1:Position' 'mech_four_bar_trim/Revolute4:R1:Position' 'mech_four_bar_trim/Revolute2:R1:Velocity' 'mech_four_bar_trim/Revolute3:R1:Velocity' 'mech_four_bar_trim/Revolute4:R1:Velocity'
Задайте вектор начального состояния x0
и индексный массив ix
:
x0 = [0;0;0;0;0;1]; ix = [3;6];
x0
массивов указывает, что команда trim
должна запустить свой поиск решения с четырех систем панели в ее исходном положении, и с заводной рукояткой, перемещающейся в угловую скорость (утвердите 6) 1 радиана/секунда. ix
массивов указывает, что угловое положение (утверждают 3) и скорость (утверждают 6) заводной рукоятки должны равняться их начальным значениям, 0 радианам и 1 радиану/секунда, соответственно, в точке равновесия. Не необходимо ограничить другие состояния, потому что четыре системы панели имеют только одну независимую степень свободы положения и только одну независимую скоростную степень свободы.
Задайте нуль как первоначальную оценку для крутящего момента заводной рукоятки:
u0 = 0;
Потребуйте, чтобы ограничение выходные параметры было 0:
y0 = [0;0;0;0]; iy = [1;2;3;4];
Массив y0
задает начальные значения ограничения выходные параметры как нуль. Массив iy
указывает, что ограничение выходные параметры в точке решения должно равняться их начальным значениям (0). Это гарантирует, что решение удовлетворяет механические ограничения на систему.
Задайте производные состояния, которые будут обрезаны:
dx0 = [0;0;1;0;0;0]; idx = [6];
Массив dx0
задает начальные производные четырех состояний системы панели. В частности, это указывает, что начальная производная угла заводной рукоятки (т.е. угловая скорость заводной рукоятки) является 1 радианом/секунда, и все другие производные (т.е. скорости и ускорения) 0. Массив idx
указывает, что ускорение заводной рукоятки в точке решения должно быть 0; т.е. заводная рукоятка должна перемещаться в постоянную скорость. Не необходимо ограничить ускорения других состояний, потому что система имеет только одну скоростную степень свободы.
Четыре системы панели имеют только ограничение выходные параметры. Если бы вы обрезали систему с неограничением выходные параметры, необходимо было бы включать неограничение выходные параметры в начальный выходной вектор.
Четыре системы панели также имеют только механические состояния. Если бы вы обрезали систему с немеханическими состояниями Simulink, необходимо было бы также включать те немеханические состояния в вектор начального состояния.
Выполните обрезку и изучите вывод.
Обрежьте систему под начальным углом заводной рукоятки, чтобы проверить, что вы правильно настроили операцию для обрезки:
[x,u,y,dx] = ... trim('mech_four_bar_trim',x0,u0,y0,ix,[],iy,dx0,idx);
Обрежьте систему в области значений углов.
Angle = []; Input = []; State = []; dAngle = 2*pi/10; Constraint = []; for i=1:11; x0(3) = (i-1)*dAngle; x0(6) = 1; [x,u,y,dx] = ... trim('mech_four_bar_trim',x0,u0,y0,ix,[],iy,dx0,idx); disp(['Iteration: ', num2str(i), ' completed.']); Angle(i) = x0(3); Input(:,i) = u; State(:,i) = x; Constraint(:,i) = y; if (i>3), u0 = spline(Angle,Input,Angle(end) + dAngle); x0 = spline(Angle,State,Angle(end) + dAngle); else x0 = x; u0 = u; end; end;
Постройте график результатов.
figure(1); plot(Angle,Input); grid; xlabel('Angle (rad)'); ylabel('Torque (N-m)'); title('Input Torque Vs. Crank Angle');
Следующая фигура отображает получившийся график.
Можно использовать Property Editor, чтобы совершенствовать внешний вид графика. Чтобы открыть Property Editor, на панели инструментов фигуры выбирают View> Property Editor.
Следующий раздел, Линеаризация Механических Моделей содержит пример, Линеаризацию С обратной связью: Четыре Машины Панели, обрезки системы по-другому, ища стабильное естественное равновесие четырех механизмов панели.