fix(pm): pmHold 幂等,清醒轮询不再每 2s 打「豁免解除」
pollOnce 每 2s 调 markAwake();原先无脑 pmHold(0) 会重复 POST 并刷日志。 现跟踪 pmHoldOn,仅在状态翻转时发请求并记一行。
This commit is contained in:
+11
-4
@@ -327,11 +327,15 @@
|
|||||||
* 事务本身会唤醒睡眠中的芯片,轮询等于不停叫醒它);连败 3 次标红停轮。
|
* 事务本身会唤醒睡眠中的芯片,轮询等于不停叫醒它);连败 3 次标红停轮。
|
||||||
* pollGen:丢弃 enterMode/唤醒 之后仍在途的过期 1E 响应,避免竞态覆盖 UI。 ---- */
|
* pollGen:丢弃 enterMode/唤醒 之后仍在途的过期 1E 响应,避免竞态覆盖 UI。 ---- */
|
||||||
var pollFail = 0, pollTimer = null, pollPaused = false, pollGen = 0;
|
var pollFail = 0, pollTimer = null, pollPaused = false, pollGen = 0;
|
||||||
|
/** 主站看门狗豁免是否已置位(pmHold 幂等,防 2s 轮询刷屏) */
|
||||||
|
var pmHoldOn = false;
|
||||||
function bumpPollGen() { return ++pollGen; }
|
function bumpPollGen() { return ++pollGen; }
|
||||||
/* 仅在确认芯片已离开睡眠(唤醒成功 / 读到 SLEEP_EN=0 / NRST)时清 flag */
|
/* 仅在确认芯片已离开睡眠(唤醒成功 / 读到 SLEEP_EN=0 / NRST)时清 flag */
|
||||||
function markAwake() {
|
function markAwake() {
|
||||||
clearSleepFlag();
|
clearSleepFlag();
|
||||||
pmHold(0); /* 芯片已醒:解除主站看门狗豁免,恢复正常自愈 */
|
/* 只在「之前置过豁免」时才解除:pollOnce 每 2s 调本函数,
|
||||||
|
* 无脑 pmHold(0) 会把「主站看门狗豁免解除」刷屏。 */
|
||||||
|
if (pmHoldOn) pmHold(0);
|
||||||
$("sleepBanner").textContent =
|
$("sleepBanner").textContent =
|
||||||
"🌙 芯片处于低功耗档 —— EtherCAT 通信已中断,点「手动唤醒」恢复";
|
"🌙 芯片处于低功耗档 —— EtherCAT 通信已中断,点「手动唤醒」恢复";
|
||||||
}
|
}
|
||||||
@@ -431,11 +435,14 @@
|
|||||||
* 即被偷偷拉回 OP——2026-09-12 实测休眠 ~20s 自动"复活")。解除时主站
|
* 即被偷偷拉回 OP——2026-09-12 实测休眠 ~20s 自动"复活")。解除时主站
|
||||||
* 自带 60s 冷却,让本页唤醒流程先走完。best-effort:native 未起只记日志。 */
|
* 自带 60s 冷却,让本页唤醒流程先走完。best-effort:native 未起只记日志。 */
|
||||||
function pmHold(on) {
|
function pmHold(on) {
|
||||||
return ecatPost("pm/hold", { on: on }, 5000).then(function (r) {
|
var want = !!on;
|
||||||
log("主站看门狗豁免" + (on ? "置位" : "解除") +
|
if (pmHoldOn === want) return Promise.resolve();
|
||||||
|
return ecatPost("pm/hold", { on: want }, 5000).then(function (r) {
|
||||||
|
if (r.ok) pmHoldOn = want;
|
||||||
|
log("主站看门狗豁免" + (want ? "置位" : "解除") +
|
||||||
(r.ok ? "" : "失败: " + r.log.join(";")), r.ok ? "ok" : "warn");
|
(r.ok ? "" : "失败: " + r.log.join(";")), r.ok ? "ok" : "warn");
|
||||||
}).catch(function (e) {
|
}).catch(function (e) {
|
||||||
log("主站看门狗豁免" + (on ? "置位" : "解除") + "失败: " + e.message, "warn");
|
log("主站看门狗豁免" + (want ? "置位" : "解除") + "失败: " + e.message, "warn");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function ecatEnsureOpen() {
|
function ecatEnsureOpen() {
|
||||||
|
|||||||
Reference in New Issue
Block a user