feat: DG430 V2.0.3 — 波动测试模式 前端+后端同步
edc_server: - dg430.py: 新增0xB4解析; 0x4C扩展6字段(向后兼容) - models.py: tb_fixture_param DDL + upsert 新增6字段 - handlers.py: parse_loop 添加0xB4处理; 0x4C传参扩展 edc-web: - fixture.py: build_4b_packet() 新增6个波动参数 - models.py: upsert_fixture_param 字段列表扩展 - fixture.html: 新增波动测试参数输入区(6字段) - fixture.js: getFormParams/fillForm/saveToDb/sendConfig 全部扩展
This commit is contained in:
@@ -417,6 +417,7 @@ def upsert_fixture_param(dnt_id: int, **kwargs):
|
|||||||
fields = [
|
fields = [
|
||||||
"Addr", "DevType", "TestMode", "RestDis", "MinusDis",
|
"Addr", "DevType", "TestMode", "RestDis", "MinusDis",
|
||||||
"SensMin", "SensMax", "FreMin", "FreMax", "PeakMin", "PeakMax",
|
"SensMin", "SensMax", "FreMin", "FreMax", "PeakMin", "PeakMax",
|
||||||
|
"FarTol", "NearTol", "StepTol", "BackForth", "NearStay", "FarStay",
|
||||||
]
|
]
|
||||||
if existing:
|
if existing:
|
||||||
sets = ", ".join(f"`{f}`=%s" for f in fields)
|
sets = ", ".join(f"`{f}`=%s" for f in fields)
|
||||||
|
|||||||
@@ -59,13 +59,18 @@ def build_4b_packet(addr: int, dev_type: int, test_mode: int,
|
|||||||
reset_dis: int, minus_dis: int,
|
reset_dis: int, minus_dis: int,
|
||||||
sens_min: int, sens_max: int,
|
sens_min: int, sens_max: int,
|
||||||
fre_min: int, fre_max: int,
|
fre_min: int, fre_max: int,
|
||||||
peak_min: int, peak_max: int) -> str:
|
peak_min: int, peak_max: int,
|
||||||
"""构造 0x4B 配置指令 hex 字符串
|
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) |
|
ResetDis(1) | MinusDis(1) |
|
||||||
SensMin(2 LE) | SensMax(2 LE) | FreMin(2 LE) | FreMax(2 LE) |
|
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([
|
payload = bytes([
|
||||||
0x4B, # CMD
|
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) +
|
payload += (_le16(sens_min) + _le16(sens_max) +
|
||||||
_le16(fre_min) + _le16(fre_max) +
|
_le16(fre_min) + _le16(fre_max) +
|
||||||
_le16(peak_min) + _le16(peak_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
|
pkt = bytes([0x7F, 0x81, len(payload)]) + payload
|
||||||
xor, total = _xor_sum(pkt[1:])
|
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}"
|
target = f"{device['serial']}" if device else f"dnt_id={dnt_id}"
|
||||||
|
|
||||||
if cmd == "4B":
|
if cmd == "4B":
|
||||||
# 动态构造 0x4B 指令
|
# 动态构造 0x4B 指令 (V2.0.3)
|
||||||
params = data.get("params", {})
|
params = data.get("params", {})
|
||||||
send_pkg = build_4b_packet(
|
send_pkg = build_4b_packet(
|
||||||
addr=params.get("addr", 1),
|
addr=params.get("addr", 1),
|
||||||
@@ -132,6 +145,12 @@ def api_fixture_command():
|
|||||||
fre_max=params.get("fre_max", 0),
|
fre_max=params.get("fre_max", 0),
|
||||||
peak_min=params.get("peak_min", 0),
|
peak_min=params.get("peak_min", 0),
|
||||||
peak_max=params.get("peak_max", 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:
|
elif cmd in FIXTURE_COMMANDS:
|
||||||
send_pkg = FIXTURE_COMMANDS[cmd]
|
send_pkg = FIXTURE_COMMANDS[cmd]
|
||||||
|
|||||||
@@ -144,6 +144,12 @@ function fillFormFromParam(param) {
|
|||||||
document.getElementById("param-fre-max").value = param.FreMax || 0;
|
document.getElementById("param-fre-max").value = param.FreMax || 0;
|
||||||
document.getElementById("param-peak-min").value = param.PeakMin || 0;
|
document.getElementById("param-peak-min").value = param.PeakMin || 0;
|
||||||
document.getElementById("param-peak-max").value = param.PeakMax || 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);
|
const matched = baseTests.find(t => t.type_num === param.DevType);
|
||||||
if (matched) { selectedBaseTest = matched; renderBaseTestTable(); }
|
if (matched) { selectedBaseTest = matched; renderBaseTestTable(); }
|
||||||
}
|
}
|
||||||
@@ -172,6 +178,9 @@ async function saveToDb() {
|
|||||||
SensMin: data.sens_min, SensMax: data.sens_max,
|
SensMin: data.sens_min, SensMax: data.sens_max,
|
||||||
FreMin: data.fre_min, FreMax: data.fre_max,
|
FreMin: data.fre_min, FreMax: data.fre_max,
|
||||||
PeakMin: data.peak_min, PeakMax: data.peak_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();
|
const result = await resp.json();
|
||||||
@@ -197,6 +206,12 @@ function getFormParams() {
|
|||||||
fre_max: parseInt(document.getElementById("param-fre-max").value) || 0,
|
fre_max: parseInt(document.getElementById("param-fre-max").value) || 0,
|
||||||
peak_min: parseInt(document.getElementById("param-peak-min").value) || 0,
|
peak_min: parseInt(document.getElementById("param-peak-min").value) || 0,
|
||||||
peak_max: parseInt(document.getElementById("param-peak-max").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,
|
SensMin: params.sens_min, SensMax: params.sens_max,
|
||||||
FreMin: params.fre_min, FreMax: params.fre_max,
|
FreMin: params.fre_min, FreMax: params.fre_max,
|
||||||
PeakMin: params.peak_min, PeakMax: params.peak_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 {
|
} else {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<label>测试模式</label>
|
<label>测试模式</label>
|
||||||
<select id="param-test-mode">
|
<select id="param-test-mode">
|
||||||
<option value="0">0 - 灵敏度测试模式</option>
|
<option value="0">0 - 灵敏度测试模式</option>
|
||||||
<option value="1">1 - 模拟过车模式</option>
|
<option value="1">1 - 波动测试模式</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -68,6 +68,32 @@
|
|||||||
<label>峰峰值最大值</label>
|
<label>峰峰值最大值</label>
|
||||||
<input type="number" id="param-peak-max" value="0">
|
<input type="number" id="param-peak-max" value="0">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group"><hr style="border-color:#eee; margin:2px 0;"></div>
|
||||||
|
<h4 style="margin:8px 0 4px 0; color:#e67e22; font-size:13px;">⚡ 波动测试参数 (TestMode=1 时生效)</h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>最远容差 (cm)</label>
|
||||||
|
<input type="number" id="param-far-tol" value="0" min="0" max="255">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>最近容差 (cm)</label>
|
||||||
|
<input type="number" id="param-near-tol" value="0" min="0" max="255">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>步进容差 (cm)</label>
|
||||||
|
<input type="number" id="param-step-tol" value="0" min="0" max="255">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>来回次数</label>
|
||||||
|
<input type="number" id="param-back-forth" value="0" min="0" max="255">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>最近停留时间 (ms)</label>
|
||||||
|
<input type="number" id="param-near-stay" value="0" min="0" max="65535">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>最远停留时间 (ms)</label>
|
||||||
|
<input type="number" id="param-far-stay" value="0" min="0" max="65535">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="fixture-actions">
|
<div class="fixture-actions">
|
||||||
|
|||||||
Submodule edc_server updated: 6ecc653133...2d6c9f03dd
Reference in New Issue
Block a user