准备工作

在开始使用之前,请确保:

  • 已成功安装并启动应用
  • 已完成用户注册和登录
  • 浏览器支持 HTML5 和 Canvas(推荐使用 Chrome 或 Firefox)
首次使用? 建议先浏览界面介绍章节, 熟悉的界面布局。

第一步:创建新项目

启动 后,您可以创建新项目:

创建新项目

  1. 点击左侧边栏工程面板的 "新建工程" 按钮
  2. 输入项目名称和描述
  3. 点击 "创建" 按钮
创建项目

创建新项目界面

第二步:构建 OPM 模型

创建项目后,您将看到空白的画布。让我们创建一个简单的 OPM 模型:

添加对象:侦察机

  1. 点击工具栏中的 "对象" 图标(矩形)
  2. 从工具栏拖拽到画布以创建对象,并将其命名为 "侦察机"

添加过程:执行侦察任务

  1. 点击工具栏中的 "过程" 图标(椭圆)
  2. 从工具栏拖拽到画布以创建过程,并将其命名为 "执行侦察任务"

添加对象:侦察数据

  1. 再次点击工具栏中的 "对象" 图标
  2. 从工具栏拖拽到画布以创建另一个对象,并将其命名为 "侦察数据"

创建连线

  1. 点击工具栏中的 "连线" 图标
  2. "侦察机" 对象拖动到 "执行侦察任务" 过程,选择 "主控" 连线类型
  3. "执行侦察任务" 过程拖动到 "侦察数据" 对象,选择 "生成" 连线类型
构建OPM模型

OPM 建模界面示例

提示: 您可以拖动节点来调整布局,也可以使用自动布局功能(工具栏中的 "自动排列" 按钮)。

第三步:编写仿真脚本

OPM 模型需要配合 JavaScript或者C++语言 脚本来定义仿真行为:

  1. 选中 "加工" 过程节点
  2. 在右侧属性面板中,找到 "脚本" 标签
  3. 点击 "编辑脚本" 按钮,打开统一脚本编辑器
  4. 输入以下示例代码(C++语言为例):
#include <script-runtime/api/cwopm_script_api.h>
#include <iostream>
#include <string>
#include <random> 
#include <map>
#include <any>

extern "C" void action_func(cwopm::ScriptContext* ctx) {
    // 记录任务开始
    std::cout << "[INFO] 过程 '" << ctx->elementName
              << "' (ID: " << ctx->elementId
              << ") 开始执行侦察任务。" << std::endl;

    // 模拟侦察任务时间(这里只是生成一个随机时间,实际仿真时间由引擎控制)
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution<> dis(5.0, 15.0); // 5到15秒
    double missionTime = dis(gen);

    // 假设侦察机是主控对象,其状态可能影响任务执行
    std::string aircraftState = ctx->getObjectState("侦察机");
    std::cout << "[INFO] 侦察机当前状态: " << aircraftState << std::endl;

    // 记录任务完成
    std::cout << "[INFO] 过程 '" << ctx->elementName
              << "' (ID: " << ctx->elementId
              << ") 完成侦察任务,模拟耗时:" << missionTime
              << " 秒。" << std::endl;

    // 准备侦察数据载荷
    std::map<std::string, std::any> reconnaissancePayload;
    reconnaissancePayload["source"] = ctx->elementName;
    reconnaissancePayload["mission_duration"] = missionTime;
    reconnaissancePayload["data_quality"] = "high"; // Example data
    reconnaissancePayload["timestamp"] = ctx->simulationTime; // Use simulation time

    // 通过消息总线发送侦察数据
    if (ctx->message) {
        cwopm::Message sentMessage = ctx->message->send("reconnaissance_data_channel", reconnaissancePayload);
        std::cout << "[INFO] 侦察数据已通过消息通道 'reconnaissance_data_channel' 发送。消息ID: "
                  << sentMessage.id << std::endl;
    } else {
        std::cerr << "[ERROR] 消息总线不可用,未能发送侦察数据。" << std::endl;
    }
}
注意: C++ 示例中通过 ctx 访问当前过程对象;在 JavaScript 脚本中则使用 this。 详见脚本编写章节。

第四步:运行仿真

完成建模和脚本编写后,就可以运行仿真了:

  1. 点击 "开始仿真" 按钮
  2. 观察仿真运行过程,查看实时日志
运行仿真

仿真运行界面

查看仿真结果

  • 日志面板:查看仿真过程中的所有日志输出
  • 黑板视图::查看仿真运行时的全局状态变量
  • 消息数据::查看仿真消息通道信息

第五步:保存项目

完成建模和仿真后,别忘了保存您的项目:

  1. 点击工具栏中的 "保存项目" 按钮(磁盘图标)
  2. 或者使用快捷键 Ctrl + S(Mac: Cmd + S
  3. 项目将保存到服务器(多用户环境下)或本地存储

下一步

恭喜!您已经完成了 的快速入门。接下来可以: