当前位置: 首页 > 工具软件 > adevs > 使用案例 >

ADEVS快速入门之一

白阳煦
2023-12-01

ADEVS是一个C++库,用于构建离散事件和混合离散事件的仿真应用。

1. ADEVS简介

ADEVS是一个C++库,用于构建离散事件和混合离散事件的仿真应用。ADEVS基于离散事件系统规范(DEVS)和动态DEVS建模形式化思想,支持并行离散事件仿真和OpenModelica的运行时系统。除了DEVS的基本模型和网络并行模型之外,ADEVS还支持基于动态DEVS形式化思想的动态结构模型。对于还不熟悉DEVS的人来说,有几个很好的参考文章(参见 www.acims.arizona.edu 网站,上有大量教程、研究论文和DEVS形式化思想的替代实现)。

ADEVS库由Jim Nutaro(nutarojj@ornl.gov, 美国亚利桑那大学)开发和管理。该库目前托管在 sourceforge上,详细请参考网址  https://sourceforge.net/projects/adevs/

关于ADEVS的使用参考资料请参考网址 Adevs user manual and API documentation

2. ADEVS库的构建和安装

ADEVS 包组织成以下目录结构:

adevs-x.y.z
         +->docs
         +->examples
         +->include
         +->src
         +->test
         +->util

ADEVS 仿真引擎几乎完全由模板类组成,这些模板类位于 include 目录中。例外情况是随机数生成器、Java 语言绑定和并行仿真引擎等功能。如果不需要使用这些功能,那么在程序中包含adevs.h,并确保编译器可以找到adevs.h文件所在的包含目录就足够了。

如果需要使用随机数生成器或并行仿真引擎,则必须先构建 ADEVS 静态库。构建方法如下:

1.对于Linux系统用户,进入src 目录,执行命令 'make' 或 “build”。执行成功后,会根据makefile创建一个名为 libadevs.a 的静态库。在Linux 系统上,要确保拥有最新版本的 GNU C++编译器和 GNU make工具。

2.对于Windows系统用户,进入src 目录,执行批处理命令“build.bat”。执行成功后,会创建一个名为adevs.lib的静态库。在 Windows 系统上,必须从C++命令提示符执行批处理文件。这样做可确保批处理文件找到编译器、链接器和必要的系统头文件。

为了适应操作系统环境,可能需要编辑makefile文件,设置和修改编译器标志等,但默认值在大多数情况下应该有效。

如果要构建Java语言绑定,需要具有Oracle JDK或与之兼容的工具套件(例如OpenJDK)。在 Windows 系统上,进入src\ADEVS_jni 目录,然后执行命令“build.bat”。执行成功后将会生成三个文件:adevs.jar、java_adevs.dll 和 java_adevs.lib。在构建和运行Java程序时,需要将adevs.jar放入classpath变量中,java_adevs.dll放入java.library.path中(或确保它位于常规PATH中以查找可执行文件和动态链接库)。

在 Linux 系统上,留在 src 目录中并执行命令“make java_ADEVS”。这将创建两个文件:adevs.jar 和 libjava_adevs.so。和以前一样,需要把adevs.jar放到环境变量classpath中,把libjava_adevs.so放到java.library.path中,或者确保它在LD_LIBRARY_PATH中,用于定位动态链接库。

ADEVS 包括一些对导入仿真模型的支持,这些模型支持模型交换标准的功能模型接口FMI(使用大多数基于 Modelica 的工具构建的模型都支持此标准)。如果想尝试这个功能,可以获取并构建OpenModelica编译器。为此,在 util 目录中提供了 shell 脚本 build-omc.sh。这个 shell 脚本执行以下操作:

  • 1) 在运行脚本的位置创建目录 openmodelica,
  • 2) 获取编译 OpenModelica 编译器所需的最小包集,
  • 3) 获取并构建一个基本的 OpenModelica 编译器。编译器称为omc,它位于目录openmodelica/trunk/build/bin中。

此外还需要从https://www.fmi-standard.org/downloads获取 FMI 头文件,并在程序文件中包含 ADEVS_fmi.h。

如果要运行测试套件,必须构建静态库文件并安装 Tcl(测试脚本需要 Tcl 才能运行;如果可以运行 'tclsh',那么已经有了 Tcl 的工作副本)。如果要测试 Java 绑定,则需要构建它们。测试FMI支持需要OpenModelica编译器。

可以执行四组测试:一组用于串行仿真引擎,一组用于并行仿真引擎,一组用于 Java 语言绑定,一组用于 FMI 支持。

  1. 运行串行仿真引擎的测试,请使用“make check_cpp”。
  2. 运行并行仿真引擎的测试,请使用“make check_par”(注意:环境变量OMP_NUM_THREADS必须至少设置为4个)。
  3. 运行 Java 测试用例,请使用“make java_test”。
  4. 运行 FMI 测试用例,请将 omc 编译器放入 PATH 并运行“make check_fmi”。
  5. 运行所有测试用例,请使用“make”。

当任何测试失败时,测试脚本将中止。如果测试脚本运行完成,则所有测试都通过。

在Windows上运行测试用例可能有点麻烦。需要根据平台情况修改make.common文件中的编译器设置、可执行指令等。对于使用GNU工具的Linux系统,测试用例应该是开箱即用的。其他情况下也是通过编辑make.common的相关内容以适应开发环境。

声明:本文中部分内容参考了ADEVS使用手册英文版,如涉及版权问题将及时纠正。另外,后续将继续结合实例进行详细介绍,期待交流指正。

 

 类似资料: