emxdemo 仿真目标机使用指南

概述

emxdemo 是随 EmeyeStudio 一起发布的 Windows 仿真 XCP 从机目标机。它在没有真实硬件的情况下模拟一台电机控制器:内部运行一组模拟的电机信号(转速、三相电流、母线电压、温度等),并通过虚拟串口对外提供标准 XCP 通信接口。

借助 emxdemo,您可以在纯 PC 环境中完整体验 EmeyeStudio 的核心功能:

功能 体验内容
Scope 实时监控 观察转速、三相电流、母线电压等实时波形
Watch 窗口 实时查看与修改变量值
Recorder + 触发器 配置触发条件,捕获转速超限、故障置位等事件
数据分析 对录制数据运行 PMSM 磁链观测器算法
Power-on Recorder 体验上电预录波(目标机开机前自动记录启动瞬态)

本指南提供两条体验路径:

  • 方式一:从零创建工程(推荐) —— 走一遍完整的建工程流程,学习如何在真实项目中使用 EmeyeStudio;
  • 方式二:打开预置工作区(可选捷径) —— 直接打开随包发布的现成工作区,快速查看效果。

emxdemo 同时也是《emXCP 目标机库 集成说明及核心设计文档》的参考样例:其源码展示了如何在目标程序中集成 emXCP 从机库(初始化、内存分配、上电预录波配置),供二次开发参考。

工作原理简介

emxdemo 在 Windows 进程中模拟了真实 MCU 的关键要素:

  • 仿真 RAM:在固定地址 0x20000000(STM32 系列 RAM 典型基址)分配 64KB 内存,全部 demo 变量定位于其中,XCP 变量地址即真实物理地址;
  • 电机信号模型:转速按三角波规律在 0~3000rpm 之间循环变化(周期 20s),三相电流为随转速改变幅值的对称正弦波,母线电压含 100Hz 纹波,故障码每 60s 周期性置位一次(持续 500ms);
  • 通信接口:通过虚拟串口对与 EmeyeStudio 通信,XCP 协议与真实从机完全一致。

一、准备工作:安装虚拟串口对

emxdemo 与 EmeyeStudio 之间通过一对虚拟串口通信,需先安装 com0com(开源虚拟串口驱动):

  1. 下载并安装 com0com(安装过程如提示未签名驱动,选择允许安装);
  2. 安装完成后打开「Setup Command Prompt」或设备管理器,确认默认创建了串口对(通常为 COM10 ↔ COM11);
  3. 如果您的电脑已有占用 COM10/COM11 的设备,可用 com0com 的 change 命令将虚拟串口对改为其他空闲端口号(例如 COM13 ↔ COM14),并同步调整后文的启动参数与设备配置。

提示:在设备管理器 → 端口(COM 和 LPT)中可查看 com0com 创建的端口对名称。

二、启动 emxdemo

emxdemo.exe 位于发布包的 emxdemo-src\bin\ 目录。

基本用法(使用默认 COM10、115200):

emxdemo.exe

指定端口和波特率:

emxdemo.exe -p COM13 -b 115200
参数 说明 默认值
-p <port> XCP 通信串口(虚拟串口对的一端) COM10
-b <baud> 波特率 115200

启动成功后窗口显示:

=============================================
  EmeyeStudio Demo Target  (emxdemo)
=============================================
[emxdemo] Simulated RAM : 0x20000000 - 0x2000FFFF (64KB)
[emxdemo] Variables     : 0x20000000 - 0x20000033 (14 vars, see emxdemo.elf)
[emxdemo] Recorder buf  : 0x20001000 - 0x20008FFF (32KB)
[emxdemo] XCP transport : \\.\COM10 @ 115200 baud
[emxdemo] XCP slave initialized (irq period 1ms).
[emxdemo] Power-on pre-recording started (6 vars, max duration).

保持此窗口开启,emxdemo 开始以 1ms 周期更新模拟信号。按 Ctrl+C 或关闭窗口退出。

三、方式一:从零创建工程(推荐)

以下流程模拟真实目标机的调试过程,逐步创建工程并体验各特性。全部操作只需 emxdemo 在后台运行。

第 1 步:新建工作区

  1. 启动 EmeyeStudio,在欢迎对话框中点击「新建工作区」(或菜单「文件」→「新建工作区」);
  2. 选择保存位置(建议放在您的文档目录下,例如 MyDemo\),输入工作区名称(如 emx-demo);
  3. 点击「确定」,资源浏览器中将出现新工作区。

第 2 步:创建工程

  1. 菜单「文件」→「创建工程」;
  2. 输入工程名称(如 motor-demo),确定;
  3. 工程出现在工作区的工程列表中。

