Search code examples
matlabstoragesimulink

Saving a specific simulation time


I have a two-track model implemented in simulink. To control the velocity I use a PID-controller, so that the the output of the velocity looks like this:

simulink

now I want to implement a MATLAB function or simulink block that tracks the time when the velocity reaches a steady-state-behaviour and puts it into some kind of storage. I tried to implement something like this via the following MATLAB function with MATLAB-function-block:

function y = fcn(t,v,dv,tv)
  %#codegen
  if (v==tv+0.01) & (dv<0)
  y=t
end

t is the clock-signal, v the velocity, dv the first derivation of the velocity and tv is the targetvelocity. The problem about this function is that there "y is not defined on some execution paths". do you have any ideas how to make this work?


Solution

  • simulink

    I solved the problem without a MATLAB function using the simulink blocks data store memory and its read & write blocks. The signal that is coming in from bottom right side is the momentary velocity. The if statement is

    (u1 >= 22.2) & (u1<=22.3) & (u2<0)
    

    Since simulink is using time steps and the momentary velocity will never be exactly 22.2, you can not use u1==22.2