• Регистрация
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.

    • 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

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