2026a

# 编译仿真类


对模型实现底层检查模型文本、编译模型操作。

# CheckModel

检查模型

# 语法

/**
* @brief  检查模型
* @param  [in]model_name 模型名
* @return 模型检查结果
*/
bool MwMoHandler::CheckModel(const std::string& model_name);

# 说明

检查模型文本是否存在错误,与 Sysplorer 上的仿真>检查按钮一致。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
checkSuccess = ClassMgrPtr->GetMoHandler()->CheckModel(modelName.toStdString());

# CompileModel

编译模型,生成求解器(先 TranslateModel,再 MakeSolver)

# 语法

/**
* @brief  编译模型,生成求解器(先TranslateModel,再MakeSolver)
* @param  [in] model_name 模型名
* @param  [in] sim_inst_path 求解器实例的目录
* @return 模型编译结果
*/
bool MwMoHandler::CompileModel(const std::string& model_name, const std::wstring& sim_inst_path);

# 说明

编译模型,生成求解器(先 TranslateModel,再M akeSolver)

在对 MwSimData 初始化和仿真之前需先调用该接口,对模型进行编译。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
compileSuccess = ClassMgrPtr->GetMoHandler()->CompileModel(modelName.toStdString(), simInstDir.toStdWString());

# MwSimControl

仿真控制类,负责控制仿真的开始、暂停、继续、单步执行、停止等。

函数名 简介
RebindSimData 绑定仿真数据
GetSimData 获取仿真数据
IsSimIdle 判断仿真是否停止
IsSimPaused 判断仿真暂停
IsSimRunning 判断仿真运行
IsSimPausing 判断仿真暂停
IsSimStarting 判断仿真启动
IsSimLocked 判断仿真占用
StartSimulate 开始仿真
PauseSimulate 暂停仿真
ResumeSimulate 继续仿真
SimulateNextStep 仿真执行一步
StopSimulate 停止仿真
KillSimulate 停止仿真
SigBeforeSimStart 仿真启动信号
SigSimPaused 仿真暂停信号
SigSimStopped 仿真停止信号
SigSimResumed 仿真继续信号
SigSimTime 仿真时间点信号
SigSimLog 仿真日志信号
SigSimStep 仿真单步信号

# 公共类型

enum SimScale
{
Sim_Single,
Sim_Batch
}
功能 仿真规模
参数 Sim_Single 仿真规模为单次仿真 Sim_Batch 仿真规模为批量仿真
enum SimMode
{
Sim_ContinueMode,
Sim_RealtimeMode,
Sim_InteractiveStepMode,
Sim_InteractiveRealTimeMode,
Sim_SavetoDBModel
}
功能 仿真模式
参数 Sim_ContinueMode 持续仿真模式 Sim_RealtimeMode 实时仿真模式 Sim_InteractiveStepMode 交互单步仿真模式 Sim_InteractiveRealTimeMode 交互实时仿真模式 Sim_SavetoDBModel 通信仿真模式
enum ExitCode
{
EXIT_NORMAL,
KERNEL_EXIT_FATAL = 1,
KERNEL_EXIT_ALLOC_FAILED,
KERNEL_EXIT_INST_FAILED,
KERNEL_EXIT_INIT_FAILED,
KERNEL_EXIT_STEP_FAILED,
SOLVER_EXIT_INALID_CMD_LINE = 101,
SOLVER_EXIT_LOAD_SHARED_FAILED,
SOLVER_EXIT_CREATE_RESULT_FAILED,
SOLVER_EXIT_NO_CONFIG_FILE,
SOLVER_EXIT_INST_FAILED,
EXIT_IOTDB_FAIL,
EXIT_IOTDB_TIMES_FAIL,
EXIT_UNKOWN_ERROR = 999
}
功能 仿真退出代码
参数 EXIT_NORMAL 正常退出 KERNEL_EXIT_FATAL 严重错误而退出 KERNEL_EXIT_ALLOC_FAILED 内存分配失败而退出 KERNEL_EXIT_INST_FAILED 实例化失败而退出 KERNEL_EXIT_INIT_FAILED 初始化失败而退出 KERNEL_EXIT_STEP_FAILED 单步计算失败而退出 SOLVER_EXIT_INALID_CMD_LINE 无效的命令行 SOLVER_EXIT_LOAD_SHARED_FAILED 加载主控层共享库失败 SOLVER_EXIT_CREATE_RESULT_FAILED 后处理服务创建结果文件失败 SOLVER_EXIT_NO_CONFIG_FILE XML配置文件不存在 SOLVER_EXIT_INST_FAILED 求解器实例化失败 EXIT_IOTDB_FAIL 启动IoTDB失败 EXIT_IOTDB_TIMES_FAIL 插入IoTDB时间序列出错 EXIT_UNKOWN_ERROR 未知错误

