Обнаружение момента выборки для дискретного контроллера в MATLAB/Simulink

Предположим, что у меня есть непрерывная система в Simulink, которой нужно управлять. Сначала я применяю фильтр Калмана для оценки состояний системы. На следующем этапе я буду использовать предполагаемое состояние (x_hat) во встроенной функции MATLAB, которая вызывает функцию прогнозирующего контроллера модели my_mpc следующим образом:

function [u]= emd_fcn(x_hat , r,  t,  Ts)  

      % x_hat:  estimated state,  r: reference to be tracked, 
      t: clock time,   Ts: sampling  period

      %#codegen
      coder.extrinsic('my_mpc');  % to call the function my_mpc 

       ----- % some initialization code

      if mod(t, Ts)==0

            u=my_mpc(x, r)

      else
            u=-----; % some code.

      end


end  

Однако, поскольку время часов t является переменной, mod(t, Ts) == 0 не будет иметь место. Мой вопрос: как мы можем определить момент выборки, чтобы применить вход дискретного управления mpc к непрерывной системе?


person user3489173    schedule 15.08.2014    source источник


Ответы (1)


Вы должны просто сделать контроллер дискретным. Щелкните правой кнопкой мыши на блоке MATLAB Function, выберите Block Parameters и задайте дискретный шаг расчета.

person Phil Goddard    schedule 16.08.2014