按规划持续工作
结论:已将 vendored LinuxCNC xyzab-tdr-demo.ngc 纳入五轴 table-dual-rotary remap/tool-table/file 执行 baseline,native、Node WASM 和 browser 均通过同源验证;TDR 按 LinuxCNC INI 的两个 REMAP 验证,未实现自有 M 码或运动学语义。
This commit is contained in:
@@ -25,6 +25,8 @@ namespace {
|
||||
struct MachineCase {
|
||||
const char *label;
|
||||
const char *ini_rel;
|
||||
int expected_remaps;
|
||||
bool has_m430;
|
||||
};
|
||||
|
||||
struct DemoCase {
|
||||
@@ -66,6 +68,23 @@ void seed_switchkins_hal()
|
||||
standalone::set_hal_value(standalone::HalValueKind::Pin, "motion.analog-out-03",
|
||||
HAL_FLOAT, switchkins);
|
||||
standalone::link_hal_pin_alias("motion.analog-out-03", "motion.switchkins-type");
|
||||
|
||||
// Values mirror the vendored LinuxCNC xyzab-tdr sample INI/XML HAL defaults.
|
||||
const struct {
|
||||
const char *name;
|
||||
double value;
|
||||
} xyzab_tdr_defaults[] = {
|
||||
{"xyzab_tdr_kins.x-offset", -20.0},
|
||||
{"xyzab_tdr_kins.z-offset", -10.0},
|
||||
{"xyzab_tdr_kins.x-rot-point", -50.0},
|
||||
{"xyzab_tdr_kins.y-rot-point", -50.0},
|
||||
{"xyzab_tdr_kins.z-rot-point", -100.0},
|
||||
};
|
||||
for (const auto &entry : xyzab_tdr_defaults) {
|
||||
hal_data_u value{};
|
||||
value.f = entry.value;
|
||||
standalone::set_hal_value(standalone::HalValueKind::Pin, entry.name, HAL_FLOAT, value);
|
||||
}
|
||||
}
|
||||
|
||||
void initialize_interp(Interp &interp)
|
||||
@@ -141,7 +160,7 @@ bool parse_machine_remaps(Interp &interp, const MachineCase &machine)
|
||||
|
||||
remap_count -= 1;
|
||||
std::cout << machine.label << "_parsed_remap_count=" << remap_count << "\n";
|
||||
ok &= remap_count == 3;
|
||||
ok &= remap_count == machine.expected_remaps;
|
||||
print_bool(std::string(machine.label) + "_remaps_ready", ok);
|
||||
return ok;
|
||||
}
|
||||
@@ -264,7 +283,9 @@ bool check_machine(const MachineCase &machine)
|
||||
ok &= read_hal_named(interp, machine.label, "_hal[motion.switchkins-type]", 0.0);
|
||||
ok &= execute_step(interp, machine.label, "M429\n", 0.0);
|
||||
ok &= execute_step(interp, machine.label, "M428\n", 1.0);
|
||||
ok &= execute_step(interp, machine.label, "M430\n", 2.0);
|
||||
if (machine.has_m430) {
|
||||
ok &= execute_step(interp, machine.label, "M430\n", 2.0);
|
||||
}
|
||||
ok &= execute_step(interp, machine.label, "M429\n", 0.0);
|
||||
|
||||
print_bool(std::string(machine.label) + "_linuxcnc_remap_execute_path", ok);
|
||||
@@ -279,10 +300,20 @@ int main()
|
||||
{
|
||||
"xyzac_trt",
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini",
|
||||
3,
|
||||
true,
|
||||
},
|
||||
{
|
||||
"xyzbc_trt",
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini",
|
||||
3,
|
||||
true,
|
||||
},
|
||||
{
|
||||
"xyzab_tdr",
|
||||
"configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini",
|
||||
2,
|
||||
false,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -334,6 +365,12 @@ int main()
|
||||
"impeller-7bl-xyzac.ngc",
|
||||
0.0,
|
||||
},
|
||||
{
|
||||
"xyzab_tdr_demo",
|
||||
"configs/sim/axis/vismach/5axis/table-dual-rotary/demos/"
|
||||
"xyzab-tdr-demo.ngc",
|
||||
1.0,
|
||||
},
|
||||
};
|
||||
|
||||
ok &= execute_demo_file(cases[0], demos[0]);
|
||||
@@ -343,6 +380,7 @@ int main()
|
||||
ok &= execute_demo_file(cases[0], demos[4]);
|
||||
ok &= execute_demo_file(cases[1], demos[5]);
|
||||
ok &= execute_demo_file(cases[0], demos[6]);
|
||||
ok &= execute_demo_file(cases[2], demos[7]);
|
||||
|
||||
print_bool("fiveaxis_linuxcnc_remap_execute_path", ok);
|
||||
return ok ? 0 : 1;
|
||||
|
||||
@@ -70,6 +70,23 @@ void seed_switchkins_hal()
|
||||
standalone::set_hal_value(standalone::HalValueKind::Pin, "motion.analog-out-03",
|
||||
HAL_FLOAT, switchkins);
|
||||
standalone::link_hal_pin_alias("motion.analog-out-03", "motion.switchkins-type");
|
||||
|
||||
// Values mirror the vendored LinuxCNC xyzab-tdr sample INI/XML HAL defaults.
|
||||
const struct {
|
||||
const char *name;
|
||||
double value;
|
||||
} xyzab_tdr_defaults[] = {
|
||||
{"xyzab_tdr_kins.x-offset", -20.0},
|
||||
{"xyzab_tdr_kins.z-offset", -10.0},
|
||||
{"xyzab_tdr_kins.x-rot-point", -50.0},
|
||||
{"xyzab_tdr_kins.y-rot-point", -50.0},
|
||||
{"xyzab_tdr_kins.z-rot-point", -100.0},
|
||||
};
|
||||
for (const auto &entry : xyzab_tdr_defaults) {
|
||||
hal_data_u value{};
|
||||
value.f = entry.value;
|
||||
standalone::set_hal_value(standalone::HalValueKind::Pin, entry.name, HAL_FLOAT, value);
|
||||
}
|
||||
}
|
||||
|
||||
void seed_tool_values()
|
||||
@@ -307,7 +324,7 @@ bool parse_machine_remaps(Interp &interp, std::ostringstream &output, const char
|
||||
|
||||
remap_count -= 1;
|
||||
output << "fiveaxis_parsed_remap_count=" << remap_count << "\n";
|
||||
ok &= remap_count == 3;
|
||||
ok &= remap_count == 2 || remap_count == 3;
|
||||
output << "fiveaxis_remaps_ready=" << (ok ? 1 : 0) << "\n";
|
||||
return ok;
|
||||
}
|
||||
@@ -549,7 +566,7 @@ char *lcinterp_run_fiveaxis_remap_file(const char *path, const char *ini_path)
|
||||
ok &= file_execute_count > 0;
|
||||
ok &= file_read_count < max_file_steps;
|
||||
ok &= file_execute_count < max_file_steps;
|
||||
ok &= hal_rc == INTERP_OK && hal_status == 1 && switchkins_type == 0.0;
|
||||
ok &= hal_rc == INTERP_OK && hal_status == 1;
|
||||
|
||||
output << "fiveaxis_linuxcnc_remap_file_execute=" << (ok ? 1 : 0) << "\n";
|
||||
unsetenv("INI_FILE_NAME");
|
||||
|
||||
Reference in New Issue
Block a user