# 公共函数

# RebindSimData

去除已绑定的SimData,并与新data建立单向引用

  • 语法

    void RebindSimData(MwSimData *data)
    
  • 说明

    去除已绑定的SimData,并与新data建立单向引用。

  • 示例

    在调用RebindSimData之前先调用GetSimData获取一次MwSimControl当前绑定的MwSimData,然后创建一个新的MwSimData并调用RebindSimData接口将其绑定到MwSimControl上,再调用GetSimData接口查看当前MwSimControl绑定的MwSimData。

    MwSimControl *sim_ctrl = new MwSimControl;
    MwSimData *before_data = sim_ctrl->GetSimData();
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_ctrl->RebindSimData(sim_data);
    MwSimData *after_data = sim_ctrl->GetSimData();
    

    before_data为空指针,sim_data和after_data指向的为同一个MwSimDta对象。 RebindSimData

# GetSimData

获取当前绑定的 SimData。

  • 语法

    MwSimData* GetSimData()
    
  • 说明

获取当前绑定的 SimData。

  • 示例

    在调用 RebindSimData 之前先调用 GetSimData 获取一次 MwSimControl 当前绑定的 MwSimData,然后创建一个新的 MwSimData 并调用 RebindSimData 接口将其绑定到 MwSimControl 上,再调用 GetSimData 接口查看当前 MwSimControl 绑定的 MwSimData。

    MwSimControl *sim_ctrl = new MwSimControl;
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_ctrl->RebindSimData(sim_data);
    MwSimData *after_data = sim_ctrl->GetSimData();
    

    before_data为空指针,sim_data和after_data指向的为同一个MwSimDta对象,符合预期结果。 GetSimData

# IsSimIdle

判断仿真是否停止。

  • 语法

    bool IsSimIdle()
    
  • 说明 在开始仿真前调用 MwSimControl 的 IsSimIdel 接口获取当前仿真是否空闲。

  • 示例 在开始仿真前调用MwSimControl的IsSimIdel接口获取当前仿真是否空闲,开始仿真后再次调用IsSimIdle接口查看仿真是否仍空闲。

    MwSimControl *sim_ctrl = new MwSimControl;
    wClassManager *class_mgr = new MwClassManager;
    class_mgr->Initialize();
    MwSimControl *sim_ctrl = new MwSimControl;
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_data->InitializeSimInst();
    sim_ctrl->RebindSimData(sim_data);
    bool is_sim_idle_1 = sim_ctrl->IsSimIdle();
    sim_ctrl->StartSimulate(MwSimControl::Sim_RealtimeMode);
    sim_ctrl->PauseSimulate();
    bool is_sim_idle_2 = sim_ctrl->IsSimIdle();
    

    is_sim_idle_1 为真,is_sim_idle_2 为假,符合预期结果。 IsSimIdle

# IsSimPaused

判断仿真是否暂停。

  • 语法

    bool IsSimPaused()
    
  • 说明

判断仿真是否暂停。

# IsSimRunning

判断仿真是否正在运行

  • 语法

    bool IsSimRunning()
    
  • 说明

    判断仿真是否正在运行。

  • 示例

    MwSimControl *sim_ctrl = new MwSimControl;
    MwClassManager *class_mgr = new MwClassManager;
    class_mgr->Initialize();
    MwSimControl *sim_ctrl = new MwSimControl;
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_data->InitializeSimInst();
    sim_ctrl->RebindSimData(sim_data);
    bool is_sim_running_1 = sim_ctrl->IsSimRunning();
    sim_ctrl->StartSimulate(MwSimControl::Sim_RealtimeMode);
    bool is_sim_running_2 = sim_ctrl->IsSimRunning();
    

    is_sim_ running _1 为假,is_sim_ running _2 为真,符合预期结果。 IsSimRunning

# IsSimPausing

判断仿真是否正在暂停。

  • 语法

    bool IsSimPausing()
    
  • 说明

