|
- /**
- * @file runtime_panel_controller.h
- * @brief 定义运行监控面板控制器
- * @version 1.0.0
- * @author suyu
- * @date 2026-08-22
- */
-
- #pragma once
-
- #include "domain/runtime_state.h"
- #include "services/plc_communication_gateway.h"
-
- #include <QString>
-
- #include <functional>
- #include <memory>
- #include <string>
-
- class AlarmService;
- class HmiEditorService;
- class HmiEditorWidget;
- class HmiNavigationService;
- class HmiRuntimeService;
- class LogicEditorService;
- class LogicEditorWidget;
- class QLabel;
- class ProjectService;
- class RegisterMonitorService;
- class RuntimeModeService;
- class RuntimeMonitorWidget;
- class RuntimeMonitorWindow;
- class QTimer;
- class QWidget;
-
- /** 组织运行监控窗口、刷新定时器和本地逻辑执行器反馈 */
- class RuntimePanelController final
- {
- public:
- /** 向状态栏报告一条带超时的消息 */
- using StatusReporter = std::function<void(
- const QString &message, int timeout_ms)>;
- /** 向输出面板报告一条消息 */
- using OutputReporter = std::function<void(const QString &message)>;
- /** 请求上层退出当前运行态 */
- using RuntimeExitRequester = std::function<void()>;
-
- /** 创建运行面板控制器并注入运行模式、编辑器和监控窗口依赖 */
- RuntimePanelController(
- QWidget &parent,
- RuntimeModeService &runtime_mode_service,
- ProjectService &project_service,
- HmiEditorService &hmi_editor_service,
- HmiRuntimeService &hmi_runtime_service,
- LogicEditorService &logic_editor_service,
- HmiNavigationService &hmi_navigation_service,
- AlarmService &alarm_service,
- RegisterMonitorService ®ister_monitor_service,
- HmiEditorWidget &hmi_editor_widget,
- LogicEditorWidget &logic_editor_widget,
- QLabel &executor_status_label,
- std::function<std::string()> current_logic_id,
- std::function<void(const std::string &)> select_logic,
- std::function<void(const std::string &)> show_logic_properties,
- StatusReporter status_reporter,
- OutputReporter output_reporter,
- RuntimeExitRequester runtime_exit_requester);
- /** 停止刷新并释放控制器拥有的运行监控窗口 */
- ~RuntimePanelController();
-
- /** 连接运行监控相关信号并完成初始配置 */
- void configure();
- /** 配置专用用户运行版的精简控制栏行为 */
- void configureUserRuntimeMode(
- bool enabled,
- std::function<void(int)> mode_requester,
- std::function<void()> plc_configuration_requester,
- std::function<void()> plc_disconnect_requester);
- /** 创建或复用唯一监控窗口,并把当前工程投影到运行态 */
- void enterRuntime(
- const std::string &page_id,
- const std::string &logic_id,
- ApplicationMode mode,
- PlcConnectionState plc_state);
- /** 停止刷新并隐藏监控窗口,离线服务的停止由运行模式服务负责 */
- void leaveRuntime(ApplicationMode mode, PlcConnectionState plc_state);
- /** 应用退出时关闭运行监控窗口并停止相关刷新 */
- void closeForApplicationExit();
- /** 根据当前模式的本地执行器状态刷新运行界面 */
- void updateSimulationUi(bool report_fault);
- /** 返回当前唯一的运行监控控件 */
- RuntimeMonitorWidget *runtimeMonitorWidget() const;
-
- private:
- /** 处理运行刷新定时器到期事件 */
- void handleRuntimeTimer();
- /** 处理离线或真机只读轨迹执行器状态变化 */
- void handleSimulationStateChanged();
- /** 处理一次离线扫描完成事件 */
- void handleScanCompleted();
-
- /** 主窗口父对象,不由控制器拥有 */
- QWidget &parent_;
- /** 运行模式服务,不由控制器拥有 */
- RuntimeModeService &runtime_mode_service_;
- /** 工程服务,不由控制器拥有 */
- ProjectService &project_service_;
- /** HMI 编辑服务,不由控制器拥有 */
- HmiEditorService &hmi_editor_service_;
- /** HMI 运行服务,不由控制器拥有 */
- HmiRuntimeService &hmi_runtime_service_;
- /** 梯形图编辑服务,不由控制器拥有 */
- LogicEditorService &logic_editor_service_;
- /** HMI 页面导航服务,不由控制器拥有 */
- HmiNavigationService &hmi_navigation_service_;
- /** 报警服务,不由控制器拥有 */
- AlarmService &alarm_service_;
- /** 寄存器监控服务,不由控制器拥有 */
- RegisterMonitorService ®ister_monitor_service_;
- /** 主窗口中的 HMI 编辑器,不由控制器拥有 */
- HmiEditorWidget &hmi_editor_widget_;
- /** 主窗口中的梯形图编辑器,不由控制器拥有 */
- LogicEditorWidget &logic_editor_widget_;
- /** 显示当前本地执行器状态的标签 */
- QLabel &executor_status_label_;
- /** 获取当前控制逻辑标识的回调 */
- std::function<std::string()> current_logic_id_;
- /** 切换当前控制逻辑的回调 */
- std::function<void(const std::string &)> select_logic_;
- /** 显示控制逻辑属性的回调 */
- std::function<void(const std::string &)> show_logic_properties_;
- /** 向状态栏报告消息的回调 */
- StatusReporter status_reporter_;
- /** 向输出面板报告消息的回调 */
- OutputReporter output_reporter_;
- /** 请求主窗口退出运行态的回调 */
- RuntimeExitRequester runtime_exit_requester_;
- /** 唯一的运行监控顶层窗口 */
- std::unique_ptr<RuntimeMonitorWindow> runtime_monitor_window_;
- /** 运行监控窗口中的主控件,窗口拥有它 */
- RuntimeMonitorWidget *runtime_monitor_widget_ = nullptr;
- /** 定时刷新运行监控数据的计时器 */
- QTimer *runtime_refresh_timer_ = nullptr;
- /** 当前是否已经进入运行监控会话 */
- bool runtime_session_active_ = false;
- std::function<void(int)> mode_requester_;
- std::function<void()> plc_configuration_requester_;
- std::function<void()> plc_disconnect_requester_;
- };
|