Simulink error: The data abscissae must be distinct and strictly monotonic.

26 Ansichten (letzte 30 Tage)
Hi all,
I have constructed a simulink model, where within the model I have a MATLAB function block as you can see. Within that block, a very simple code loads data from a .mat file and interpolates using interp1.
However I get the following error when I run the model which I have managed to trace to the line in the MATLAB function block where the interpolation occurs:
An error occurred while running the simulation and the simulation was terminated
Caused by:
  • The data abscissae must be distinct and strictly monotonic.
Component:Simulink | Category:Block error
This is simple enough, as one would assume that my x vector in the interp1 function includes non-monotonic data. But the problem is that it doesn't! I have tested that by running the code in the MATLAB function block by itself as a normal matlab file, and also used unique to tripple check and it works perfectly. I also checked where the current folder to ensure that the file is taken from the right place. So I really do not know why the interp1 function presents this problem when I am running it in Simulink. It must be something that I don't understand.
Any suggestions?
Kind Regards,
KMT.
P.S. Attached you can find the files that I am using. Just download and run if you need to.

Akzeptierte Antwort

Daniel M
Daniel M am 17 Okt. 2019
Bearbeitet: Daniel M am 17 Okt. 2019
None of the variables in the matfile are monotonic.
all(sign(diff(Tga))==1) % ans = 0
all(sign(diff(Tm1))==1) % ans = 0
all(sign(diff(Tm2))==1) % ans = 0
all(sign(diff(thx))==1) % ans = 0
x = -10:10;
all(sign(diff(x))==1) % ans = 1
Perhaps try unwrap, as the values of thx seem to be between -pi and pi.
  5 Kommentare
Daniel M
Daniel M am 17 Okt. 2019
I have solved it. If you unwrap thx such that it become monotonic, now there is a duplicate! It occurs because thx has entries for 3.1416 and -3.1416 (and unwrapped they become the same). So I removed the second entry.
Add this code to your matlab function after you load the data:
thx(201) = [];
Tga(201) = [];
thx = unwrap(thx);
And this function shouldn't have any more problems. And the simulink program generates an error further along the simulation (hey... it's still progress!).
KostasK
KostasK am 17 Okt. 2019
Bearbeitet: KostasK am 17 Okt. 2019
Ok, I understand. Thanks very much for your help!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Get Started with Simulink finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by