вопрос по схеме матлаб функции, подскажите пожалуйста
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%
спасибо всем кто овтетит)
Комментарии
Давайте сюда сообщение об ошибке.
Матлаб под рукой нет, смотрю с телефона. У Вас не хватает " end ", который должен завершить функцию.
Предпоследняя строчка
Не уверен, что это корректное выражение.
Ну оно формально вполне корректное, но то что оно тут как-то не совсем понятно зачем - согласен.
ко всему сказанному...
Вряд ли хорошо возвращать из функции глобальную переменную. Функция - локальная вещь. И параметры ее так и называются - локальные. Вы скорее всего должны при вызове вашей ф-ции записывать в глобальный UP. А название формального параметра д.б. другое. Так общепринято вне зависимостиот языка программирования.
Золотой вы человек.
а еще такой вопрос, как сделать чтобы функция делала цикл, когда я вывожу ее на scope в симулинке. А то у меня только 1 раз прогоняет и все, получается, что я пишу UP= Up-0.01 не повторяется по циклу, и значение не прибавляется и не убавляется. Мне как бы надо когда доходит до 100% то она (задвижка) полностью открывается. и наоборот, когда до 0 спускается, то полностью закрывается. срабатывать команда как бы должна Cmd_Open и аналогично Cmd_Close
А вобще моедель выложите, так может проще будет. Только у меня нет в данный момент суперпоследнего матлаба. Старый вариант моделей с расширением *.SLX
ближе к обеду смогу посмотреть. Если кто другой из колег не посмотрит раньше)
\
вот смотрите, мне надо чтобы на графике scope , он у меня повторялся, как бы каждый цикл по новому считал, чтобы прибавлял и оно увеличиволась до 100 , получается чтобы срабатывала команда Open , и наоборот когда команда опен сработала, уменьшалось по циклам до состояния закрытая, но у меня не делает цикл и не прибавляет каждый раз на 0.01, а просто 1 раз прибавило и все, а мне надо чтобы этот цикл повторялся и я мог видеть это в Time scope. Можете подсказать?
а функция у вас в этом блоке сидит?
так она и так вызывается по циклу
модель вобщем положите
функция вот такая сидит,
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 и график менялся, а он не меняетя а стоит на одних значениях которые вначале прибавил
вы модель сохраните как mdl и выложите?
zUP = 0; и каждый раз ноль на каждой итерации
Инициализация этой переменной наверно должна быть вне этого блока и инициализированное а затем текущее значение должны передаваться в блок .Для этого помнится удобнее было s-function использовать.
спасибо большое)
а с тобой можно как-то связать, чтобы получить уроки или что-то подобное