【发布时间】:2014-08-21 20:08:22
【问题描述】:
我的 CMEX S-Function 有一个输入端口,我将其设置为没有直接馈通。但是,当我尝试在 mdlUpdate 函数调用中使用来自输入端口的信号时,它会因分段违规而崩溃,并通知我最可能的原因是输入端口的直接馈通状态设置不正确。
在 mdlUpdate 中使用输入信号是否也算作直接馈通?
【问题讨论】:
-
不,它没有。 mdlUpdate用于更新离散状态,一般可能是输入的函数,与输出是否为输入的函数无关。
-
谢谢@PhilGoddard。这是否意味着我应该也可以使用 mdlUpdate 来更新 PWork 向量值?这就是我想要做的,但得到了错误。如果有帮助,我可以同时发布代码和错误。
-
是的,PWork 向量可以在 mdlUpdate 中更新。
-
菲尔,也许我应该更清楚一些。我使用一个输入信号,我设置为没有直接馈通,并将其值分配给 mdlUpdate 中的 PWork 向量。这会导致分段冲突。不过,按照你说的,我应该可以做到吧?澄清一下,我的模型中既没有连续状态,也没有离散状态;只是输入和输出。
-
在字里行间阅读,我怀疑您随后会在 mdlOutputs 中获取 PWork 向量的值,并尝试使用它来规避将您的块定义为具有直接馈通的方法。那是行不通的。您的块要么有直接馈通,要么没有。 mdlOutput 在您将任何内容存储在工作向量中之前被调用。请参阅documented flow chart,了解 S-Function 如何与 Simulink Engine 交互。
标签: c++ matlab simulink s-function