2013-03-16 44 views
0

我需要一个matlab simulink块,它涉及一些简单的数学计算。作为第一步,我做了一个块,它从一个常量块获取输入并在输出端口中生成它。直接从MATLAB examples.It代码为级别C-2 sfunction 这里是mdlouputs功能Matlab simulink c sfunction DirectFeedThrough显示意外的结果

static void mdlOutputs(SimStruct *S, int_T tid) 
{ 
    int_T element; 
    int_T portWidth = ssGetInputPortWidth(S,0); 
    InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0); 
    real_T *y = ssGetOutputPortSignal(S,0); 

    for (element=0; element<portWidth; element++) { 
     y[element] = *uPtrs[element]; 
    } 


} 

但我从块

这里越来越怪异。OUPUTS的结果 我期待的输出等于输入

when const block(input) is 1 output is 1.875 
          2   2 
          3   2.125 
          10   2.563 etc. 

我想不通的问题

+0

什么是您的输入数据类型?对于此代码,按预期工作应该是双精度。 – Navan 2013-03-18 16:43:54

+0

是的,它是双倍的... – feminkk 2013-03-18 17:15:43

+0

我看不出任何mdlOutputs错误。下一步是使用调试器或此函数内的简单打印语句来调试,以查看您是否正确接收输入。 – Navan 2013-03-18 17:21:09

回答

0

确保您有ssSetInputPortDirectFeedThrough在mdlInitializeSizes正确设置。你的情况看来,它应该是

ssSetInputPortDirectFeedThrough(S, 0, 1)

否则uPtrs是给你的胡言乱语。

Phil。

+0

谢谢你的答复。我已经设置了directfeed.any.any其他可能性? – feminkk 2013-03-17 05:04:48

+0

你显示的代码看起来很好。所以我们需要了解更多信息,看看还有哪些事情正在进行。正如其他人指出的那样,可以在这里输入一些打印语句来检查输入值,或者将代码挂接到调试器并逐步完成。 – 2013-03-19 04:11:05

+0

感谢您的建议。我已经打印输入到文件..它显示了以前的结果。所以这是一个输入问题。然后我换了一个正弦块的恒定块..我得到一个振荡信号但不是预期的正弦波.. – feminkk 2013-03-19 07:16:25