В этом примере показано, как можно использовать инициализацию основных переменных и как она влияет на результаты симуляции простой механической системы.
Модель является классической невынужденной системой масса-пружина-демпфер, с колебаниями массы, вызванными начальной деформацией пружины.
Создайте простую систему масса-пружина-демпфер. Используйте Mass, Translational Spring, Translational Damper, Mechanical Translational Reference, Ideal Translational Motion Sensor, PS-Simulink Converter, Solver Configuration, и Scope блоки, и соедините их как показано в следующем рисунке.
В Translational Damper диалогового окна блока установите параметр Damping coefficient равным 10
N/(m/s)
. Используйте значения параметров по умолчанию для всех других блоков.
Подготовьте модель к симуляции. В окне модели откройте вкладку Modeling и нажмите Model Settings. Откроется диалоговое окно Параметры конфигурации (Configuration Parameters), в котором отображается панель Solver. Установите Solver значение ode23t (mod.stiff/Trapezoidal)
и Max step size к 0.2
. Также настройте Simulation time в диапазоне от 0 до 2 секунд, установив для Stop time значение 2.0
.
Задайте начальную деформацию пружины. Дважды кликните Translational Spring блок. В диалоговом окне блока щелкните вкладку Variables, а затем установите флажок рядом с переменной Deformation. Измените его Priority на High
. Измените Beginning Value на 0.1
. Оставьте Unit без изменений как m
.
Отрегулируйте начальное положение датчика, чтобы компенсировать деформацию пружины. Дважды кликните блок Ideal Translational Motion Sensor и установите его значение параметров Initial position равным 0.1
m
также. Таким образом, когда вы моделируете модель, колебания массы центрируются вокруг 0.
Симулируйте модель.
Откройте средство просмотра переменных. В окне модели на вкладке Debug нажмите Simscape > Variable Viewer.
Переменная x Translational Spring, в нижней строке, имеет высокий приоритет и целевое значение 0,1 м. Это Deformation переменная, которую вы только что создали в диалоговом окне блока. Его фактическое начальное значение соответствует его целевому значению, и поэтому в Status столбце отображается зеленый круг.
Другой высокоприоритетной переменной в этой модели является положение, x, Идеального блока Датчика Поступательного Движения, который устанавливается внутри файла компонента, потому что это необходимо для правильной операции датчика. Его фактическое начальное значение также соответствует его целевому значению, а Status столбец также отображает зеленый круг.
Остальная часть переменных в модели не имеет заданного приоритета инициализации, поэтому в их Status столбце также отображаются зеленые круги. Общий статус в нижней части окна Средство Просмотра также отображает зеленый круг и говорит, что все переменные цели удовлетворены.
Теперь можно увидеть, как задать различные переменные цели влияний инициализацию и результаты симуляции системы.
Задайте начальную скорость массы. Дважды кликните блок Mass, перейдите на вкладку Variables, установите флажок рядом с переменной Velocity, измените его Priority на High
, и введите начальное значение 10
. Сохраните модуль m/s
.
Когда вы изменяете приоритеты и цели переменных или корректируете параметры блоков, результаты в Средство Просмотра не обновляются автоматически. Вместо этого кнопка Refresh отображает предупреждающий символ (желтый треугольник), а временная метка в нижней части окна средства просмотра становится красной, чтобы указать, что данные в средстве просмотра не отражают последних изменений модели.
Обновите средство просмотра переменных нажав кнопку.
Можно увидеть, что решатель нашел другое начальное решение, которое удовлетворяет вашим переменным целям для деформации пружины и массовой скорости. В столбце Status отображаются зеленые круги, а общий статус в нижней части окна Средство Просмотра также отображает зеленый круг и говорит, что все переменные цели удовлетворены.
Заметьте, что при обновлении средства просмотра переменных возможностей не заполнены. Это происходит, потому что решатель запускает симуляцию в течение 0 секунд, чтобы найти начальное решение и отобразить его в Variable Viewer.
Перезапустите симуляцию и исследуйте окна Scope Velocity and Position, чтобы увидеть эффект нового начального значения массовой скорости на результаты симуляции.
Когда вы задаете дополнительные цели переменных, иногда можно переопределить ограничения.
Дважды кликните блок Translational Damper, перейдите на вкладку Variables, установите флажок рядом с переменной Force, измените его Priority на High
, и введите начальное значение 200
. Сохраните модуль N
.
Обновите средство просмотра переменных.
Общий статус в нижней части окна Средство Просмотра теперь отображает красный квадрат и говорит, что решатель не может удовлетворить всем высокоприоритетным переменным целям. В столбце Status есть красные квадраты для двух высокоприоритетных переменных с целями, не удовлетворенными, а также для их родительских блоков.
Заметьте, что решатель смог найти решение для инициализации модели. Если вы перезапустили симуляцию, она запускается без ошибок, и вы можете увидеть новые результаты симуляции.
Однако Средство Просмотра показывает, что решение инициализации модели не удовлетворяет вашим целевым значениям для основных переменных. Это происходит, потому что наложение высокоприоритетных ограничений на все три элемента системы масса-пружина-демпфер приводит к конфликту. Можно решить проблему сверхспецификации, ослабив приоритет некоторых конфликтующих переменных целей.
Еще раз дважды кликните Translational Damper блок, перейдите на вкладку Variables и измените приоритет переменной Force на Low
.
Обновите средство просмотра переменных.
Общий статус в нижней части окна Средство Просмотра теперь отображает желтый треугольник и говорит, что все высокоприоритетные цели удовлетворены, но некоторые из низкоприоритетных целей не удовлетворены. Теперь в столбце состояния есть два желтых треугольника: один для переменной низкоприоритетной силы f и один для ее родительского блока, Translational Damper.
По существу, решение, найденное в этом случае, аналогично тому, как когда вы ранее задали высокоприоритетную цель для массовой скорости, и результаты симуляции те же.
Другой способ решения проблемы сверхспецификации - сохранить высокий приоритет силы демпфера и ослабить приоритет начальной скорости массы. Еще раз дважды кликните Translational Damper блок, перейдите на вкладку Variables и измените приоритет переменной Force на High
. Затем дважды кликните блок Mass, перейдите на вкладку Variables и измените приоритет переменной Velocity на Low
.
Обновите средство просмотра переменных.
Снова, статус Variable Viewer говорит, что все высокоприоритетные цели были удовлетворены и что некоторые из низкоприоритетных целей не удовлетворены. Однако, поскольку вы изменили приоритеты переменных, решатель теперь попытался удовлетворить начальную силу на демпфер, а не массовую скорость, и решение в этом случае отличается, как и результаты симуляции.