第 3 步:配置串口设备

  1. 在资源浏览器中展开「资源」→「硬件设备」,右键选择「添加设备」;
  2. 设备类型选择串口,配置参数:
    - 端口:选择虚拟串口对的另一端(emxdemo.exe 占用一端,如 COM10,这里选 COM11);
    - 波特率:115200;数据位 8;停止位 1;校验无;
  3. 命名设备(如 emxdemo-vcom)并保存。

端口选择口诀:emxdemo.exe 用一端,EmeyeStudio 设备用另一端。若 emxdemo 用了非默认端口(如 -p COM13),这里对应改成 COM14。

第 4 步:导入 ELF 并添加变量

emxdemo 的声明 ELF 文件位于安装目录 emxdemo\motor-demo\emxdemo.elf,其中包含全部 14 个 demo 变量的名称与地址。

  1. 在资源浏览器中右键「ELF资源」节点 →「添加」,选择上述 emxdemo.elf 文件;
  2. 等待解析完成(应显示 14 个变量);
  3. 右键 ELF 文件节点 →「查找全局变量」,输入 g_ 过滤;
  4. 全选 14 个变量,点击「添加到工程」;
  5. 变量出现在工程的「变量引用」→「ELF变量」下。

demo 变量一览

变量名 类型 单位 说明
g_motorSpeed float rpm 转速(0~3000 三角波,周期 20s)
g_phaseCurrentA/B/C float A 三相电流(对称正弦,幅值随转速变化)
g_busVoltage float V 母线电压(48V + 100Hz 纹波)
g_pwmDuty float % PWM 占空比
g_motorTemp float ℃ 电机温度(25~65℃ 慢漂移)
g_idRef / g_iqRef float A d/q 轴电流给定
g_udVoltage / g_uqVoltage float V d/q 轴电压
g_runCounter unsigned int - 运行计数器
g_faultCode unsigned short - 故障码(周期性演示置位)
g_ctrlMode unsigned char - 控制模式

第 5 步:Scope 实时监控

  1. 在工具栏将模式切换为 Scope;
  2. 选中要观测的变量(建议 g_motorSpeed、g_phaseCurrentA/B/C、g_busVoltage),右键「添加到图形分析」;
  3. 点击「连接」按钮,状态栏显示已连接后点击「开始」(F5);
  4. 波形视图将显示实时曲线:转速三角波每 20s 一个周期,三相正弦电流幅值随转速变化;
  5. 使用鼠标滚轮缩放、拖拽平移,用十字光标读取数值。

第 6 步:Watch 窗口

  1. 切换到 Watch 模式,添加 g_motorSpeed、g_faultCode、g_ctrlMode、g_runCounter;
  2. 采集运行时实时查看数值变化:转速爬升/回落、故障码周期性跳变、计数器递增;
  3. 双击变量可修改其值(demo 信号每周期重新计算,写入值会被信号模型覆盖,用于体验写入功能即可)。

第 7 步:Recorder 与触发器

  1. 切换到 Recorder 模式;
  2. 添加要录制的变量(如 g_motorSpeed、g_faultCode);
  3. 在触发器配置中新建触发条件:
    - 条件一:变量 g_motorSpeed,比较方式「大于」,阈值 1500 —— 转速越限触发;
    - 条件二:变量 g_faultCode,比较方式「大于」,阈值 0 —— 故障置位触发;
  4. 点击「开始」进入等待触发状态:转速三角波每 20s 越过一次 1500rpm,最多等待约 10 秒即可触发;
  5. 触发后查看录制的波形(预触发/后触发各 500ms),确认触发时刻前后数据完整;
  6. 录制数据可保存到工程 Data 目录,供离线分析。

第 8 步:磁链观测器数据分析

demo 的转速/电流/电压信号恰好构成一组 PMSM 运行数据,可直接作为磁链观测器的输入。

  1. 采集一段数据(Scope 实时数据或 Recorder 录制数据均可);
  2. 打开「算法」对话框,选择 PMSM 磁链观测器;
  3. 配置输入映射:
输入端口 绑定变量
id g_idRef
iq g_iqRef
omega_m g_motorSpeed
ud g_udVoltage
uq g_uqVoltage
  1. 配置参数:
参数 值 说明
K1 100 观测器增益 1
K2 100 观测器增益 2
Ld / Lq 0.001 d/q 轴电感 (H)
Rs 0.5 定子电阻 (Ω)
pole_pairs 4 极对数
psi_f 0.01 转子磁链 (Wb)
sample_time 5e-05 采样周期 (s)
  1. 运行算法,查看估算磁链波形。

磁链观测器的原理与详细操作见 PMSM 磁链观测器快速入门。

第 9 步:Power-on Recorder(上电预录波)

emxdemo 演示了从机端上电预录波功能:emxdemo 启动时即自动在后台记录 6 个变量(转速、三相电流、母线电压、电机温度),无需上位机参与。

