按规划继续工作
结论:新增命名参数直接查找的 WASM 和浏览器验证,继续通过 vendored LinuxCNC find_named_param 路径覆盖 INI/HAL 边界。
This commit is contained in:
@@ -212,6 +212,14 @@ void append_error_text(std::ostringstream &output, Interp &interp, const char *p
|
||||
}
|
||||
}
|
||||
|
||||
void append_named_value(std::ostringstream &output, Interp &interp, const char *name)
|
||||
{
|
||||
int status = 0;
|
||||
double value = 0.0;
|
||||
const int rc = interp.find_named_param(name, &status, &value);
|
||||
output << name << ": rc=" << rc << " found=" << status << " value=" << value << "\n";
|
||||
}
|
||||
|
||||
void apply_parameter_assignments(Interp &interp, const char *assignments)
|
||||
{
|
||||
std::istringstream input(assignments ? assignments : "");
|
||||
@@ -485,6 +493,59 @@ char *lcinterp_probe_indexer()
|
||||
return copy_result(output.str());
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
char *lcinterp_probe_named_parameters(const char *ini_path)
|
||||
{
|
||||
if (ini_path && ini_path[0] != '\0') {
|
||||
setenv("INI_FILE_NAME", ini_path, 1);
|
||||
} else {
|
||||
unsetenv("INI_FILE_NAME");
|
||||
}
|
||||
|
||||
Interp interp;
|
||||
seed_hal_values();
|
||||
interp._setup.feature_set = FEATURE_INI_VARS | FEATURE_HAL_PIN_VARS;
|
||||
interp._setup.length_units = CANON_UNITS_MM;
|
||||
interp._setup.distance_mode = DISTANCE_MODE::ABSOLUTE;
|
||||
interp._setup.motion_mode = G_1;
|
||||
interp._setup.feed_rate = 123.45;
|
||||
interp._setup.speed[0] = 678.9;
|
||||
interp._setup.current_x = 1.25;
|
||||
interp._setup.current_y = 2.5;
|
||||
interp._setup.current_z = 3.75;
|
||||
interp._setup.parameters[interp_param_global::TOOL_NUMBER] = 12.0;
|
||||
|
||||
std::ostringstream output;
|
||||
const int rc = interp.init_named_parameters();
|
||||
output << "init_named_parameters=" << rc << "\n";
|
||||
output << "global_named_count=" << interp._setup.sub_context[0].named_params.size() << "\n";
|
||||
output << "required_parameter_first=" << interp_param_global::G28_X << "\n";
|
||||
output << "readonly_tool_number_index=" << interp_param_global::TOOL_NUMBER << "\n";
|
||||
|
||||
append_named_value(output, interp, "_vmajor");
|
||||
append_named_value(output, interp, "_vminor");
|
||||
append_named_value(output, interp, "_metric_machine");
|
||||
append_named_value(output, interp, "_motion_mode");
|
||||
append_named_value(output, interp, "_metric");
|
||||
append_named_value(output, interp, "_feed");
|
||||
append_named_value(output, interp, "_rpm");
|
||||
append_named_value(output, interp, "_x");
|
||||
append_named_value(output, interp, "_current_tool");
|
||||
append_named_value(output, interp, "_ini[traj]max_linear_velocity");
|
||||
append_named_value(output, interp, "_hal[standalone.pin-bit]");
|
||||
append_named_value(output, interp, "_hal[standalone.signal-float]");
|
||||
append_named_value(output, interp, "_hal[standalone.param-s32]");
|
||||
append_named_value(output, interp, "_hal[standalone.pin-u32]");
|
||||
append_named_value(output, interp, "_hal[standalone.signal-s64]");
|
||||
append_named_value(output, interp, "_hal[standalone.param-u64]");
|
||||
append_named_value(output, interp, "_hal[standalone.disconnected-float]");
|
||||
append_named_value(output, interp, "_hal[standalone.missing]");
|
||||
|
||||
unsetenv("INI_FILE_NAME");
|
||||
standalone::reset_hal_adapter();
|
||||
return copy_result(output.str());
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
void lcinterp_free_string(char *value)
|
||||
{
|
||||
|
||||
@@ -103,5 +103,9 @@ export async function createLinuxCncInterpSdk(moduleOptions = {}) {
|
||||
probeIndexer() {
|
||||
return callStringResult(mod, "lcinterp_probe_indexer");
|
||||
},
|
||||
|
||||
probeNamedParameters(iniPath) {
|
||||
return callStringResult(mod, "lcinterp_probe_named_parameters", iniPath);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user