rotation vorbereitung
This commit is contained in:
@@ -21,6 +21,10 @@ async function loadPanel(tab, src) {
|
||||
if (tab === 'camera-npz') initCameraNpz();
|
||||
else if (tab === 'board') initBoard();
|
||||
else if (tab === 'robot-x-axis') initXAxis();
|
||||
else if (tab === 'arm1') initArm('arm1');
|
||||
else if (tab === 'arm2') initArm('arm2');
|
||||
else if (tab === 'elbow') initArm('elbow');
|
||||
else if (tab === 'hand') initArm('hand');
|
||||
|
||||
} catch (err) {
|
||||
document.getElementById('tab-' + tab).innerHTML =
|
||||
@@ -496,6 +500,75 @@ function initXAxis() {
|
||||
}
|
||||
}
|
||||
|
||||
// ── Tabs: Arm1 / Arm2 / Elbow / Hand (generisch) ────────────────────────────
|
||||
// Alle Gelenk-Tabs teilen dieselbe Init-Logik – der Tab-Name (arm1, arm2, …)
|
||||
// wird als Prefix für Element-IDs und Viewer-Frame-ID genutzt.
|
||||
|
||||
function initArm(tab) {
|
||||
const logEl = document.getElementById(`log-${tab}`);
|
||||
const frameEl = document.getElementById(`${tab}-viewer-frame`);
|
||||
const runBtn = document.getElementById(`btn-${tab}-run`);
|
||||
const lastRunEl = document.getElementById(`${tab}-last-run`);
|
||||
|
||||
if (!logEl) return; // Panel noch nicht geladen
|
||||
|
||||
function log(msg) {
|
||||
const ts = new Date().toLocaleTimeString('de-CH');
|
||||
logEl.value += `[${ts}] ${msg}\n`;
|
||||
logEl.scrollTop = logEl.scrollHeight;
|
||||
}
|
||||
|
||||
// "Board erkennen"-Button
|
||||
if (runBtn) {
|
||||
runBtn.addEventListener('click', async () => {
|
||||
log('Board-Erkennung …');
|
||||
runBtn.disabled = true;
|
||||
try {
|
||||
const response = await fetch('/api/board/run', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({}),
|
||||
});
|
||||
if (!response.ok) {
|
||||
const raw = await response.text().catch(() => '');
|
||||
let msg;
|
||||
try { msg = JSON.parse(raw).error || raw; }
|
||||
catch { msg = raw.slice(0, 300) || `HTTP ${response.status}`; }
|
||||
log(`❌ HTTP ${response.status}: ${msg}`);
|
||||
return;
|
||||
}
|
||||
await readSseStream(response, log, (evt) => {
|
||||
if (evt.exitCode === 0) {
|
||||
log('✅ Board-Run abgeschlossen.');
|
||||
if (evt.runDir) {
|
||||
if (lastRunEl) lastRunEl.textContent = evt.runDir;
|
||||
if (frameEl?.contentWindow) frameEl.contentWindow.postMessage({ type: 'reload' }, '*');
|
||||
}
|
||||
} else {
|
||||
log(`❌ Beendet mit Exit-Code ${evt.exitCode}`);
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
log(`❌ Fehler: ${err}`);
|
||||
} finally {
|
||||
runBtn.disabled = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Achsen-Messung vom Viewer empfangen
|
||||
window.addEventListener('message', (e) => {
|
||||
if (!frameEl || e.source !== frameEl.contentWindow) return;
|
||||
const msg = e.data;
|
||||
if (msg?.type === 'yaxis-measurement' && Array.isArray(msg.axisDir)) {
|
||||
const fmt = v => (v >= 0 ? '+' : '') + v.toFixed(3) + '°';
|
||||
log(`📐 Achse (${msg.numMarkers} Marker): dir=[${msg.axisDir.map(v => v.toFixed(4)).join(', ')}]` +
|
||||
` XY=${fmt(msg.tiltXY)} YZ=${fmt(msg.tiltYZ)}`);
|
||||
log(` Referenzpunkt: [${msg.axisPoint.map(v => v.toFixed(1)).join(', ')}] mm`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ── Tab: Board (shared helpers) ───────────────────────────────────────────────
|
||||
|
||||
/** Befüllt alle Set-Dropdowns aus /api/robot/board-sets */
|
||||
|
||||
Reference in New Issue
Block a user