Как реализовать момент инерции, возрастающий по параболе, и множество переключений сигналов?
Чуть больше недели назад я уже спрашивал, как задать сложную функцию, состоящую из трёх участков y=k1, y=k3x, y=k2 с помощью Multiport Switch. Мне предложили пока обойтись обычным Switch и шаманить в блоке Ramp.
Но я фигни не скажу! Я не зря просил объяснить, как с Multiport Switch работать, попачуялка-то работает, ещё не подводила!
И конечно, я оказался прав. К своему же сожалению. Теперь надо сделать момент инерции, который задаётся... вот этим кошмаром (первое фото). Тут сразу видно, что нужны минимум 2 блока Step (хотя здесь я не уверен в их количестве), 1 Constant, 2 Ramp и ещё один, который я не нашёл, типо Sqrt(t).
Здесь точно понадобится многопереключательный ключ. И, как я писал, я не могу понять, как там задавать моменты времени, на которых происходят переключения к разным блокам. Объясните этот блок, пожалуйста.
И второй вопрос: на фото графика, где участок с параболой. Среди обычных блоков нет такого, который испускал бы сигнал в виде u=sqrt(t) (я нашёл только просто блок квадртаного корня, но в него должно что-нибудь входить, а входить нечему). Может есть такой блок среди этой кучи библиотек? Просто если б я знал, что искать, то вбил бы в поиск, но я названия не знаю.
Лучший ответ
Сдвиг есть?
Clock -> sqrt(x - сдвиг) -> ...........................
Clock -> sqrt(x - 30 сек) -> ...........................
сдвиг - сдвиг вашей параболы, она же у вас не из нуля выходит.
Ответы
Такое набирать блоками и всякими даже (пусть по вашему) мультипортосвичами - ужас. Если у Вас сегодня одно, завтра другое, послезавтра . . . . . кто мешает задавать этот массив каким вашей душе угодно способом, а потом в модели уже что-то в духе From File или FromWorkspace.
Есть 3 приличных способа задать сложный сигнал:
1. Собрать сигнал в MATLAB и подать в модель через In port или через From, как писал aBoomest.
2. Задать сигнал в блоке Signal Editor.
3. Воспользоваться Stateflow.
Рекомендую способ 2, он самый модный, в то же время самый удобный.
Если вы очень хотите использовать Multiport switch, то вам нужно озаботиться привязкой сигналов ко времени. Для этого понадобится источник сигнала Clock и блоки из раздела logic and bit operations.
Проблему с параболой совсем не понял.
Не знаю, как тут отвечать двоим сразу, надеюсь вам обоим придёт.
Мешает то, что я не программист. Я на фортане не разговариваю... точнее не пишу. И программирование в матлабе - это то, чего я хотел бы избегать до последнего. Вот прям до тех пор, пока не останется никаких альтернатив, и единственным способом что-то сделать - будет способ сделать это через программирование. Блоки - это проще и понятнее... нет, это конечно, сущий ад, но из двух зол выбирают...
И если я не ошибаюсь, то вот это "сегодня одно, завтра другое..." как раз многопереключательным ключом и решается, ибо в него можно и 2 и 100 функций ввести (я могу ошибать, ибо в Help пишут как-то чересчур завумно, и гугл-переводчик зачастую переводит на какой-то свой собственный русский язык). Поэтому хотелось бы с ним разобраться. Но в то же время, если есть альтернатива в виде какого-то другого блока-ключа или переключателя, то подскажите, я просто не нашёл ничего зрительно похожего на переключатель.
Кстати про программирование, вы мне подкинули идею, надо другу с программной инженерии позвонить, может он в фортан могёт. Хотя в энергетику он не могёт, бедааааа...
В том-то и проблема. Есть обычный блок Switch. Там всё понятно, он идеально проработан: снизу первый сигнал, посередине Clock, сверху второй сигнал. В самом блоке только 1 поле, в котором указывается время переключения. Почему Multiport Switch не сделали под копирку этому я не понимать.
Как с преобразователями из силовой электроники получается: либо КПД офигенный, но сигнал - хлам, либо наоборот.
В этом мультипорте я не могу понять вот чего: там есть несколько входов, куда судя по всему нужно подавать разные сигналы - Ramp, Step, Constant, т.д. Над этими входами надписаны цифры. Так как никакого входа под Clock нету, я предположил, что эти цифры и есть моменты времени, в которых происходит переключение. Но тогда остаётся вопрос, что делает самый-самый верхний вход? Он не подсоединён к рычагу переключения вообще, и цифры над ним никакие поставить нельзя.
Ну на первом фото видите, есть участок времени, когда функция Jж становится параболической (y=sqrt(x) грубо говоря). Вот, а теперь смотрим симулинк:
Ramp: y=kx+b
Step: мгновенный скачок с y=a до y=b
Constant: y=C
А какой блок делает y=sqrt(x) или y=x^(1/2) я не нашёл. Вот его подскажите, пожалуйста.
Оно работает так (см.картинку): вот есть у вас 3 разных сигнальных входа с разными сигналами. На самый верхний вход управления вы должны подать либо 1-цу, либо 2-ку, либо 3-ку (см.верхнюю осциллограмму), т.е. сигнал управления может принимать только три значения соответственно номеру входа. И в те моменты времени когда например на верхнем входе у вас будет 2-ка, то на выход будет пропускаться сигнал со 2-го сигнального входа.
По поводу квадрата, наверно надо использовать блоки типа Math Function.
Я этот блок знаю. Есть ещё и просто блок Sqrt и Signed Sqrt. Вы не понимайте. Это всё блоки, которые вычисляют квадрат какого-то входящего в них сигнала. А в моём случае нужен, блок, который генерирует такой сигнал! То бишь у него не должно быть входа, только выход, как у Ramp, Sin Wave или Constant, потому что мне нечего в Math Function подавать.
Ааааа. Блин. Тогда, наверное, придётся что-нибудь придумать с пятью Switch'ами.
Так вход это аргумент функции, вы на вход Clock бабахаете и всё.
А signal editor по совету kurguz'а тоже не подойдет?
Он же берёт данные из матлабского файла. Это то же самое программирование, что и с блоком MATLAB Function, например. Учить новый язык - это может и идея, но на это нужны годы, и это сложный вариант (как по мне). Мне бы предпочтительно "кубики" посоединять, если уж на то пошло, да и то в них проблем не оберёшься.
Да, действительно получается парабола, только на отрезке времени 0-1.4 почему-то осциллограмма линейная, а не кривая... ну это бог с ним - спишем на 5%.
А вот в контрукции остаётся проблема: на фото, закреплённом в начале темы парабола дожна исходить из нуля в момент времени, пусть будет 30 сек. Но Clock->Sqrt считает из начала отсчёта, как я понял. Там его надо как-нибудь замедлить, чтобы он начинал считать с 30 секунды... и приходил в значение Jж=8. Ну второе - это наверное надо будет коэффициент k задать Gain'ом, а отложить старт как?
Сдвиг есть?
Clock -> sqrt(x - сдвиг) -> ...........................
Clock -> sqrt(x - 30 сек) -> ...........................
сдвиг - сдвиг вашей параболы, она же у вас не из нуля выходит.
Чё-то не пойму. В блоке Sqrt нельзя задать сдвиг, в этом и проблема коей нет у генерирующих блоков типо Ramp. Здесь только два параметра.
Function: sqrt; signedsqrt; rSqrt
Output signal type: auto; real; complex.
А, всё. Сделал. Надо было не так.
Clock
-> Sum (+-) -> Sqrt -> Gain -> ...
Constant (30)
Всё, спасибо!!!
Да, вроде так тоже пойдет.
Ок. Думал это будет понятно. Два варианта к примеру: