# 编译仿真类
对模型实现底层检查模型文本、编译模型操作。
# 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对象。

# 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对象,符合预期结果。

# 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 为假,符合预期结果。

# 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 为真,符合预期结果。

# 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为真,符合预期结果。

# 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 为假,符合预期结果。

# 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)说明
仿真单步信号。