综合平台编程器项目的远程存储
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

71 rader
2.1 KiB

  1. /**
  2. * @file free_monitor_widget.h
  3. * @brief 定义自由寄存器监控控件
  4. * @version 1.0.0
  5. * @author suyu
  6. * @date 2026-08-22
  7. */
  8. #pragma once
  9. #include "domain/runtime_state.h"
  10. #include "services/plc_communication_gateway.h"
  11. #include <QWidget>
  12. #include <memory>
  13. namespace Ui {
  14. class FreeMonitorWidget;
  15. }
  16. class RegisterMonitorService;
  17. /** 自由监控 UI:地址列表属于当前会话,读写统一委托 RegisterMonitorService */
  18. class FreeMonitorWidget final : public QWidget
  19. {
  20. Q_OBJECT
  21. public:
  22. /** 创建自由监控控件并绑定监控服务 */
  23. explicit FreeMonitorWidget(
  24. RegisterMonitorService &service,
  25. QWidget *parent = nullptr);
  26. /** 释放 Designer 界面对象 */
  27. ~FreeMonitorWidget() override;
  28. /** 根据当前模式和通信状态开启或关闭写入入口 */
  29. void setWriteEnabled(bool enabled);
  30. /** 根据运行模式和 PLC 状态刷新所有监控值 */
  31. void refreshValues(ApplicationMode mode, PlcConnectionState plc_state);
  32. /** 从服务重新加载当前会话中的地址列表 */
  33. void reloadAddresses();
  34. signals:
  35. /** 监控地址列表发生变化时发出 */
  36. void monitorAddressesChanged();
  37. /** 操作完成后发出可直接显示的消息 */
  38. void operationMessage(const QString &message);
  39. private:
  40. /** 从输入框添加一个或多个监控地址 */
  41. void addAddresses();
  42. /** 删除当前选中的监控地址 */
  43. void removeSelectedAddresses();
  44. /** 清空当前会话中的监控地址 */
  45. void clearAddresses();
  46. /** 写入指定行中的寄存器值 */
  47. void writeRow(int row);
  48. /** 根据当前权限刷新写入控件状态 */
  49. void updateWriteControls();
  50. /** 统一处理监控服务返回结果 */
  51. void handleResult(const QString &action, bool succeeded, const std::string &message);
  52. /** Qt Designer 生成的界面对象 */
  53. std::unique_ptr<Ui::FreeMonitorWidget> ui_;
  54. /** 寄存器监控服务,不由控件拥有 */
  55. RegisterMonitorService &service_;
  56. /** 当前是否允许执行寄存器写入 */
  57. bool write_enabled_ = false;
  58. };