综合平台编程器项目的远程存储
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

64 líneas
1.9 KiB

  1. #pragma once
  2. #include "domain/register_monitor_model.h"
  3. #include "domain/register_repository.h"
  4. #include <cstdint>
  5. #include <functional>
  6. #include <string>
  7. #include <vector>
  8. // 自由监控列表编辑的失败分类
  9. enum class RegisterMonitorError
  10. {
  11. None,
  12. InvalidAddress,
  13. RangeOverflow,
  14. LimitExceeded,
  15. NoChange
  16. };
  17. // 监控列表编辑结果;affectedCount 表示本次受影响的地址数量
  18. struct RegisterMonitorResult
  19. {
  20. bool succeeded = false;
  21. RegisterMonitorError error = RegisterMonitorError::None;
  22. std::string message;
  23. int affectedCount = 0;
  24. };
  25. // 自由监控写入结果;底层 RegisterError 会原样保留
  26. struct RegisterMonitorWriteResult
  27. {
  28. bool succeeded = false;
  29. RegisterError error = RegisterError::Unavailable;
  30. std::string message;
  31. };
  32. // 编排监控模型和寄存器仓库,地址列表属于当前会话
  33. class RegisterMonitorService
  34. {
  35. public:
  36. explicit RegisterMonitorService(RegisterRepository &repository);
  37. // 从起始地址连续添加 count 个同区域地址
  38. RegisterMonitorResult addRange(const std::string &start_address, int count);
  39. // 删除一批地址并通知 UI 刷新轮询集合
  40. RegisterMonitorResult remove(const std::vector<RegisterAddress> &addresses);
  41. // 清空监控列表
  42. RegisterMonitorResult clear();
  43. // 对单个 M 地址写位
  44. RegisterMonitorWriteResult writeBit(const RegisterAddress &address, bool value);
  45. // 对单个 D 地址写字
  46. RegisterMonitorWriteResult writeWord(
  47. const RegisterAddress &address, std::int16_t value);
  48. const std::vector<RegisterAddress> &addresses() const;
  49. std::vector<MonitorValue> values(bool communication_fault) const;
  50. void setAddressesChangedCallback(std::function<void()> callback);
  51. private:
  52. RegisterRepository &repository_;
  53. RegisterMonitorModel model_;
  54. std::function<void()> addresses_changed_callback_;
  55. };