体验流程:

  1. 启动(或重启)emxdemo.exe;
  2. 在 EmeyeStudio 中切换到 Power-on Recorder 模式,创建配置:
    - 启用「使用预录波数据」(usePreRec);
    - 记录时长 200ms、采样周期 500μs;
    - 添加 6 个变量:g_motorSpeed、g_phaseCurrentA/B/C、g_busVoltage、g_motorTemp;
  3. 连接后读取预录数据,查看目标机启动前后的变量曲线。

这是该功能相对传统 Recorder 的核心价值:真实目标机上,它能让您看到固件复位、电机上电瞬间(上位机尚未连接时)的电气瞬态。

四、方式二:打开预置工作区(可选捷径)

如果希望跳过建工程步骤直接查看效果,可打开随包发布的现成工作区:

  1. 菜单「文件」→「打开工作区」,选择安装目录下的 emxdemo\emxdemo.workspace;
  2. 预置内容包括:
    - 设备 emxdemo-vcom(串口 COM11);
    - 工程 motor-demo,已从声明 ELF 导入全部 14 个变量;
    - 已配置的 Scope / Recorder / Power-on Recorder 实例;
    - 已配置的 PMSM 磁链观测器(输入映射与参数齐备,直接运行即可);
  3. 若您的虚拟串口对不是 COM10 ↔ COM11,请在「连接设置」中修改设备端口,并以对应参数重启 emxdemo.exe;
  4. 连接后即可按「方式一」中第 5~9 步的相同方式体验各功能。

预置工作区仅作为快速体验入口;正式使用建议按「方式一」自行创建工程,熟悉完整流程。

五、目录与文件说明

发布包中与 emxdemo 相关的内容:

EmeyeStudio.exe 所在目录/
├── emxdemo/                     # 预置 demo 工作区(方式二可选打开)
│   ├── emxdemo.workspace        # 工作区文件
│   └── motor-demo/
│       ├── motor-demo.project   # 工程配置(变量/采集/算法配置)
│       └── emxdemo.elf          # 声明 ELF(方式一建工程时也从这里引用)
└── emxdemo-src/                 # demo 源码包(供参考与重编译)
    ├── src/                     # 仿真器源码(main.c/signals.c/target_defs.h)
    ├── arm/                     # 声明 ELF 工程(ARM GCC 编译)
    ├── CMakeLists.txt           # CMake 构建配置
    ├── build.bat                # 一键构建脚本(debug/release/clean)
    ├── bin/
    │   └── emxdemo.exe          # 预编译可执行文件(可直接使用)
    └── sdk/                     # emXcp 从机库开发包(静态库 + 头文件)

六、从源码重编译

emxdemo-src 包含完整源码与 emXcp 开发包,可自行重编译(需安装 CMake、Ninja 及 MinGW-w64 工具链,且为 32 位 MinGW 以匹配 emXcp 静态库):

cd emxdemo-src
build.bat            # 默认 Debug 构建
build.bat release    # Release 构建(自动去除符号表)

构建产物:

  • build\bin\emxdemo.exe — 仿真器;
  • build\elf\emxdemo.elf — 声明 ELF(需安装 ARM GCC,未安装时自动跳过,可继续使用包内预置的 emxdemo.elf)。

关于 emXcp 从机库的完整集成方法(内存分配、初始化、上电预录波接口等),参见《emXCP 目标机库 集成说明及核心设计文档》及 emxdemo-src 源码中的注释说明。

常见问题

Q: emxdemo 启动正常,但 EmeyeStudio 连接不上?

A: 依次检查:
- com0com 是否已安装并创建串口对(设备管理器 → 端口);
- emxdemo.exe 使用的端口与工作区设备端口是否为同一对虚拟串口的两端;
- 波特率是否一致(默认 115200);
- 虚拟串口对是否被其他程序占用。

Q: com0com 安装失败或驱动签名警告?

A: com0com 为开源驱动,在部分 Windows 版本上安装时需要允许未签名驱动(测试模式下安装或使用新版签名安装包)。也可改用其他虚拟串口软件(只要能创建成对的互联 COM 端口即可)。

Q: 我的电脑没有 COM10/COM11(被占用或编号不够)?

A: 用 com0com 将虚拟串口对改为其他空闲端口(如 COM13↔COM14),emxdemo.exe 用 -p COM13 启动,EmeyeStudio 设备端口改为 COM14。

Q: 自建工程看不到变量或地址解析失败?

A: 确认引用的 ELF 是安装目录 emxdemo\motor-demo\emxdemo.elf(与 emxdemo.exe 版本匹配);添加变量后执行「解析所有地址」;demo 变量从 0x20000000 起固定布局。

Q: 波形是一条直线?

A: 等待信号变化(转速三角波周期 20s,温度漂移周期 5 分钟);或检查 Y 轴范围(右键 →「适应窗口」)。

Q: Recorder 无法触发?

A: 确认触发条件已创建并绑定(变量、比较方式、阈值),且已点击「开始」进入等待触发状态;转速条件阈值不超过 3000 才会在三角波周期内触发。

相关文档