Output setted from c-mex is sometime right, sometime null

Hi all! I stop my simulation with Stop block, setting from C-mex file the respective output to 1 when a condition is verified. If this condition is valid, before to stop, I set a few values in a second output vector that I want to read externally in a M-file. I don't know why, but some times it give me in output the right values, other times it give me a null output! This problem has to do with the ode solver I use (ode45)?
Thanks in advance!

 採用された回答

Kaustubha Govind
Kaustubha Govind 2012 年 8 月 9 日

0 投票

More likely that there is something wrong with the way your S-function is written. Could you post your mdlOutputs implementation?

8 件のコメント

Marcus
Marcus 2012 年 8 月 9 日
編集済み: Marcus 2012 年 8 月 9 日
It's very long and intricate to copy here. By the way I'm sure that it's right because: 1) sometimes goes well and sometimes not; 2) before stop the simulation I print the output values from c file (correct) but when I read them from M file they are null.
Kaustubha Govind
Kaustubha Govind 2012 年 8 月 9 日
Then, perhaps you could show us how you are assigning the output to the S-function output signal?
Marcus
Marcus 2012 年 8 月 9 日
編集済み: Marcus 2012 年 8 月 9 日
real_T *y1 = ssGetOutputPortRealSignal(S,1);
real_T *ystop = ssGetOutputPortRealSignal(S,2);
...
if (<condition>) { //if condition is true
y1[1] = <value1>; //set some values in the y1 output
y1[2] = <value2>;
...
ssPrintf("%f\n", y1[1]); //print on the console value1
ystop[0] = 1; //stop the simulation
}
It's right? Value1 is printed correctly on the console, but the respective output y1 (read in Matlab workspace) is all null.
Kaustubha Govind
Kaustubha Govind 2012 年 8 月 10 日
Just to clarify - the ss* API uses zero-based indexing, so "y1" is writing to the second output port, and "ystop" is writing to the third output port - is this intended?
If it is, could you verify that ssGetOutputPortDataType(S,1) and ssGetOutputPortDataType(S,2) both return 0? This will ensure that both outputs are indeed expecting double values.
Marcus
Marcus 2012 年 8 月 10 日
I have another output port, so the number of that is correct. I tried also ssGetOutputDataType and it returns 0, so I think this is not the problem.
Kaustubha Govind
Kaustubha Govind 2012 年 8 月 10 日
Also, not sure if it was a typo, but you should have:
y1[0] = <value1>; //set some values in the y1 output
y1[1] = <value2>;
...
(Zero-based indexing)
Marcus
Marcus 2012 年 8 月 11 日
編集済み: Marcus 2012 年 8 月 11 日
Indexing is not the problem (yes is a typo). I don't know what to think :/
Kaustubha Govind
Kaustubha Govind 2012 年 8 月 13 日
Strange. I'm out of ideas - perhaps you should send your S-function to MathWorks Tech Support so they can investigate it more closely?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeGeneral Applications についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by