diff --git a/edc-web/app/models.py b/edc-web/app/models.py index 1459363..863c791 100644 --- a/edc-web/app/models.py +++ b/edc-web/app/models.py @@ -417,6 +417,7 @@ def upsert_fixture_param(dnt_id: int, **kwargs): fields = [ "Addr", "DevType", "TestMode", "RestDis", "MinusDis", "SensMin", "SensMax", "FreMin", "FreMax", "PeakMin", "PeakMax", + "FarTol", "NearTol", "StepTol", "BackForth", "NearStay", "FarStay", ] if existing: sets = ", ".join(f"`{f}`=%s" for f in fields) diff --git a/edc-web/app/routes/fixture.py b/edc-web/app/routes/fixture.py index 2bb788f..f63c1a5 100644 --- a/edc-web/app/routes/fixture.py +++ b/edc-web/app/routes/fixture.py @@ -59,13 +59,18 @@ def build_4b_packet(addr: int, dev_type: int, test_mode: int, reset_dis: int, minus_dis: int, sens_min: int, sens_max: int, fre_min: int, fre_max: int, - peak_min: int, peak_max: int) -> str: - """构造 0x4B 配置指令 hex 字符串 + peak_min: int, peak_max: int, + far_tol: int = 0, near_tol: int = 0, + step_tol: int = 0, back_forth: int = 0, + near_stay: int = 0, far_stay: int = 0) -> str: + """构造 0x4B 配置指令 hex 字符串 (V2.0.3 扩展) - 格式: 7F | 81 | 12 | 4B | Addr(1) | DevType(1) | TestMode(1) | + 格式: 7F | 81 | 17 | 4B | Addr(1) | DevType(1) | TestMode(1) | ResetDis(1) | MinusDis(1) | SensMin(2 LE) | SensMax(2 LE) | FreMin(2 LE) | FreMax(2 LE) | - PeakMin(2 LE) | PeakMax(2 LE) | XOR | SUM + PeakMin(2 LE) | PeakMax(2 LE) | + FarTol(1) | NearTol(1) | StepTol(1) | BackForth(1) | + NearStay(2 LE) | FarStay(2 LE) | XOR | SUM """ payload = bytes([ 0x4B, # CMD @@ -78,6 +83,14 @@ def build_4b_packet(addr: int, dev_type: int, test_mode: int, payload += (_le16(sens_min) + _le16(sens_max) + _le16(fre_min) + _le16(fre_max) + _le16(peak_min) + _le16(peak_max)) + # V2.0.3 波动参数 + payload += bytes([ + far_tol & 0xFF, + near_tol & 0xFF, + step_tol & 0xFF, + back_forth & 0xFF, + ]) + payload += _le16(near_stay) + _le16(far_stay) pkt = bytes([0x7F, 0x81, len(payload)]) + payload xor, total = _xor_sum(pkt[1:]) @@ -118,7 +131,7 @@ def api_fixture_command(): target = f"{device['serial']}" if device else f"dnt_id={dnt_id}" if cmd == "4B": - # 动态构造 0x4B 指令 + # 动态构造 0x4B 指令 (V2.0.3) params = data.get("params", {}) send_pkg = build_4b_packet( addr=params.get("addr", 1), @@ -132,6 +145,12 @@ def api_fixture_command(): fre_max=params.get("fre_max", 0), peak_min=params.get("peak_min", 0), peak_max=params.get("peak_max", 0), + far_tol=params.get("far_tol", 0), + near_tol=params.get("near_tol", 0), + step_tol=params.get("step_tol", 0), + back_forth=params.get("back_forth", 0), + near_stay=params.get("near_stay", 0), + far_stay=params.get("far_stay", 0), ) elif cmd in FIXTURE_COMMANDS: send_pkg = FIXTURE_COMMANDS[cmd] diff --git a/edc-web/app/static/js/fixture.js b/edc-web/app/static/js/fixture.js index 196f277..1f536d0 100644 --- a/edc-web/app/static/js/fixture.js +++ b/edc-web/app/static/js/fixture.js @@ -144,6 +144,12 @@ function fillFormFromParam(param) { document.getElementById("param-fre-max").value = param.FreMax || 0; document.getElementById("param-peak-min").value = param.PeakMin || 0; document.getElementById("param-peak-max").value = param.PeakMax || 0; + document.getElementById("param-far-tol").value = param.FarTol || 0; + document.getElementById("param-near-tol").value = param.NearTol || 0; + document.getElementById("param-step-tol").value = param.StepTol || 0; + document.getElementById("param-back-forth").value = param.BackForth || 0; + document.getElementById("param-near-stay").value = param.NearStay || 0; + document.getElementById("param-far-stay").value = param.FarStay || 0; const matched = baseTests.find(t => t.type_num === param.DevType); if (matched) { selectedBaseTest = matched; renderBaseTestTable(); } } @@ -172,6 +178,9 @@ async function saveToDb() { SensMin: data.sens_min, SensMax: data.sens_max, FreMin: data.fre_min, FreMax: data.fre_max, PeakMin: data.peak_min, PeakMax: data.peak_max, + FarTol: data.far_tol, NearTol: data.near_tol, + StepTol: data.step_tol, BackForth: data.back_forth, + NearStay: data.near_stay, FarStay: data.far_stay, }), }); const result = await resp.json(); @@ -197,6 +206,12 @@ function getFormParams() { fre_max: parseInt(document.getElementById("param-fre-max").value) || 0, peak_min: parseInt(document.getElementById("param-peak-min").value) || 0, peak_max: parseInt(document.getElementById("param-peak-max").value) || 0, + far_tol: parseInt(document.getElementById("param-far-tol").value) || 0, + near_tol: parseInt(document.getElementById("param-near-tol").value) || 0, + step_tol: parseInt(document.getElementById("param-step-tol").value) || 0, + back_forth: parseInt(document.getElementById("param-back-forth").value) || 0, + near_stay: parseInt(document.getElementById("param-near-stay").value) || 0, + far_stay: parseInt(document.getElementById("param-far-stay").value) || 0, }; } @@ -318,6 +333,9 @@ async function sendConfig() { SensMin: params.sens_min, SensMax: params.sens_max, FreMin: params.fre_min, FreMax: params.fre_max, PeakMin: params.peak_min, PeakMax: params.peak_max, + FarTol: params.far_tol, NearTol: params.near_tol, + StepTol: params.step_tol, BackForth: params.back_forth, + NearStay: params.near_stay, FarStay: params.far_stay, }), }); } else { diff --git a/edc-web/app/templates/fixture.html b/edc-web/app/templates/fixture.html index a930c13..208aa80 100644 --- a/edc-web/app/templates/fixture.html +++ b/edc-web/app/templates/fixture.html @@ -27,7 +27,7 @@