【问题标题】:Matlab simulink c sfunction for DirectFeedThrough showing unexpected results用于 Direct FeedThrough 的 Matlab simulink c 函数显示意外结果
【发布时间】:2013-03-17 12:56:26
【问题描述】:

我需要一个涉及一些简单数学计算的 matlab simulink 块。作为第一步,我制作了一个块,它从常量块中获取输入并在输出端口中生成它。我直接从 matlab 示例中获取代码。它是二级c函数 这是 mdlouputs 函数

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];
    }


}

但是我从块中得到了奇怪的输出

这是结果 我期望输出等于输入

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

我无法解决问题

【问题讨论】:

  • 您的输入数据类型是什么?此代码应该是双精度才能按预期工作。
  • 我看不出 mdlOutputs 有什么问题。下一步是使用调试器或此函数中的简单打印语句对其进行调试,以查看您是否正确接收输入。

标签: c matlab simulink


【解决方案1】:

确保您在 mdlInitializeSizes 中正确设置了 ssSetInputPortDirectFeedThrough。在你的情况下,它似乎应该是

ssSetInputPortDirectFeedThrough(S, 0, 1)

否则 uPtrs 会给你胡言乱语。

菲尔。

【讨论】:

  • 感谢回复。我已经设置了directfeedthrough。还有其他可能吗?
  • 您显示的代码看起来不错。所以我们需要看到更多,看看还有什么。正如其他人所指出的那样,要么在此处放置一些打印语句以检查输入值,要么将代码连接到调试器并单步执行。
  • 感谢您的建议。我已将输入打印到文件中..它显示了以前的结果。所以这是输入的问题。然后我用正弦块交换了常量块..I我得到一个振荡信号,但不是预期的正弦波..
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
相关资源
最近更新 更多