0

我知道这之前已经发布过,但没有一个答案对我有用。

我正在使用 VISSIM v10 并制作了一个 DLL 文件来制作外部驱动程序模型。这运作良好。但我想要的是在 MATLAB 中实现算法并让 DLL 文件将数据发送到 Matlab,然后 Matlab 计算更新值并将它们发送回 DLL。然后 DLL 将该值发送回 VISSIM。

因此,连同 VISSIM 提供的用于创建 DLL 文件的 .vcproj、.h 和 .cpp 文件(我使用 Microsoft Visual Studio 19),我在同一个项目文件中添加了 engine.h 文件,以便能够使用引擎例程,但它为 engOpen 和 engEvalString 提供了“未解析的外部符号”错误。我在一个新的 .cpp 文件中尝试了同样的事情,它可以工作,但我怎样才能将它链接到 VISSIM ..

我已经添加了所有库,并将属性和配置类型中的目录包含为 .dll。

Tettamanti 和 Varga (2012) 提到这是能够做到这一点的方法。但它现在不适合我。帮助 ?

4

1 回答 1

0

要从您的 Vissim 外部驱动程序模块 Dll 内部调用 MATLAB 算法,您有以下选项:

  1. 使用适用于 C/C++ 的 MATLAB Compiler SDK - 此 SDK 可以帮助将 MATLAB 算法包装到一个单独的免版税 DLL 中,您可以将其与 Vissim 外部驱动程序模块 DLL 链接。
    • 这将为您提供计算效率最高且开销最小的与 MATLAB 运行时的互操作性。
    • 必须熟练掌握 C/C++,因为您必须自己弄清楚很多事情;
    • 您需要一个 MATLAB 附加许可证才能使用此功能;
    • 您可以将您的 MATLAB DLL 免版税(连同 MATLAB 运行时库)分发给没有 MATLAB 许可证的第三方;
  2. 将 MATLAB直接用作Vissim 外部驱动程序模块 DLL中的 COM 自动化服务器- 您只需自己将 MATLAB 作为进程外 COM 自动化服务器进行管理,并仔细进行内务管理;
    • 这不需要 MATLAB 附加许可;
    • 它需要与 Vissim 安装在同一台计算机上的本地许可 MATLAB;
    • 你也需要自己弄清楚很多事情。
  3. 在 C/C++ 中使用MATLAB External Engine API ,它本质上是 MATLAB 外进程 COM 对象的复杂包装,但具有现代 C++ 风格;
    • 这为您省去了自己管理 MATLAB COM 对象的麻烦,但它再次要求您掌握现代 C++(即 C++11/C++14/C++17)功能。
    • 不需要额外的 MATLAB 附加许可;
    • 它需要与 Vissim 安装在同一台计算机上的本地许可 MATLAB。

我认为目前还没有一种将 Vissim 外部驱动程序模块 DLL 与 MATLAB 直接集成的简单直接的方法。所有这些都需要非琐碎的 C++ 和 COM 知识和技能。

如果您擅长现代 C++,我建议您使用选项 1 - 它提供最佳性能。

于 2019-11-30T15:11:51.070 回答