docs: 新增 .qoder Repowiki 知识库文档

This commit is contained in:
cbb
2026-09-07 12:19:26 +08:00
parent 43d42ad891
commit ef9472334a
105 changed files with 1313322 additions and 263 deletions
+9 -8
View File
@@ -32,21 +32,22 @@
*/
"use strict";
/** 单个 PDO 周期回传的状态槽数(与 ecat_native.c 的 MOT_SLOTS_PER_PDO 一致) */
const MOT_SLOTS_PER_PDO = 7;
/** 单个 PDO 周期回传的状态槽数(与 ecat_native.c 的 MOT_SLOTS_PER_PDO 一致;
* 固件 1.6.4 起槽长 56B = 8B 头 + 48B STATUS,段 2 的 280B 正好放 5 个) */
const MOT_SLOTS_PER_PDO = 5;
/** 状态槽总数 = 9 节点 × 3 通道(ecat_native.c 的 MOTOR_SLOT_COUNT) */
const MOTOR_SLOT_COUNT = 27;
/** 扫完全表所需周期数(= ⌈MOTOR_SLOT_COUNT / MOT_SLOTS_PER_PDO⌉ = ⌈27/7⌉ = 4)。
/** 扫完全表所需周期数(= ⌈MOTOR_SLOT_COUNT / MOT_SLOTS_PER_PDO⌉ = ⌈27/5⌉ = 6)。
* 注意:这**只**是开机首圈全表扫描的窗口数,不是稳态下单槽的刷新分频 ——
* 后端会把窗口收缩到只盖有主的槽(窗口自适应),稳态下在线电机
* 每个 PDO 周期都刷新。要显示"数据多新"请用快照里的 slot_period_ms。 */
const MOTOR_SCAN_CYCLES = 4;
const MOTOR_SCAN_CYCLES = 6;
/**
* 槽 seq 停止增长多久算离线(ms)。
* 为什么需要它:后端的快照把见过的槽**永久累积**,电机拔了也不会消失,
* 只能靠 seq 是否还在涨来判活。阈值要大于"扫完全表 + 一点抖动",否则
* 慢周期下会把正常电机误判离线:period 10ms × 4 周期 = 40ms,取 2s 有充足余量。
* 慢周期下会把正常电机误判离线:period 10ms × 6 周期 = 60ms,取 2s 有充足余量。
*/
const STALE_OFFLINE_MS = 2000;
@@ -86,10 +87,10 @@ function fmtPeriod(ms) {
export function createEcatTransport(ctx) {
const { recordSlow, isTransient } = ctx;
/* 网卡匹配子串。与 ecat.html 的输入框默认值一致(I226);
/* 网卡匹配子串。与 ecat.html 的输入框默认值一致(I210,2026-09 网卡 I226→I210);
* 存 localStorage 以便换网卡后不用每次重设。 */
const LS_ADAPTER = "dcu_ecat_adapter";
let adapterSubstr = "I226";
let adapterSubstr = "I210";
try {
const saved = localStorage.getItem(LS_ADAPTER);
if (saved && saved.trim()) adapterSubstr = saved.trim();
@@ -193,7 +194,7 @@ export function createEcatTransport(ctx) {
async function ensureOpen() {
const st = await api("status", {}, 6000);
if (st && st.ok === true) return st; // 已连接
/* 未连接 → 打开网卡。substr 与 ecat.html 的默认值一致(I226);
/* 未连接 → 打开网卡。substr 与 ecat.html 的默认值一致(I210);
* 换网卡的场合由 setAdapter() 覆盖,存 localStorage 供下次复用。 */
const r = await api("open", { substr: adapterSubstr }, 20000);
if (!r || r.ok !== true) {