Files
KDL_WORK/kdl-wasm/web/app/virtual-controller.html
2026-06-28 20:58:18 +08:00

151 lines
5.7 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ABB120 Virtual Controller</title>
<link rel="stylesheet" href="./virtual-controller.css">
</head>
<body>
<main class="workbench" data-robot="abb_irb120_3_58" data-suite="working2-abb120-spec" data-job="W2-JOB-latest">
<header class="command-bar">
<div class="station-title">
<strong>ABB120 Station</strong>
<span data-field="job">W2-JOB-latest</span>
</div>
<label class="program-picker">
<span>Program</span>
<select data-program-select aria-label="Program"></select>
</label>
<button type="button" data-command="load">Load</button>
<button type="button" data-command="run">Run</button>
<button type="button" data-command="pause">Pause</button>
<button type="button" data-command="step">Step</button>
<button type="button" data-command="stop">Stop</button>
<button type="button" data-command="reset">Reset</button>
<button type="button" data-command="export">Export</button>
<label class="frame-control">
<span>Sample</span>
<input type="range" min="0" max="0" value="0" data-frame-slider aria-label="Execution sample">
<output data-field="frame">0 / 0</output>
</label>
</header>
<aside class="object-tree">
<h2>Station</h2>
<ul data-object-tree>
<li>Robot: abb_irb120_3_58</li>
<li>Tool: tool0</li>
<li>Frame: world</li>
<li>Path: pick_place</li>
<li>Program: W2_60_IOWaitPulse</li>
<li>Suite: working2-abb120-spec</li>
<li>Job: W2-JOB-latest</li>
</ul>
</aside>
<section class="viewport" aria-label="station viewport">
<div class="robot-arm" aria-hidden="true">
<span class="joint j1"></span>
<span class="link l1"></span>
<span class="joint j2"></span>
<span class="link l2"></span>
<span class="joint j3"></span>
<span class="link l3"></span>
<span class="joint j4"></span>
</div>
<svg viewBox="0 0 480 240" role="img" aria-label="path trace">
<path data-path-trace d="M70 170 C150 80 260 80 410 150" fill="none" stroke="#1f7a8c" stroke-width="4"/>
<circle data-path-start cx="70" cy="170" r="6"/>
<circle data-path-current cx="70" cy="170" r="8"/>
<circle data-path-end cx="410" cy="150" r="6"/>
</svg>
</section>
<aside class="pendant">
<h2>Controller</h2>
<dl>
<dt>State</dt><dd data-field="state">ready</dd>
<dt>Program</dt><dd data-field="program">W2_60_IOWaitPulse</dd>
<dt>Mode</dt><dd data-field="mode">auto</dd>
<dt>Motors</dt><dd data-field="motors">on</dd>
<dt>PC</dt><dd data-field="pc">main:0</dd>
<dt>Time</dt><dd data-field="runtime">0 / 0 s @ 50 ms</dd>
<dt>Joints</dt><dd data-field="joints">[0, 0, 0, 0, 0, 0]</dd>
<dt>TCP</dt><dd data-field="tcp">pos [0.374, 0, 0.63] q [0, 0.707107, 0, 0.707107]</dd>
</dl>
</aside>
<section class="editor">
<nav>
<button type="button" data-tab="grl" aria-pressed="true">GRL</button>
<button type="button" data-tab="abb">ABB</button>
<button type="button" data-tab="fanuc">FANUC</button>
<button type="button" data-tab="kuka">KUKA</button>
</nav>
<pre data-field="editor">proc main()
run_path pick_place
end</pre>
</section>
<section class="bottom-panel">
<div><strong>Log</strong><span data-field="log">ready</span></div>
<div><strong>Diagnostics</strong><span data-field="diagnostics">ready</span></div>
<div><strong>IO</strong><span data-field="io">do[1]=false, di[1]=false</span><button type="button" data-io="di1">DI1</button></div>
<div><strong>Wait</strong><span data-field="wait">none</span></div>
<div><strong>Motion Queue</strong><span data-field="queue">empty</span></div>
<div><strong>Trace</strong><span data-field="trace">0 events</span></div>
<div><strong>Reports</strong><span data-field="reports">W2-REPORT</span></div>
<div><strong>Parser</strong><span data-field="parser">idle</span><progress data-parser-progress max="1" value="0" aria-label="Parser progress"></progress></div>
<div><strong>Storage</strong><span data-field="storage">checking browser storage</span></div>
<div class="steps-panel">
<strong>Program Steps</strong>
<span data-field="step-status">step 0</span>
<div class="steps-table-wrap">
<table>
<thead>
<tr>
<th>#</th>
<th>Time</th>
<th>Line</th>
<th>Step</th>
<th>Source</th>
<th>Motion/Target</th>
<th>Samples</th>
</tr>
</thead>
<tbody data-step-table></tbody>
</table>
</div>
</div>
<div class="trajectory-panel">
<strong>Trajectory Frames</strong>
<span data-field="frame-time">t=0 s</span>
<div class="trajectory-table-wrap">
<table>
<thead>
<tr>
<th>#</th>
<th>t</th>
<th>Motion</th>
<th>Target</th>
<th>TCP XYZ</th>
<th>TCP Q</th>
<th>J1</th>
<th>J2</th>
<th>J3</th>
<th>J4</th>
<th>J5</th>
<th>J6</th>
</tr>
</thead>
<tbody data-frame-table></tbody>
</table>
</div>
</div>
</section>
</main>
<script src="./virtual-controller.js"></script>
</body>
</html>