|
- #pragma once
-
- #include "domain/register_monitor_model.h"
- #include "domain/register_repository.h"
-
- #include <cstdint>
- #include <functional>
- #include <string>
- #include <vector>
-
- // 自由监控列表编辑的失败分类
- enum class RegisterMonitorError
- {
- None,
- InvalidAddress,
- RangeOverflow,
- LimitExceeded,
- NoChange
- };
-
- // 监控列表编辑结果;affectedCount 表示本次受影响的地址数量
- struct RegisterMonitorResult
- {
- bool succeeded = false;
- RegisterMonitorError error = RegisterMonitorError::None;
- std::string message;
- int affectedCount = 0;
- };
-
- // 自由监控写入结果;底层 RegisterError 会原样保留
- struct RegisterMonitorWriteResult
- {
- bool succeeded = false;
- RegisterError error = RegisterError::Unavailable;
- std::string message;
- };
-
- // 编排监控模型和寄存器仓库,地址列表属于当前会话
- class RegisterMonitorService
- {
- public:
- explicit RegisterMonitorService(RegisterRepository &repository);
-
- // 从起始地址连续添加 count 个同区域地址
- RegisterMonitorResult addRange(const std::string &start_address, int count);
- // 删除一批地址并通知 UI 刷新轮询集合
- RegisterMonitorResult remove(const std::vector<RegisterAddress> &addresses);
- // 清空监控列表
- RegisterMonitorResult clear();
- // 对单个 M 地址写位
- RegisterMonitorWriteResult writeBit(const RegisterAddress &address, bool value);
- // 对单个 D 地址写字
- RegisterMonitorWriteResult writeWord(
- const RegisterAddress &address, std::int16_t value);
- const std::vector<RegisterAddress> &addresses() const;
- std::vector<MonitorValue> values(bool communication_fault) const;
- void setAddressesChangedCallback(std::function<void()> callback);
-
- private:
- RegisterRepository &repository_;
- RegisterMonitorModel model_;
- std::function<void()> addresses_changed_callback_;
- };
|