2016-08-23 4 views
0

У меня есть функциональный блок Matlab в Simulink, который получает 2 входа и обрабатывает его для генерации вывода. В ходе моделирования в определенные моменты времени один из входов равен нулю. Я хотел бы использовать самый новый ненулевой вход для функции, когда это конкретное входное значение равно нулю. Как я могу это достичь? Я попытался создать постоянную переменную, которая обновляет последнее значение, отличное от нуля, но это, похоже, не работает.Функция Matlab в Simulink - сохранить предыдущее ненулевое значение ввода

EDIT 1 (включить код):

function y = fcn(u) 

persistent ref_val 

if isEmpty(ref_val) 
    ref_val=10.0 
end 

if(u(1)<=25) 
    y=20.0 
else 
    if(u(2)>0) 
     y=u(2) 
     ref_val=u(2) 
    else 
     y=ref_val 
    end 
end 

EDIT 2: На данный момент я зафиксировал проблему путем написания кода C, который использует статическую переменную, чтобы сохранить самую последнюю ненулевое значение входного сигнала. Но я по-прежнему приветствую предложения/решения, чтобы реализовать это непосредственно в функции Matlab.

+0

Упорная переменная является способ сделать это. Покажите нам свой код. –

+0

Фил, извините, я должен был включить этот код. См. Править. – arun

+1

Код верен? За исключением того, что я считаю, что «isEmpty» должен быть «ошибочным», поскольку MATLAB чувствителен к регистру для встроенных функций. – DMR

ответ

-1

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

// Найти индекс последнего ненулевого значения на входе

[~, last_non_zero] = тах (найти (вход (1: I)> 0))

// Вызов функция, используя этот вход

выход = FnC (вход (last_non_zero))

+0

Вопрос только в Simulink, а не в MATLAB. Вход не является вектором, поэтому исторические значения недоступны (по умолчанию). –

Смежные вопросы