code wiki / _hdl_build / nx_metal_gcode_gate.nx

nx_metal_gcode_gate.nx source

↩ module page · 97 lines · 5112 B

1// nx_metal_gcode_gate.nx -- GATE: 3D-printing workstream R3, metal (WAAM). Completes the material ladder. 2// T1 valid WAAM G-code (arc + wire, no FDM hotend), T2 layers from the steel profile, T3 CARDINAL-26 never- 3// brick (no firmware/EEPROM), T4 WAAM process present (arc on/off + inter-layer cooling dwell), T5 wire feed 4// accumulates, T6 HONEST SAFETY note (real arc-weld run needs operator interlocks), T7 sovereign provenance. 5// license_tier: ORIGINAL 6import "nx_metal_gcode.nx" 7import "nx_print_material.nx" 8import "nx_food_science.nx" 9import "nx_seg_store.nx" 10import "nx_syscalls.nx" 11 12const MG_PRINT: *u8 = "knowledge/store/print-" 13const MG_OUT: *u8 = "knowledge/staging/print/steel_wall.gcode" 14 15func g_p(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 16func g_i(v: i64) -> i64 { 17 let bb: *u8 = sys_mmap(28); var m: i64 = v 18 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 19 let t: *u8 = sys_mmap(28); var k: i64 = 0 20 if m == 0 { t[0] = 48 as u8; k = 1 } 21 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 22 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0 23} 24 25func main() -> i64 { 26 g_p("=== nx_metal_gcode_gate (3D-printing R3: metal WAAM -- completes filament->concrete->METAL) ===\n" as *u8) 27 pm_seed(MG_PRINT) 28 29 let g: *u8 = sys_mmap(262144) 30 let n: i64 = mg_emit(MG_PRINT, 200, 200, 100, g) // 200x200mm footprint, 100mm tall steel wall 31 g_p("emitted " as *u8); g_i(n); g_p(" bytes of WAAM G-code (200x200x100mm steel wall)\n" as *u8) 32 33 var pass: i64 = 0 34 var tot: i64 = 0 35 36 // T1 valid WAAM structure (arc + wire; no FDM hotend) 37 tot = tot + 1 38 var ok1: i64 = 1 39 if as_contains(g, n, "G21" as *u8) != 1 { ok1 = 0 } 40 if as_contains(g, n, "G28" as *u8) != 1 { ok1 = 0 } 41 if as_contains(g, n, "M3 S" as *u8) != 1 { ok1 = 0 } // arc on + wire 42 if as_contains(g, n, "M5" as *u8) != 1 { ok1 = 0 } // arc off 43 if as_contains(g, n, "G1 X" as *u8) != 1 { ok1 = 0 } 44 if as_contains(g, n, "M84" as *u8) != 1 { ok1 = 0 } 45 if as_contains(g, n, "M104" as *u8) != 0 { ok1 = 0 } // no FDM hotend 46 if ok1 == 1 { pass = pass + 1; g_p("PASS T1 valid WAAM G-code (arc + wire feed, no FDM hotend)\n" as *u8) } else { g_p("FAIL T1\n" as *u8) } 47 48 // T2 layers from the steel profile (100mm / 1mm = 100 layers, 0..99) 49 tot = tot + 1 50 var ok2: i64 = 1 51 if as_contains(g, n, ";LAYER:0" as *u8) != 1 { ok2 = 0 } 52 if as_contains(g, n, ";LAYER:99" as *u8) != 1 { ok2 = 0 } 53 if as_contains(g, n, ";LAYER:100" as *u8) != 0 { ok2 = 0 } 54 if ok2 == 1 { pass = pass + 1; g_p("PASS T2 100 layers from the steel profile (1mm beads), indexed 0..99\n" as *u8) } else { g_p("FAIL T2\n" as *u8) } 55 56 // T3 CARDINAL 26 never-brick 57 tot = tot + 1 58 var ok3: i64 = 1 59 if as_contains(g, n, "M997" as *u8) != 0 { ok3 = 0 } 60 if as_contains(g, n, "M500" as *u8) != 0 { ok3 = 0 } 61 if as_contains(g, n, "M502" as *u8) != 0 { ok3 = 0 } 62 if ok3 == 1 { pass = pass + 1; g_p("PASS T3 never-brick: no firmware-flash / EEPROM writes -- emit-only\n" as *u8) } else { g_p("FAIL T3\n" as *u8) } 63 64 // T4 WAAM process: arc on/off + inter-layer COOLING DWELL (the metal-critical step) 65 tot = tot + 1 66 var ok4: i64 = 1 67 if as_contains(g, n, "M3 S150" as *u8) != 1 { ok4 = 0 } 68 if as_contains(g, n, "G4 P2000" as *u8) != 1 { ok4 = 0 } // inter-layer cooling dwell 69 if ok4 == 1 { pass = pass + 1; g_p("PASS T4 WAAM process (arc M3/M5 + G4 inter-layer cooling dwell -- prevents heat buildup)\n" as *u8) } else { g_p("FAIL T4\n" as *u8) } 70 71 // T5 wire feed accumulates (100 layers x 800mm perimeter) 72 tot = tot + 1 73 if as_contains(g, n, "E80000" as *u8) == 1 { pass = pass + 1; g_p("PASS T5 wire feed accumulates to E80000\n" as *u8) } else { g_p("FAIL T5\n" as *u8) } 74 75 // T6 HONEST safety 76 tot = tot + 1 77 var ok6: i64 = 1 78 if as_contains(g, n, "SAFETY" as *u8) != 1 { ok6 = 0 } 79 if as_contains(g, n, "interlocks" as *u8) != 1 { ok6 = 0 } 80 if ok6 == 1 { pass = pass + 1; g_p("PASS T6 honest safety (real arc-weld hardware run requires operator interlocks -- future, gated)\n" as *u8) } else { g_p("FAIL T6\n" as *u8) } 81 82 // T7 sovereign provenance 83 tot = tot + 1 84 var ok7: i64 = 1 85 if as_contains(g, n, "Nishi" as *u8) != 1 { ok7 = 0 } 86 if as_contains(g, n, "NEVER-BRICK" as *u8) != 1 { ok7 = 0 } 87 if ok7 == 1 { pass = pass + 1; g_p("PASS T7 sovereign provenance header\n" as *u8) } else { g_p("FAIL T7\n" as *u8) } 88 89 sys_mkdir("knowledge/staging" as *u8, 0x1ed) 90 sys_mkdir("knowledge/staging/print" as *u8, 0x1ed) 91 let fd: i64 = sys_openat_wr(MG_OUT, 420); if fd >= 0 { sys_write(fd, g, n); sys_close(fd); g_p("wrote " as *u8); g_p(MG_OUT); g_p("\n" as *u8) } 92 93 g_p("nx_metal_gcode_gate pass=" as *u8); g_i(pass); g_p("/" as *u8); g_i(tot) 94 if pass == tot { g_p(" verdict=GREEN (material ladder COMPLETE at G-code: filament -> concrete -> METAL, never-brick)\n" as *u8); return 0 } 95 g_p(" verdict=RED\n" as *u8) 96 return 1 97}