【问题标题】:s-function as a bus selectors 功能作为总线选择器
【发布时间】:2015-03-02 14:14:41
【问题描述】:

我需要了解如何使 s-function 充当总线选择器。我有一个结构作为 s-function 的输入。这个结构有 283 个元素(将来可能更多)并且作为总线提供。我希望 s-function 输出结构的各个元素(因此就像一个总线选择器)。当然,我可以通过手动输入轻松做到这一点:

y0[0]=u0->arguemtn;
y0[0]=u0->speedx; % and so on till 283

但是我需要知道所有结构元素的名称,并且还需要手动输入它们。有没有一种方法我只需要使用一个简单的 for 循环并将单个元素输入分配给 s 函数的输出。

你可以给我提示,因为我只是卡在这里

更新

在建议的答案之后,我尝试写这样的东西。

int number_of_elements,i;
char field_name;
number_of_elements= mxGetNumberOfFields(u0[0]);

for(i=0;i<number_of_elements;i++)
{
    field_name=mxGetFieldNameByNumber(u0[0], i);
    yi[0]=u0->field_name;
}

但首先我怎样才能使 y1 y2 y3 等成为循环的一部分。当然我不能写 yi,因为它是一个完全不同的变量。这部分也是我在 s-function builder 的代码描述部分中写的,我认为这又是错误的。任何人都可以建议我应该做什么。

另一个重要的一点是,我发送的结构包含不同数据类型的字段(如 uint8、uint16、single),因此我还需要确定输入数据类型。这怎么可能?如何在循环中将此数据类型设置为我的输出?

【问题讨论】:

    标签: matlab structure simulink s-function


    【解决方案1】:

    看起来您正在使用 C 代码 S-Function,在这种情况下,所有 C-mex API 例程都可用。

    有多种功能可用于查询结构、确定字段名称和操作它们。请参阅here 获取它们的链接,包括mxGetFieldmxGetNumberOfFields。首先查看并完成讨论过的示例here

    【讨论】:

    • 我对此有疑问。因为我不知道我的结构中的字段数量,因此我不知道我的 s-function 构建器块中的输出数量,我怎样才能使这个动态?
    • 在 S-Function 初始化中,您使用适当的 API 函数来询问结构(作为参数输入)以确定字段数,然后使用其他适当的 API 函数来设置输出数(和其他属性)。
    • 嘿,我更新了我的问题。当我浏览 s-function 文档时,我发现了这一点。 s-function 的限制是它不支持总线信号de.mathworks.com/help/simulink/sfg/s-function-limitations.html 所以知道如何解决这个问题吗?
    • 你在这里所做的,你应该使用手写的 c-mex S-function,它确实支持总线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多