按规划继续工作

结论:新增 rotary indexer 的 WASM 和浏览器验证,继续通过 vendored LinuxCNC 解释器路径覆盖运行边界。
This commit is contained in:
2026-06-08 11:25:59 +08:00
parent ec3d784f2b
commit d2d0ce8bc1
8 changed files with 85 additions and 5 deletions

View File

@@ -92,6 +92,26 @@ void initialize_minimal_interp(Interp &interp)
std::memcpy(interp._readers, Interp::default_readers, sizeof(Interp::default_readers));
}
void initialize_indexer_interp(Interp &interp)
{
standalone::reset_hal_adapter();
standalone::reset_tool_adapter();
interp._setup.length_units = CANON_UNITS_MM;
interp._setup.distance_mode = DISTANCE_MODE::ABSOLUTE;
interp._setup.ijk_distance_mode = DISTANCE_MODE::ABSOLUTE;
interp._setup.feed_mode = FEED_MODE::UNITS_PER_MINUTE;
interp._setup.plane = CANON_PLANE::XY;
interp._setup.motion_mode = G_0;
interp._setup.percent_flag = false;
interp._setup.sequence_number = 1;
interp._setup.parameter_occurrence = 0;
interp._setup.num_spindles = 1;
interp._setup.a_indexer_jnum = 0;
interp._setup.parameters[5599] = 1.0;
std::memcpy(interp._readers, Interp::default_readers, sizeof(Interp::default_readers));
}
std::vector<std::string> split_program_lines(const char *program_text)
{
std::vector<std::string> lines;
@@ -447,6 +467,24 @@ char *lcinterp_probe_init_and_synch()
return copy_result(output.str());
}
EMSCRIPTEN_KEEPALIVE
char *lcinterp_probe_indexer()
{
Interp interp;
standalone::reset_canon_events();
initialize_indexer_interp(interp);
std::ostringstream output;
const int rc = interp.execute("G0 A90\n");
output << "execute=" << rc << "\n";
output << "post_a=" << interp._setup.AA_current << "\n";
output << "canon_event_count=" << standalone::canon_events().size() << "\n";
for (const auto &event : standalone::canon_events()) {
output << "canon_event=" << event << "\n";
}
return copy_result(output.str());
}
EMSCRIPTEN_KEEPALIVE
void lcinterp_free_string(char *value)
{

View File

@@ -99,5 +99,9 @@ export async function createLinuxCncInterpSdk(moduleOptions = {}) {
probeInitAndSynch() {
return callStringResult(mod, "lcinterp_probe_init_and_synch");
},
probeIndexer() {
return callStringResult(mod, "lcinterp_probe_indexer");
},
};
}