按推荐建议,继续执行

结论:已接入 LinuxCNC NURBS G6 canonical 边界事件记录,并新增 G6.2 回归 fixture;原生 probe 验证通过。
This commit is contained in:
2026-06-07 16:42:30 +08:00
parent 5e31847d6c
commit d40a4b3b60
4 changed files with 39 additions and 1 deletions

View File

@@ -409,6 +409,12 @@ Current verified progress:
`tests/fixtures/gcode/nurbs_g5_semantics.ngc` and `tests/fixtures/gcode/nurbs_g5_semantics.ngc` and
`tests/fixtures/canon/nurbs_g5_semantics.events` pin `G5.2` control-point `tests/fixtures/canon/nurbs_g5_semantics.events` pin `G5.2` control-point
collection and `G5.3` NURBS feed emission. collection and `G5.3` NURBS feed emission.
- `runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_runtime.cpp` now records
NURBS G6 canonical boundary calls emitted by vendored
`interp_convert.cc::convert_nurbs()`: `NURBS_G6_FEED`.
`tests/fixtures/gcode/nurbs_g6_semantics.ngc` and
`tests/fixtures/canon/nurbs_g6_semantics.events` pin `G6.2` order,
interpolation mode, control-point, weight, and K segment handling.
- `tests/fixtures/gcode_errors/g1_zero_feed.ngc` and - `tests/fixtures/gcode_errors/g1_zero_feed.ngc` and
`tests/fixtures/canon_errors/g1_zero_feed.expected` pin the negative `tests/fixtures/canon_errors/g1_zero_feed.expected` pin the negative
`G1` zero-feed case. The source basis is LinuxCNC `G1` zero-feed case. The source basis is LinuxCNC

View File

@@ -471,7 +471,30 @@ void NURBS_G5_FEED(int lineno,
} }
standalone::push_canon_event(oss.str()); standalone::push_canon_event(oss.str());
} }
void NURBS_G6_FEED(int, const std::vector<NURBS_G6_CONTROL_POINT> &, unsigned int, double, int, CANON_PLANE) {} void NURBS_G6_FEED(int lineno,
const std::vector<NURBS_G6_CONTROL_POINT> &control_points,
unsigned int k,
double feedrate,
int interpolation_mode,
CANON_PLANE plane)
{
std::ostringstream oss;
oss << "NURBS_G6_FEED line=" << lineno
<< " k=" << k
<< " feedrate=" << feedrate
<< " interpolation_mode=" << interpolation_mode
<< " plane=" << static_cast<int>(plane)
<< " points=" << control_points.size();
for (std::size_t index = 0; index < control_points.size(); ++index) {
const auto &point = control_points[index];
oss << " p" << index
<< "=(" << point.NURBS_X
<< "," << point.NURBS_Y
<< "," << point.NURBS_R
<< "," << point.NURBS_K << ")";
}
standalone::push_canon_event(oss.str());
}
void COMMENT(const char *s) void COMMENT(const char *s)
{ {

View File

@@ -0,0 +1,4 @@
canon_event=SELECT_PLANE plane=1
canon_event=STRAIGHT_TRAVERSE line=1 x=0 y=0 z=0 a=0 b=0 c=0 u=0 v=0 w=0
canon_event=SET_FEED_RATE rate=50
canon_event=NURBS_G6_FEED line=5 k=2 feedrate=50 interpolation_mode=1 plane=1 points=3 p0=(0,0,1,0) p1=(1,0,1,1) p2=(1,1,1,1)

View File

@@ -0,0 +1,5 @@
G90 G17 G0 X0 Y0 Z0
F50
G6.2 P2 Q1 X0 Y0 R1 K0
G6.2 X1 Y0 R1 K1
G6.2 X1 Y1 R1 K1