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

Как поместить данные Simulink в определенные ячейки Excel?

27.05.2020

Здравствуйте!

У меня есть модель в Simulink, там вычисляются разные значения на Display'ях и ряд графиков на Scope'ах. И есть в Excel таблица, в которую надо построчно занести некоторые из этих данных (см. прикреп). Особенность в том, что U и I в таблице - их выводят Scope, а P1, Q1 - Display. Мне надо, во-первых, как-то вытащить численные значения из графиков Scope (хотя этот момент я нашёл на ютубе, не нашёл только следующий), во-вторых, оставить из всего множества значений только пиковое (там график - синусоида, поэтому достаточно 2-3 пиковых значений)!!!

Как это сделать?

Касательно Display - как из этого блока значения получить я вообще не нашёл, там нет никакого "Save To Workspace".

Как сделать это?

Затем. Мне надо, как видите для одного моделирование заполнить одну строку! Командой xlswrite пишет данные массива тупо в столбик, ну там ютубер ещё показал, как сместить данные по вертикали, чтоб они писались, например, не в A1:A8, а в A2:A9, но это не очень важно.

Можно как-то сделать так, чтобы данные не столбик сохранялись, а в ряд или придётся выводить в Excel как есть, а потом вручную перемещать в нужные ячейки?  

Теги

    27.05.2020

    Ответы

    • Павел Рословец
      Павел Рословец +239.28
      27.05.2020 12:00

      Добрый день.

      Блок disp действительно не умеет выводить пременные в Workspace, поэтому используйте блок To Workspace.

      Найти пиковое значение можно с помощью функций max или findpeaks.

      Чтобы записать в Excel на столбец а строку, надо сначала в матлабе перевести столбец в строку, т.е. транспонировать с помощью функции transpose() или оператора '.

      a = [1;2;3]
      b = a'

       

      • Hate_Matlab
        Hate_Matlab-3.62
        27.05.2020 13:41

        Блок disp действительно не умеет выводить пременные в Workspace, поэтому используйте блок To Workspace.

        Выдаёт ошибку: "Simulink does not support 'Array' format for logging multiport data. Change the logging format of the Scope to 'Dataset', 'Structure', or 'Structure with time'." Менял на Structure, Structure with time и Timeset (Dataset никакого не нашёл почему-то). Ошибка перманентная.

        Найти пиковое значение можно с помощью функций max или findpeaks.

        Эти функции знаю, я имел в виду, чтобы их не держать включенными и переписывать показания, а чтобы matlab сам их определял среди тех данных, которые пойдут в Excel. Вручную переписывать я могу, но когда тут есть риск, что моделирований будет две дюжины, то я задолбаюсь всю таблицу заполнять руками.

        Чтобы записать в Excel на столбец а строку, надо сначала в матлабе перевести столбец в строку, т.е. транспонировать с помощью функции transpose() или оператора '.

        Не могу попробовать. Убрал To Workspace, а ошибка из 1 пункта осталась. Мне не нравится, куда катится модель...

        • aBoomest
          aBoomest+942.89
          27.05.2020 20:18

          см.тут. и тут модель или картинку. Что представляют данные которые вы хотите "логить"?

          Эти функции знаю, я имел в виду, чтобы их не держать включенными и переписывать показания, а чтобы matlab сам их определял среди тех данных, которые пойдут в Excel. Вручную переписывать я могу, но когда тут есть риск, что моделирований будет две дюжины, то я задолбаюсь всю таблицу заполнять руками.

          Так вам вроде и советуют (Павел Рословец) сохранить, найти пики или максы, это уж вам виднее. А дисплеи можно вобще выкинуть.

          • Hate_Matlab
            Hate_Matlab-3.62
            28.05.2020 05:40

            Так вам вроде и советуют (Павел Рословец) сохранить, найти пики или максы, это уж вам виднее. А дисплеи можно вобще выкинуть.

            Аааа. Имеется в виду, что это программные слова такие, и их надо вводить в рабочую область? Я просто думал, что речь о настройках Scope внутри симулинка, там ведь можно заставить отображаться пики графиков.

            Что представляют данные которые вы хотите "логить"?

            Ну, таблицу я приложил в прикрепе, там I,U - действующие (иногда пиковые) значения токов и напряжений, всё остальное (P,Q,cos,Mэм...) - это мгновенные значения в самом конце моделирования.

            В идеале хотелось бы какую-нибудь такую штуковину замутить, чтобы в одном... не знаю, как это правильно на программистском... квадратике с таблицей данных в поле Workspace сохранять не все данные за моделирование, а только последние для тех переменных, которые должны быть мгновенными, только 2-3 пиковых значения для пиковых, и действующие для действующих. И всё вот это в одном "квадратике данных" из разных Scope, To Workspace. Это, как я сказал, в идеале, а вообще в зависимости от того, на сколько что из этого осуществимо.

      • aBoomest
        aBoomest+942.89
        28.05.2020 08:44

        1. Да.

        2. Ясно.

        3. Ясно. Имелось ввиду какой формат данных у них в симулинке. Т.е. это массив или структура.

        В идеале ...

        Сделать не сильно сложно думаю. 

        Если через scope - ограничение по кол-ву точек. Поставить там столько, сколько вам нужно и у них найти пики. Это как пример.

        Есть (на сколько помню) блок находящий пики, поищите в хелпе, названия не помню. Можно наверно как-то пожинить с тригером и сохранять только то что в конце. 

        Либо вобще просто последнюю точку только смотреть. Для действующих значений это точно вариант.

        Это так, придумки находу.

        UPD: Вот с этой штукой наверняка можно что-то придумать. Блок запоминает значения.

        • Hate_Matlab
          Hate_Matlab-3.62
          28.05.2020 10:39

          Хорошо, попробую. Может, чё-нибудь и выгорит. Хотя мне уже не кажется, что вручную заносить значения - это очень сложно))

        • xykep
          xykep0.00
          5.05.2023 21:09

          Добрый день! Подскажите, пожалуйста, название видео - "хотя этот момент я нашёл на ютубе, не нашёл только следующий".