• Регистрация
Hate_Matlab
Hate_Matlab -3.62
н/д

Как реализовать момент инерции, возрастающий по параболе, и множество переключений сигналов?

28.04.2020

Чуть больше недели назад я уже спрашивал, как задать сложную функцию, состоящую из трёх участков y=k1, y=k3x, y=kс помощью Multiport Switch. Мне предложили пока обойтись обычным Switch и шаманить в блоке Ramp.

Но я фигни не скажу! Я не зря просил объяснить, как с Multiport Switch работать, попачуялка-то работает, ещё не подводила!

И конечно, я оказался прав. К своему же сожалению. Теперь надо сделать момент инерции, который задаётся... вот этим кошмаром (первое фото). Тут сразу видно, что нужны минимум 2 блока Step (хотя здесь я не уверен в их количестве), 1 Constant, 2 Ramp и ещё один, который я не нашёл, типо Sqrt(t).

Здесь точно понадобится многопереключательный ключ. И, как я писал, я не могу понять, как там задавать моменты времени, на которых происходят переключения к разным блокам. Объясните этот блок, пожалуйста.

И второй вопрос: на фото графика, где участок с параболой. Среди обычных блоков нет такого, который испускал бы сигнал в виде u=sqrt(t) (я нашёл только просто блок квадртаного корня, но в него должно что-нибудь входить, а входить нечему). Может есть такой блок среди этой кучи библиотек? Просто если б я знал, что искать, то вбил бы в поиск, но я названия не знаю. 

Лучший ответ

  • aBoomest+942.89
    29.04.2020 12:00

    Сдвиг есть?

    Clock -> sqrt(x - сдвиг) -> ...........................

    Clock -> sqrt(x - 30 сек) -> ...........................

    сдвиг - сдвиг вашей параболы, она же у вас не из нуля выходит.

