pELoad 多处完善:测量改为 FETCh 读缓存(不触发测量、修复真实设备 MEAS 查询超时失败)+ 异步查询不阻塞 100ms 控制循环;CV 优先控制路径与 FUNC:MODE FIX 防护;sqlite 增加 volt_set/cmd_volt 列并支持旧库自动迁移;页面重构为静态骨架(输入框永不重建、聚焦不被打断)+ 指令确认/步骤引导/测量诊断;deploy.sh 服务列表补 pMotor/pELoad,missions/h100.moos 补 pELoad 新配置

This commit is contained in:
zjk
2026-09-03 16:40:27 +08:00
parent 2a34b79461
commit 91be306a92
13 changed files with 640 additions and 297 deletions
+12
View File
@@ -50,12 +50,23 @@ public:
bool isConnected() const { return m_connected; }
// 写命令(无响应期待)。未连接/发送失败按错误计数并丢弃。
// 返回 true 仅表示"已入队",不保证写入成功。
bool cmd(const std::string& scpi);
// 写命令并等待确认:阻塞到 IO 线程真正把命令写入 socket(或超时)。
// 用于需要明确成功/失败反馈的关键指令(如 SYST:REM / SYST:LOC)。
bool cmdConfirmed(const std::string& scpi, int timeoutMs = 300);
// 同步查询:发送 scpi 并等待一行响应。
// timeoutMs 建议不大于控制周期(100ms 循环里建议 <= 80)。
bool query(const std::string& scpi, std::string& resp, int timeoutMs = 200);
// 异步查询:发送 scpi,IO 线程收到响应后调用回调(IO 线程内)。
// 不阻塞调用线程——用于测量轮询,避免拖慢 100ms 功率控制循环。
// 回调注意:运行在 IO 线程,勿直接调用会阻塞的操作。
using QueryCallback = std::function<void(bool ok, const std::string& resp)>;
bool queryAsync(const std::string& scpi, QueryCallback cb);
// 统计
unsigned long txCount() const { return m_txCount; }
unsigned long txErrorCount() const { return m_txErrorCount; }
@@ -74,6 +85,7 @@ private:
std::string resp;
bool done;
bool ok;
QueryCallback cb; // 异步查询回调(IO 线程调用)
Work() : expectReply(false), done(false), ok(false) {}
};