判断仿真是否正在暂停。

  • 示例

    MwClassManager *class_mgr = new MwClassManager;
    class_mgr->Initialize();
    MwSimControl *sim_ctrl = new MwSimControl;
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_data->InitializeSimInst();
    sim_ctrl->RebindSimData(sim_data);
    sim_ctrl->StartSimulate(MwSimControl::Sim_RealtimeMode);
    sim_ctrl->PauseSimulate();
    bool is_sim_paused_2 = sim_ctrl->IsSimPausing();
    

    is_sim_paused_1为假,is_sim_paused_2为真,符合预期结果。 IsSimPausing

# IsSimStarting

判断仿真是否正在启动。

  • 语法

    bool IsSimStarting()
    
  • 说明

    判断仿真是否正在启动。

  • 示例

    MwSimControl *sim_ctrl = new MwSimControl;
    

# IsSimLocked

判断仿真是否占用。

  • 语法

    bool IsSimLocked()
    
  • 说明

    判断仿真是否占用。

# StartSimulate

开始仿真。

  • 语法

    bool StartSimulate(
    SimMode mode = Sim_ContinueMode, 
    SimScale scale = Sim_Single)
    
  • 说明

开始仿真。

  • 示例

    MwSimControl *sim_ctrl = new MwSimControl;
    MwClassManager *class_mgr = new MwClassManager;
    class_mgr->Initialize();
    MwSimControl *sim_ctrl = new MwSimControl;
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_data->InitializeSimInst();
    sim_ctrl->RebindSimData(sim_data);
    MwSimData *before_data = sim_ctrl->GetSimData();
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_ctrl->RebindSimData(sim_data);
    MwSimData *after_data = sim_ctrl->GetSimData()
    

    is_sim_idle_1 为真,is_sim_idle_2 为假,符合预期结果。 StartSimulate

# PauseSimulate

暂停仿真。

  • 语法

    bool PauseSimulate()
    
  • 说明

暂停仿真。

  • 示例

    MwSimControl *sim_ctrl = new MwSimControl;
    MwClassManager *class_mgr = new MwClassManager;
    class_mgr->Initialize();
    MwSimControl *sim_ctrl = new MwSimControl;
    MwSimData *sim_data = new MwSimData(L"PID_Controller", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller/Result.msr", L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller");
    sim_data->InitializeSimInst();
    sim_ctrl->RebindSimData(sim_data);
    bool is_sim_paused_1 = sim_ctrl->IsSimPausing();
    sim_ctrl->StartSimulate(MwSimControl::Sim_RealtimeMode);
    sim_ctrl->PauseSimulate();
    bool is_sim_paused_2 = sim_ctrl->IsSimPausing();
    

    is_sim_paused_1 为假,is_sim_paused_2 为真。

# ResumeSimulate

继续仿真。

  • 语法

    bool ResumeSimulate()
    
  • 说明

继续仿真。

# SimulateNextStep

仿真执行一步。

  • 语法

    bool SimulateNextStep()
    
  • 说明

    仿真执行一步。

# StopSimulate

异步停止仿真。

  • 语法

    void StopSimulate()
    
  • 说明

异步停止仿真。

# KillSimulate

停止仿真。

  • 语法

    void KillSimulate()
    
  • 说明

    停止仿真。

# 信号

# SigBeforeSimStart

仿真启动前信号。

  • 语法

    void SigBeforeSimStart()
    
  • 说明

    仿真启动前信号。

# SigSimPaused

仿真暂停信号。

  • 语法

    void SigSimPaused()
    
  • 说明

    仿真暂停信号。

# SigSimStopped

仿真停止信号。

  • 语法

    void SigSimStopped(int exit_code)
    
  • 说明

    仿真停止信号。

# SigSimResumed

仿真继续信号。

  • 语法

    void SigSimResumed()
    
  • 说明

    仿真继续信号。

# SigSimTime

仿真时间点信号。

  • 语法

    void SigSimTime(double cur_time)
    
  • 说明

    仿真时间点信号。

# SigSimLog

仿真日志信号。

  • 语法

    void SigSimLog(const QString &log)
    
  • 说明

    仿真日志信号。

# SigSimStep

仿真单步信号。

  • 语法

    void SigSimLog(double cur_time)
    
  • 说明

    仿真单步信号。