Ответы

  • aBoomest
    aBoomest+942.89
    28.04.2020 21:11

    Такое набирать блоками и всякими даже (пусть по вашему) мультипортосвичами - ужас. Если у Вас сегодня одно, завтра другое, послезавтра . . . . . кто мешает задавать этот массив каким вашей душе угодно способом, а потом в модели уже что-то в духе From File или FromWorkspace.

    • kurguz
      kurguz+270.00
      29.04.2020 01:04

      Есть 3 приличных способа задать сложный сигнал:

      1. Собрать сигнал в MATLAB и подать в модель через In port или через From, как писал aBoomest. 

      2. Задать сигнал в блоке Signal Editor. 

      3. Воспользоваться Stateflow.

      Рекомендую способ 2, он самый модный, в то же время самый удобный.

      Если вы очень хотите использовать Multiport switch, то вам нужно озаботиться привязкой сигналов ко времени. Для этого понадобится источник сигнала Clock и блоки из раздела logic and bit operations.

      Проблему с параболой совсем не понял. 

      • Hate_Matlab
        Hate_Matlab-3.62
        29.04.2020 09:50

        Не знаю, как тут отвечать двоим сразу, надеюсь вам обоим придёт.

        Такое набирать блоками и всякими даже (пусть по вашему) мультипортосвичами - ужас. Если у Вас сегодня одно, завтра другое, послезавтра . . . . . кто мешает задавать этот массив каким вашей душе угодно способом, а потом в модели уже что-то в духе From File или FromWorkspace.

        Мешает то, что я не программист. Я на фортане не разговариваю... точнее не пишу. И программирование в матлабе - это то, чего я хотел бы избегать до последнего. Вот прям до тех пор, пока не останется никаких альтернатив, и единственным способом что-то сделать - будет способ сделать это через программирование. Блоки - это проще и понятнее... нет, это конечно, сущий ад, но из двух зол выбирают...

        И если я не ошибаюсь, то вот это "сегодня одно, завтра другое..." как раз многопереключательным ключом и решается, ибо в него можно и 2 и 100 функций ввести (я могу ошибать, ибо в Help пишут как-то чересчур завумно, и гугл-переводчик зачастую переводит на какой-то свой собственный русский язык). Поэтому хотелось бы с ним разобраться. Но в то же время, если есть альтернатива в виде какого-то другого блока-ключа или переключателя, то подскажите, я просто не нашёл ничего зрительно похожего на переключатель.

        Кстати про программирование, вы мне подкинули идею, надо другу с программной инженерии позвонить, может он в фортан могёт. Хотя в энергетику он не могёт, бедааааа...

        Если вы очень хотите использовать Multiport switch, то вам нужно озаботиться привязкой сигналов ко времени. Для этого понадобится источник сигнала Clock и блоки из раздела logic and bit operations.

        В том-то и проблема. Есть обычный блок 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) я не нашёл. Вот его подскажите, пожалуйста. 

        • aBoomest
          aBoomest+942.89
          29.04.2020 10:15

          В этом мультипорте я не могу понять вот чего: там есть несколько входов, куда судя по всему нужно подавать разные сигналы - Ramp, Step, Constant, т.д. Над этими входами надписаны цифры. Так как никакого входа под Clock нету, я предположил, что эти цифры и есть моменты времени, в которых происходит переключение. Но тогда остаётся вопрос, что делает самый-самый верхний вход? Он не подсоединён к рычагу переключения вообще, и цифры над ним никакие поставить нельзя.

          Оно работает так (см.картинку): вот есть у вас 3 разных сигнальных входа с разными сигналами. На самый верхний вход управления вы должны подать либо 1-цу, либо 2-ку, либо 3-ку (см.верхнюю осциллограмму), т.е. сигнал управления может принимать только три значения соответственно номеру входа. И в те моменты времени когда например на верхнем входе у вас будет 2-ка, то на выход будет пропускаться сигнал со 2-го сигнального входа.

          Работа Multiport switch

          По поводу квадрата, наверно надо использовать блоки типа Math Function.

          • Hate_Matlab
            Hate_Matlab-3.62
            29.04.2020 10:39

            По поводу квадрата, наверно надо использовать блоки типа Math Function.

            Я этот блок знаю. Есть ещё и просто блок Sqrt и Signed Sqrt. Вы не понимайте. Это всё блоки, которые вычисляют квадрат какого-то входящего в них сигнала. А в моём случае нужен, блок, который генерирует такой сигнал! То бишь у него не должно быть входа, только выход, как у Ramp, Sin Wave или Constant, потому что мне нечего в Math Function подавать.

            Оно работает так

            Ааааа. Блин. Тогда, наверное, придётся что-нибудь придумать с пятью Switch'ами.

            • aBoomest
              aBoomest+942.89
              29.04.2020 10:58

              Так вход это аргумент функции, вы на вход Clock бабахаете и всё.

              А signal editor по совету kurguz'а тоже не подойдет?

        • Hate_Matlab
          Hate_Matlab-3.62
          29.04.2020 12:53

          А signal editor по совету kurguz'а тоже не подойдет?

          Он же берёт данные из матлабского файла. Это то же самое программирование, что и с блоком MATLAB Function, например. Учить новый язык - это может и идея, но на это нужны годы, и это сложный вариант (как по мне). Мне бы предпочтительно "кубики" посоединять, если уж на то пошло, да и то в них проблем не оберёшься.

           Так вход это аргумент функции, вы на вход Clock бабахаете и всё.

          Да, действительно получается парабола, только на отрезке времени 0-1.4 почему-то осциллограмма линейная, а не кривая... ну это бог с ним - спишем на 5%.

          А вот в контрукции остаётся проблема: на фото, закреплённом в начале темы парабола дожна исходить из нуля в момент времени, пусть будет 30 сек. Но Clock->Sqrt считает из начала отсчёта, как я понял. Там его надо как-нибудь замедлить, чтобы он начинал считать с 30 секунды... и приходил в значение Jж=8. Ну второе - это наверное надо будет коэффициент k задать Gain'ом, а отложить старт как?

          • aBoomest
            aBoomest+942.89
            29.04.2020 15:56

            Сдвиг есть?

            Clock -> sqrt(x - сдвиг) -> ...........................

            Clock -> sqrt(x - 30 сек) -> ...........................

            сдвиг - сдвиг вашей параболы, она же у вас не из нуля выходит.

            • Hate_Matlab
              Hate_Matlab-3.62
              29.04.2020 16:07

              Чё-то не пойму. В блоке Sqrt нельзя задать сдвиг, в этом и проблема коей нет у генерирующих блоков типо Ramp. Здесь только два параметра.

              Function: sqrt; signedsqrt; rSqrt

              Output signal type: auto; real; complex.

              • Hate_Matlab
                Hate_Matlab-3.62
                29.04.2020 16:21

                А, всё. Сделал. Надо было не так.

                Clock 

                                      -> Sum (+-) -> Sqrt -> Gain -> ...

                Constant (30)

                Всё, спасибо!!!

                • aBoomest
                  aBoomest+942.89
                  29.04.2020 16:24

                  Да, вроде так тоже пойдет.

            • aBoomest
              aBoomest+942.89
              29.04.2020 16:23

              Ок. Думал это будет понятно. Два варианта к примеру: