# 新手入门


半物理仿真接口工具(Hardware-in-the-Loop Export,简称 HIL Export),可以快速、高效地将 Modelica 物理模型转换为适用于实时环境的可执行代码(高效 C 代码或联合仿真代码)。本文介绍了使用 HIL Export 工具箱,将速度跟随物理模型转换为 C 代码并编译运行的方法。

# 分析模型

速度跟随模型内置于 Sysplorer 的车辆动力学模型库中,基于车辆动力学原理和控制理论,使车辆能够按照预定的速度跟随给定的参考速度。该模型通常应用于自动驾驶系统、巡航控制和交通流控制等。模型如下图所示:

速度跟随模型通常包括两个主要部分:速度控制器车辆动力学模型。速度控制器根据参考速度和当前车辆速度之间的差异,计算出控制指令,如油门开度或制动力。车辆动力学模型根据控制指令和车辆动力学参数,模拟车辆的加速度和速度变化。速度跟随模型的设计同时考虑了车辆的动力学特性、惯性、摩擦力等因素,以实现平稳、精确的速度控制。速度跟随模型通过不断调整控制指令,能够使车辆逐渐接近并跟随参考速度,以保证车辆的稳定性和安全性。

通过本文,您将学习:

  • 使用 HIL Export 工具箱生成速度跟随模型的 C 代码;

  • 生成的代码文件的具体含义;

  • 如何自动生成并使用 C 代码的主函数;

  • 比较模型仿真结果和生成的 C 代码结果,以了解数值等效性。

# 环境配置

  • Windows 使用环境:

    名称 详细说明
    处理器 Intel(R) Core(TM) i7-8550U CPU @ 1.80 GHz 2.00 GHz
    内存 8 G
    硬盘 240 GB + 500 GB
    操作系统 Windows 11 家庭中文版
    用途 使用 HIL Export 工具箱生成源代码
  • Ubuntu 运行环境:

    名称 详细说明
    处理器 Intel Xeon(R) Silver 4210R CPU @ 2.40 GHz x 40
    内存 62.5 GiB
    硬盘 3.0 TB
    操作系统 Ubuntu 20.04.6 LTS
    用途 源代码编译运行平台

# 使用前准备

  1. 加载模型库

    加载模型库 TADynamics1.2.5。

  2. 打开模型

    单击

    ,加载模型。

    注意

    ARM 系统暂不支持打开 ConstantSpeed_Test 示例模型。

  3. 打开半物理仿真接口工具

    在 Sysplorer 顶部菜单栏,进入工具 > 半物理仿真接口工具,打开 HIL Export 工具箱。

    提示

    1. 使用本工具箱需要先获取同元 License。

    2. 如下提示不影响新手入门的正常操作,请单击确定。如需获取内嵌编译器,可联系 Sysplorer 运维团队,详情参见如何操作

# 生成 main 函数

当前版本支持由程序自动生成主函数。用户无需手动创建或拷贝 main_src.c,只需在导出页面勾选 是否生成主函数,工具会随代码一并生成 main_src.c 文件。

自动生成的主函数主要完成以下工作:

  1. 配置仿真的开始时间、停止时间和通信步长;
  2. 创建仿真实例并完成初始化;
  3. 预留输入、参数设置和输出读取的位置;
  4. 通过循环按时间步长推进仿真;
  5. 在命令行输出仿真时间及结果信息。

如需进一步定制,可在生成完成后按需修改代码目录中的 main_src.c

# 设置参数

进入 HIL Export 工具箱,配置如下参数:

参数名 参数设置 说明
当前模型 ConstantSpeed_TEST 确认当前生成代码对应的模型
参数名 参数设置 说明
文件格式 勾选源代码(包含求解库) /
类型 定步长 /
算法 Euler 此处使用 Euler 算法
求解步长 0.001 仿真输出点之间的间隔长度
停止时间 inf 保持默认停止时间设置
参数名 参数设置 说明
目标系统 Linux 选择生成代码的目标部署系统
目标架构 x86 选择生成代码的目标系统架构
系统位数 64 bits 选择目标系统位数
参数名 参数设置 说明
Output 勾选 vehicle_speed 输出车辆的行驶速度
参数名 参数设置 说明
生成主函数 勾选是否生成主函数 自动生成 main_src.c
编译脚本 勾选是否生成目标平台编译脚本 生成 run_main.sh 脚本
保存路径 F:/ 自定义生成文件的保存路径

# 生成代码

  1. 参数配置完成后,单击生成。生成的代码文件会保存在自定义路径下,本例输出到 F:/Linux_x86_src/ConstantSpeed_TEST

  2. 单击输出窗口中的代码生成地址,可打开文件夹查看生成的代码文件。生成结果中已包含程序自动生成的 main_src.crun_main.shSimulator 目录和模型相关源文件:

# 部署代码

当您的系统或集成开发环境中不包含 Sysplorer 产品时,您可以将生成的代码部署至目标平台中,本示例将代码部署至 x86 Linux 平台。

# 编译代码

在目标平台编译代码,通过终端输入 ./run_main.sh . 执行编译脚本。编译完成后会生成 main.outfmu.o 以及各源文件对应的 .o 文件。

提示

若编译代码时提示无权限,请先为脚本添加相应执行权限后再进行编译。

# 运行代码

输入 ./main.out 命令查看运行结果。运行过程中,终端会打印当前时间和输出值,仿真结束后显示 Simulation finished

# 对比结果

对比实时代码结果和 Sysplorer 仿真结果,以验证生成实时代码的正确性。

# 获取实时代码仿真结果

接下来使用测试框架模型和 Sysplorer 仿真来比较模型仿真和生成代码的结果。

运行实时代码后,仿真结果打印如下图所示:

# 获取 Sysplorer 的模型仿真结果

  1. 打开 Sysplorer,进入主页 > 仿真设置,设置步长终止时间算法的值为 HIL Export 工具箱配置的值,单击确定,如下所示:

  2. 单击仿真,仿真结束后,在结果查看器左侧的仿真浏览器中单击 vehicle_speed,查看生成的速度曲线;

  3. 如需查看某一时刻的速度,进入图表>曲线游标,左右移动曲线游标,在曲线窗口左上角查看某一时候的速度。