From e8a27bb203fe2aff70390a5eca002d7438da9b0f Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 22 十月 2025 14:24:34 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/DAQBridge/proto/Protocol.h | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 168 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/DAQBridge/proto/Protocol.h b/SourceCode/Bond/DAQBridge/proto/Protocol.h
new file mode 100644
index 0000000..ce98f98
--- /dev/null
+++ b/SourceCode/Bond/DAQBridge/proto/Protocol.h
@@ -0,0 +1,168 @@
+#pragma once
+#include <cstdint>
+#include <string>
+#include <vector>
+
+namespace Proto {
+
+ // 固定帧
+ inline constexpr uint8_t kHead[4] = { 0x11, 0x88, 0x11, 0x88 };
+ inline constexpr uint8_t kTail = 0x88;
+
+ // 指令码
+ enum : uint16_t {
+ // 握手
+ CMD_REQ_VERSION = 0x0001,
+ CMD_RSP_VERSION = 0xF001,
+
+ // 单通道增量拉取
+ CMD_REQ_SINCE = 0x0101,
+ CMD_RSP_SINCE = 0xF101,
+
+ // 统计/通道列表
+ CMD_REQ_STATS = 0x0103,
+ CMD_RSP_STATS = 0xF103,
+
+ // 机台列表
+ CMD_REQ_MACHINES = 0x0104,
+ CMD_RSP_MACHINES = 0xF104,
+
+ // 整机多通道增量拉取
+ CMD_REQ_SINCE_ALL = 0x0105,
+ CMD_RSP_SINCE_ALL = 0xF105,
+
+ // 批次信息
+ CMD_REQ_BATCH_INFO = 0x0120,
+ CMD_RSP_BATCH_INFO = 0xF120,
+
+ // 错误
+ CMD_RSP_ERROR = 0xE100,
+ };
+
+ // === since* 请求里附加 batchId 的标志位 ===
+ inline constexpr uint16_t SINCE_FLAG_HAS_BATCH = 0x0001;
+
+ // ===== 数据结构(两端共用) =====
+
+ // 0x0001 / 0xF001
+ struct ReqVersion {
+ uint32_t dataId = 0;
+ };
+ struct RspVersion {
+ uint32_t dataId = 0;
+ std::string version; // UTF-8,例如 "1.0.1"
+ };
+
+ // 0x0104 / 0xF104
+ struct MachineInfo {
+ uint32_t id = 0;
+ std::string name;
+ };
+ struct ReqMachines {
+ uint32_t dataId = 0;
+ };
+ struct RspMachines {
+ uint32_t dataId = 0;
+ std::vector<MachineInfo> machines;
+ };
+
+ // 0x0103 / 0xF103
+ struct ReqStats {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ uint16_t flags = 0;
+ };
+ struct ChannelStatInfo {
+ uint32_t channelId = 0;
+ uint64_t earliestTs = 0;
+ uint64_t latestTs = 0;
+ uint32_t size = 0;
+ std::string name; // UTF-8
+ };
+ struct RspStats {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ std::vector<ChannelStatInfo> channels;
+ };
+
+ // 0x0101 / 0xF101(单通道增量)
+ struct ReqSince {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ uint32_t channelId = 0;
+ uint64_t sinceTsExclusive = 0; // ms
+ uint16_t maxCount = 1024;
+ uint16_t flags = 0; // 按位,见 SINCE_FLAG_HAS_BATCH
+ std::string batchId; // flags & SINCE_FLAG_HAS_BATCH 时有效
+ };
+ struct SamplePair {
+ uint64_t ts_ms = 0;
+ double value = 0.0;
+ };
+ struct RspSince {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ uint32_t channelId = 0;
+ uint64_t lastTsSent = 0;
+ uint8_t more = 0; // 该通道是否还有未发
+ std::vector<SamplePair> samples;
+ };
+
+ // 0x0105 / 0xF105(整机多通道增量)
+ struct ChannelBlock {
+ uint32_t channelId = 0;
+ uint64_t lastTsSent = 0; // 该通道本次最后样本时间戳
+ uint8_t more = 0; // 该通道是否还有未发
+ std::vector<SamplePair> samples;
+ };
+ struct ReqSinceAll {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ uint64_t sinceTsExclusive = 0; // 对所有通道统一 since
+ uint16_t maxPerChannel = 1024; // 每条曲线上限
+ uint16_t flags = 0; // 按位,见 SINCE_FLAG_HAS_BATCH
+ std::string batchId; // flags & SINCE_FLAG_HAS_BATCH 时有效
+ };
+ struct RspSinceAll {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ uint8_t moreAny = 0; // 是否还有任意通道有剩余
+ std::vector<ChannelBlock> blocks; // 多个通道的增量
+ };
+
+ // === 批次状态 ===
+ enum class BatchState : uint8_t {
+ Idle = 0, // 无活动批次:activeBatchId="", activeStartTs=0, expectedEndTs=0
+ Active = 1,
+ };
+
+ // === 错误码 ===
+ enum class ErrCode : uint16_t {
+ NoActiveBatch = 0x0001, // 当前无活动批次
+ BatchMismatch = 0x0002, // 请求携带的 batchId 与当前活动批次不一致
+ };
+
+ // 0x0120 / 0xF120(批次信息)
+ struct ReqBatchInfo {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ };
+ struct RspBatchInfo {
+ uint32_t dataId = 0;
+ uint32_t machineId = 0;
+ BatchState state = BatchState::Idle;
+ std::string activeBatchId; // state=Idle 时应为空
+ uint64_t activeStartTs = 0;
+ uint64_t expectedEndTs = 0; // =0 表示未知/Idle
+ };
+
+ // 0xE100 错误帧
+ struct RspError {
+ uint32_t dataId = 0;
+ uint16_t refCmd = 0; // 出错请求的指令:如 0x0101/0x0105/0x0120...
+ uint32_t machineId = 0;
+ ErrCode code = ErrCode::NoActiveBatch;
+ std::string message; // 简短文本
+ };
+
+} // namespace Proto
--
Gitblit v1.9.3