具有多个实例的 s-function 的 Matab tlc 代码

Matab tlc code for s-functions having multiple instances

我需要在我的 simulink 模型中内联一个具有多个实例的 S-Function。在 S-Function 中,我需要加载一个 dll 文件,但它应该只在一个 S-Function 实例中完成。我写的 tlc 如下: ..... %函数开始(块,系统)输出

dll_handle = LoadLibraryA("mydll"); dll_setup=(DLL_SETUP)GetProcAddress(dll_handle,"setup"); .....

代码生成后,这些启动函数行已添加到每个 s-function 实例的源代码中。但是,我需要加载一次 dll。是否可以只为 s-function 的第一个实例添加这些行?

注意:我知道在 TLC 文档中它声明当模型中有多个 s-function 实例时避免内联。

这是一些模糊的记忆,但我认为你可以使用一个全局的,比如:

%assign ::DLL_LOADED = 0

%function Start()

%if :: DLL_LOADED == 0
    %% load DLL here
    %assign ::DLL_LOADED = 1
%endif

我认为类似的东西会起作用。

最简单的做法是将这些行放在外部文件中,并使用静态变量来跟踪一次性初始化。然后从 Start 函数添加对该函数的调用。如果您想从 tlc 生成该外部文件,请查看 BlockTypeSetup TLC 函数和 LibAddToModelSources 以将源文件添加到生成的代码中。