Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab代码没有看到Simulink模型中函数内部定义的变量_Matlab_Function_Variables_Simulink - Fatal编程技术网

Matlab代码没有看到Simulink模型中函数内部定义的变量

Matlab代码没有看到Simulink模型中函数内部定义的变量,matlab,function,variables,simulink,Matlab,Function,Variables,Simulink,关于模拟Simulink模型的Matlab代码,我有一个问题。例如,我的系统现在包括几个不同的子系统/代码: 主脚本–设置模拟Simulink模型的初始条件,并保存和绘制一些输出(主代码) 模拟我的系统运行的Simulink模型 作为Simulink模型中的功能块的子脚本。在这种情况下,此块导出模拟期间模型中使用的一些值(子代码) 现在,我正试图在Simulink中的一个子系统中引入一个附加块。简单来说,它是一个常量块,变量名为“V”。我在子代码中指定一个初始值V。但是,当我运行将执行模型的主代

关于模拟Simulink模型的Matlab代码,我有一个问题。例如,我的系统现在包括几个不同的子系统/代码:

  • 主脚本–设置模拟Simulink模型的初始条件,并保存和绘制一些输出(主代码)
  • 模拟我的系统运行的Simulink模型
  • 作为Simulink模型中的功能块的子脚本。在这种情况下,此块导出模拟期间模型中使用的一些值(子代码) 现在,我正试图在Simulink中的一个子系统中引入一个附加块。简单来说,它是一个常量块,变量名为“V”。我在子代码中指定一个初始值V。但是,当我运行将执行模型的主代码时(内部有一个常量块V),它会给我一个错误,因为V没有定义。如果我在主代码中初始化V,它将具有声明的值,而不管在子代码中使用V进行任何操作


    希望我或多或少地描述了这个问题,因为我不能在这里发布模型。先谢谢你。

    好的,在你澄清之后,让我在这里尝试一下答案

    首先,要初始化数据: 当我在Simulink上上课时,他们告诉我们通过回调初始化。具体地说,您有一个块,可能以某种方式突出显示,您可以通过右键单击访问Callsback。在那里可以找到InitFcn,在那里键入一些常量,或者在同一文件夹中键入脚本的名称。 然后,当您运行模型时,将对其进行初始化,调用回调函数,并在模型工作区中定义变量

    顺便说一下,您可以在模型资源管理器中检查模型(和函数)工作区,通过库旁边的按钮访问

    现在通过函数进行更新。我还不确定你到底是怎么做的。除非您已经在这样做了,否则我建议使用
    Matlab函数
    块,即带有Matlab图标的块,它更灵活、更强大

    不管怎样,我怀疑以下情况。与普通的matlab一样,函数中定义或更改的变量不会离开其工作空间,这与一般模型工作空间是分开的。只有显式输出在函数调用结束后仍然有效

    我在这里看到了一些选择。第一种方法是将变量定义为全局变量。为此,您需要在您想要的每个上下文中将其定义为全局的。因此,在主脚本和函数(子脚本)中都需要一个
    global x


    或者,如果希望将变化的变量视为信号,则可以向函数和数据存储块或From/GoTo块添加额外的in和output,具体取决于所做的操作

    好的,在你澄清之后,让我在这里尝试一下答案

    首先,要初始化数据: 当我在Simulink上上课时,他们告诉我们通过回调初始化。具体地说,您有一个块,可能以某种方式突出显示,您可以通过右键单击访问Callsback。在那里可以找到InitFcn,在那里键入一些常量,或者在同一文件夹中键入脚本的名称。 然后,当您运行模型时,将对其进行初始化,调用回调函数,并在模型工作区中定义变量

    顺便说一下,您可以在模型资源管理器中检查模型(和函数)工作区,通过库旁边的按钮访问

    现在通过函数进行更新。我还不确定你到底是怎么做的。除非您已经在这样做了,否则我建议使用
    Matlab函数
    块,即带有Matlab图标的块,它更灵活、更强大

    不管怎样,我怀疑以下情况。与普通的matlab一样,函数中定义或更改的变量不会离开其工作空间,这与一般模型工作空间是分开的。只有显式输出在函数调用结束后仍然有效

    我在这里看到了一些选择。第一种方法是将变量定义为全局变量。为此,您需要在您想要的每个上下文中将其定义为全局的。因此,在主脚本和函数(子脚本)中都需要一个
    global x


    或者,如果希望将变化的变量视为信号,则可以向函数和数据存储块或From/GoTo块添加额外的in和output,具体取决于所做的操作

    这不是一个好的解决方案,所以我不会给出答案,但您是否尝试将其声明为全局变量?我不确定Simulink变量的作用域,我只记得,将变量推送到主工作区和从主工作区推出来是一件痛苦的事。嗨,我现在已经仔细检查了。在Simulink中声明为带有数据内存存储块的全局变量,但结果相同。一旦我从主代码中删除变量,模型就不会被编译。simulink模型要求在初始化期间所有数据都可用。名义上,在初始化使用V的常量块之前,需要初始化“子脚本”(对它来说这是一个非常糟糕的名称)(因此在工作区中创建变量V)。但是,更基本的是,您根本不应该使用工作区来完成这项工作,当然也不应该基于在另一个块中执行的代码初始化一个块。但是,如果不确切知道使用此配置您真正想要实现什么,就不可能告诉您应该如何实现。在现实生活中,子脚本称为MechacDerivation。它提供了有用的信息吗?别这么想。这就是为什么在本网站上不使用真名是常识,但同时提供简短且描述性的smth。主要的一点是,当V通过主脚本初始化时,它不会更改其值,即使