• Регистрация
dinar333
dinar333 0.00
н/д

вопрос по схеме матлаб функции, подскажите пожалуйста

03.09.2020
function [Open, Closed, UP] = zadvishka(Cmd_Open, Cmd_Close)global UPUP = 0;Closed = true;Open = false;if Cmd_Open == trueUP = UP + 0.01;UP = 100; endif Cmd_Close == trueUP = UP - 0.01;UP <= 0;end...

function [Open, Closed, UP] = zadvishka(Cmd_Open, Cmd_Close)
global UP
UP = 0;
Closed = true;
Open = false;
if Cmd_Open == true
UP = UP + 0.01;
UP = 100;
end
if Cmd_Close == true
UP = UP - 0.01;
UP <= 0;
end

тут есть небольшой код, почему то пишет ошибка, что (if Cmd_Open ==true) на один знак = тоже менял, пишет обратную ошибку, что надо ==.

в общем вопрос такой, здесь я написал симуляцию задвижки, что мне надо подключить к ним, чтобы она начала работать, как я понимаю на выходе будет Scope , там мне нужно будет чтобы я за определенное время могу увидеть, как везет себя сама задвижка, за сколько времени она пропускает 100% и обратную сторону за сколько она закрывается на 100% пробовал на другой простой функцие из интернета, теперь надо похожую ситуацию сделать с моей задвижкой, чтобы привести ее в симуляцию, как возможно это сделать, что надо подключить на вход? получается открывается задвижка, поступает вода под давлением, и вот мне надо узнать, за какое время задвижка откроется, чтобы она смогла пропускать 100%

спасибо всем кто овтетит)

Теги

      03.09.2020

      Комментарии

      • Хасбулат Нурмагомедов
        Хасбулат Нурмагомедов +43.63
        3.09.2020 10:55

        Давайте сюда сообщение об ошибке.

        • Хасбулат Нурмагомедов
          Хасбулат Нурмагомедов +43.63
          3.09.2020 10:58

          Матлаб под рукой нет, смотрю с телефона. У Вас не хватает " end ", который должен завершить функцию.

          • Хасбулат Нурмагомедов
            Хасбулат Нурмагомедов +43.63
            3.09.2020 11:04

            Предпоследняя строчка 

            UP <= 0;

            Не уверен, что это корректное выражение.

            • aBoomest
              aBoomest+942.89
              3.09.2020 17:50

              Ну оно формально вполне корректное, но то что оно тут как-то не совсем понятно зачем - согласен.

            • aBoomest
              aBoomest+942.89
              3.09.2020 17:49

              ко всему сказанному...

              Вряд ли хорошо возвращать из функции глобальную переменную. Функция - локальная вещь. И параметры ее так и называются - локальные. Вы скорее всего должны при вызове вашей ф-ции записывать в глобальный UP. А название формального параметра д.б. другое. Так общепринято вне зависимостиот языка программирования.

              • aBoomest
                aBoomest+942.89
                3.09.2020 18:03
                % О глобальных локальных формальных и фактических параметрах.
                % Слегка переделал. Добавил вопросы.
                
                function [zOpen, zClosed, zUP] = zadvishka(zCmd_Open, zCmd_Close)
                global UP; % необходимость наличия этого не совсем ясно
                
                zUP = 0; % вероятно эта строка лишняя
                zClosed = true;
                zOpen = false;
                if zCmd_Open == true
                    % подряд присвоение одной и тойже переменной zUP разных значений
                    % вторая строка исключает смысл присутствия первой строки
                    % во втором if'е тоже самое
                    % какое действие вы хотите сделать в этом блоке if'а ?
                    zUP = zUP + 0.01;
                    zUP = 100;
                end;
                if zCmd_Close == true
                    zUP = zUP - 0.01;
                    zUP <= 0;  
                end;
                
                end
                
                ВЫЗОВ В ОСНОВНОЙ ПРОГРАММЕ
                
                [Open, Closed, UP] = zadvishka(Cmd_Open, Cmd_Close);
                UP - это ваш глобальный параметр
                • Хасбулат Нурмагомедов
                  Хасбулат Нурмагомедов +43.63
                  3.09.2020 19:21

                  Золотой вы человек.

                  • dinar333
                    dinar3330.00
                    4.09.2020 05:20

                    а еще такой вопрос, как сделать чтобы функция делала цикл, когда я вывожу ее на scope в симулинке. А то у меня только 1 раз прогоняет и все, получается, что я пишу UP= Up-0.01 не повторяется по циклу, и значение не прибавляется и не убавляется. Мне как бы надо когда доходит до 100% то она (задвижка) полностью открывается. и наоборот, когда до 0 спускается, то полностью закрывается. срабатывать команда как бы должна Cmd_Open и аналогично Cmd_Close

                    • aBoomest
                      aBoomest+942.89
                      4.09.2020 06:24
                      ВЫЗОВ В ОСНОВНОЙ ПРОГРАММЕ
                      
                      for k=1:Count
                        [Open, Closed, UP] = zadvishka(Cmd_Open, Cmd_Close);
                      end;

                      А вобще моедель выложите, так может проще будет. Только у меня нет в данный момент суперпоследнего матлаба. Старый вариант моделей с расширением *.SLX

                      ближе к обеду смогу посмотреть. Если кто другой из колег не посмотрит раньше)

                  • dinar333
                    dinar3330.00
                    4.09.2020 06:24

                    \

                    вот смотрите, мне надо чтобы на графике scope , он у меня повторялся, как бы каждый цикл по новому считал, чтобы прибавлял и оно увеличиволась до 100 , получается чтобы срабатывала команда Open , и наоборот когда команда опен сработала, уменьшалось по циклам до состояния закрытая, но у меня не делает цикл и не прибавляет каждый раз на 0.01, а просто 1 раз прибавило и все, а мне надо чтобы этот цикл повторялся и я мог видеть это в Time scope. Можете подсказать?

                    • aBoomest
                      aBoomest+942.89
                      4.09.2020 06:54

                      а функция у вас в этом блоке сидит?

                      так она и так вызывается по циклу

                      модель вобщем положите

                    • dinar333
                      dinar3330.00
                      4.09.2020 07:05

                      функция вот такая сидит,

                      function [zOpen, zClosed, zUP] = block(zCmd_Open, zCmd_Close)
                      zUP = 0;
                      zClosed = true;
                      zOpen = false;
                      if zCmd_Open == true
                      zUP = zUP + 0.01;
                      end;
                      if zCmd_Close == true
                      zUP = zUP - 0.01;
                      end;

                      end

                      но почему она не прибавляет, а стоит на одном значение, мне налдо чтобы она повторялась и например через каждый 10 секунд график обновлялся и прибавлял там на 0.01 и график менялся, а он не меняетя а стоит на одних значениях которые вначале прибавил

                      • aBoomest
                        aBoomest+942.89
                        4.09.2020 07:33

                        вы модель сохраните как mdl и выложите?

                        • dinar333
                          dinar3330.00
                          4.09.2020 07:47
                          • aBoomest
                            aBoomest+942.89
                            4.09.2020 10:03

                            zUP = 0; и каждый раз ноль на каждой итерации

                            Инициализация этой переменной наверно должна быть вне этого блока и инициализированное а затем текущее значение должны передаваться в блок .Для этого помнится удобнее было  s-function использовать. 

                            • dinar333
                              dinar3330.00
                              4.09.2020 10:31

                              спасибо большое)

                              • dinar333
                                dinar3330.00
                                7.09.2020 07:05

                                а с тобой можно как-то связать, чтобы получить уроки или что-то подобное