Dies ist das Handbuch zu Studio 1.1.0, einer früheren Version. Das Handbuch der neuesten Version
Dokumentation 1.1.0 Referenz
Diese Referenz wird aus dem Programm erzeugt und ist nur auf Englisch.
Machine profile schema: MC-1
Every key of the machine archive the twin is built from (24 sections), with the value the MC-1's archive gives - for the twin's internal error model (accuracy, the coupling's play, and where their values come from) the keys only. The values are the model's parameters - typical values until a machine is measured - not specifications of the machine and not its accuracy; every number the twin gives about the physical world is an estimate.
schema
the archive format and its version
| key | type | unit | value | what it is |
|---|---|---|---|---|
schema | string | "mc1-machine/0.1" |
generated
what made this archive, from which inputs (hashes of params.py and wiring.py)
| key | type | unit | value | what it is |
|---|---|---|---|---|
generated.by | string | "twin/gen/gen_machine.py" | ||
generated.params_sha256 | string | "b0e4925cf5845ce9c1a300d48cdf6dc7dc94381a2b11a6d1830091c8… | ||
generated.wiring_sha256 | string | "4f378185683bcbd33fb0a42e8fa2b79e93474c861a9a2f76da1e7ee1… | ||
generated.report_json | object | the design checks' report the archive was made from: its path and when it was written | ||
generated.report_json.path | string | "out/report.json" | ||
generated.report_json.modified | string | "2026-10-11T06:10:28" |
units
the base units
| key | type | unit | value | what it is |
|---|---|---|---|---|
units.length | string | "mm" | ||
units.mass | string | "kg" | ||
units.time | string | "s" |
name
| key | type | unit | value | what it is |
|---|---|---|---|---|
name | string | "MC-1" |
coordinates
the machine coordinate frame in words (MPos = machine - home offset)
| key | type | unit | value | what it is |
|---|---|---|---|---|
coordinates | string | "machine X 0..200 left to right, Y 0..150 tool relative t… |
power_on_pos
where the axes stand at power-on, machine mm (X, Y, Z)
axes
the three linear axes, in the order X, Y, Z
| key | type | unit | value | what it is |
|---|---|---|---|---|
axes[].id | string | "X" | ||
axes[].moves | string | "X carriage with the Z axis and spindle" | ||
axes[].travel | array (2) | [0.0, 200.0] | the axis' travel [min, max], machine mm | |
axes[].home_dir | string | "+" | the direction homing seeks its switch | |
axes[].steps_per_mm | number | per mm | 800.0 | steps per mm (the controller's $100-$102) |
axes[].dir_sign | number | -1 | +1: the motor's positive direction is the axis' positive direction | |
axes[].direction | object | which way the motor turns the screw and the axis moves: for the drive model and the wiring's polarity | ||
axes[].direction.motor_end | string | "+" | ||
axes[].direction.screw_hand | string | "right" | ||
axes[].direction.dir_low_turns | string | "cw (seen from the shaft end; assumed)" | ||
axes[].direction.machine_per_model | number | 1 | ||
axes[].direction.dir_low_moves | number | -1 | ||
axes[].switch | object | the axis' limit / home switches: position, contact, sensor physics | ||
axes[].switch.min | number | -2.0 | ||
axes[].switch.max | number | 202.0 | ||
axes[].switch.contact | string | "NC" | ||
axes[].switch.inputs | string | "separate" | ||
axes[].switch.type | string | "M8 inductive NPN NC, Sn 2.0 mm" | ||
axes[].switch.sn_mm | number | mm | 2.0 | |
axes[].switch.gap_design_mm | number | mm | 1.0 | |
axes[].switch.gap_mm | array (2) | mm | [1.0, 1.0] | |
axes[].switch.spot_r_cad_mm | number | mm | 3.0 | |
axes[].switch.anchor | string | "cad" | ||
axes[].switch.target | array (2) | ["steel", "steel"] | ||
axes[].switch.unit_sr | array (2) | [1.0, 1.0] | ||
axes[].switch.lambda_mm | number | mm | 0.7 | ---------------------------------------------------------------- limit sensors and wiring The inductive sensors' switching model follows research note F (1.3, 1.4, 7): the flag sweeps across the sensing face at gap g; the damping of the oscillator is D(g, e) = exp(-g / lambda) * F(e / w) with a logistic coverage F, and the sensor switches when it reaches the damping of a target at distance Sr straight in front: F(e_on / w) = exp(-(Sr - g) / lambda). e_on is the flag edge's position relative to the sensor axis. Sr = Sn * material factor * unit spread * (1 + tc * (T - 20 C)). The CAD places the sensors for an idealised sensing spot of radius SENSE_R (e_on = -SENSE_R): "anchor": "cad" keeps the designed switch points for the nominal sensor and moves them by what the model predicts for other gaps, materials, units and temperatures; "anchor": "model" uses the model's switch point outright (about 1.9 mm later: the design review's sensitivity case). All values unverified until measured (F 7). |
axes[].switch.w_mm | number | mm | 1.0 | |
axes[].switch.hyst_mm | number | mm | 0.15 | |
axes[].switch.response_ms | number | ms | 1.0 | |
axes[].switch.jitter_ms | number | ms | 0.25 | |
axes[].switch.repeat_sigma_mm | number | mm | 0.003 | |
axes[].switch.temp_c | number | °C | 20.0 | |
axes[].switch.temp_coeff_per_k | number | 1/K | 0.0 | |
axes[].switch.ready_ms | number | ms | 30.0 | IEC 60947-5-2 "time delay before availability": after its supply comes up the output stays off (F 5: 30 ms); the controller boots later (controller.boot_ms), so it never sees it (unverified) |
axes[].hard_stop | array (2) | [-9.02, 210.02] | where the moving part hits the frame [min, max], machine mm | |
axes[].moving_mass_kg | number | kg | 13.87 |
sensor_materials
inductive sensors: switching distance reduction factor by target material
| key | type | unit | value | what it is |
|---|---|---|---|---|
sensor_materials.steel | number | 1.0 | ||
sensor_materials.stainless | number | 0.7 | ||
sensor_materials.brass | number | 0.45 | ||
sensor_materials.aluminium | number | 0.4 | ||
sensor_materials.copper | number | 0.35 |
wires
the field wiring by signal: the controller input, cable, route and length
| key | type | unit | value | what it is |
|---|---|---|---|---|
wires.x_min | object | one signal's wire: the controller input, the cable, its route and length, and the cable chains it bends in (flex) | ||
wires.x_min.input | string | "X_LIMIT" | ||
wires.x_min.cable | string | "W09" | ||
wires.x_min.route | string | "固定,横梁后侧" | ||
wires.x_min.length_mm | number | mm | 728.0 | |
wires.x_min.flex | string | "" | ||
wires.x_max | object | |||
wires.x_max.input | string | "X_LIMIT_MAX" | ||
wires.x_max.cable | string | "W10" | ||
wires.x_max.route | string | "固定,横梁后侧" | ||
wires.x_max.length_mm | number | mm | 488.0 | |
wires.x_max.flex | string | "" | ||
wires.y_min | object | |||
wires.y_min.input | string | "Y_LIMIT" | ||
wires.y_min.cable | string | "W12" | ||
wires.y_min.route | string | "固定,底板下方" | ||
wires.y_min.length_mm | number | mm | 167.0 | |
wires.y_min.flex | string | "" | ||
wires.y_max | object | |||
wires.y_max.input | string | "Y_LIMIT_MAX" | ||
wires.y_max.cable | string | "W11" | ||
wires.y_max.route | string | "固定,底板下方" | ||
wires.y_max.length_mm | number | mm | 212.0 | |
wires.y_max.flex | string | "" | ||
wires.z_switch | object | |||
wires.z_switch.input | string | "Z_LIMIT" | ||
wires.z_switch.cable | string | "W08" | ||
wires.z_switch.route | string | "Z 随动线束 + X 拖链,与主轴线分开绑扎" | ||
wires.z_switch.length_mm | number | mm | 1493.0 | |
wires.z_switch.flex | string | "XZ" | ||
wires.setter | object | |||
wires.setter.input | string | "PROBE" | ||
wires.setter.cable | string | "W13" | ||
wires.setter.route | string | "Y 拖链" | ||
wires.setter.length_mm | number | mm | 1274.0 | |
wires.setter.flex | string | "Y" | ||
wires.alm | object | |||
wires.alm.input | string | "MOTOR_FAULT" | ||
wires.alm.cable | string | "" | ||
wires.alm.route | string | "电控箱内:三台驱动器 ALM 与变频器故障继电器串联" | ||
wires.alm.length_mm | number | mm | 0.0 | |
wires.alm.flex | string | "" | ||
wires.estop | object | |||
wires.estop.input | string | "E-STOP" | ||
wires.estop.cable | string | "" | ||
wires.estop.route | string | "电控箱:急停 SB0 第二组常闭(SB0-2)" | ||
wires.estop.length_mm | number | mm | 0.0 | |
wires.estop.flex | string | "" | ||
wires.estop_km1 | object | |||
wires.estop_km1.input | string | "" | ||
wires.estop_km1.cable | string | "" | ||
wires.estop_km1.route | string | "电控箱:急停 SB0 第一组常闭(SB0-1),在 KM1 线圈的自锁回路里" | ||
wires.estop_km1.length_mm | number | mm | 0.0 | |
wires.estop_km1.flex | string | "" | ||
wires.rs485 | object | |||
wires.rs485.input | string | "RS485" | ||
wires.rs485.cable | string | "" | ||
wires.rs485.route | string | "电控箱内:控制板 RS485 A/B → 变频器 RS+/RS-,屏蔽双绞线" | ||
wires.rs485.length_mm | number | mm | 0.0 | |
wires.rs485.flex | string | "" | ||
wires.vfd_relay | object | |||
wires.vfd_relay.input | string | "MOTOR_FAULT" | ||
wires.vfd_relay.cable | string | "" | ||
wires.vfd_relay.route | string | "电控箱内:变频器故障继电器的常闭触点 TB–TC,串在 ALM 链里(发现 107)" | ||
wires.vfd_relay.length_mm | number | mm | 0.0 | |
wires.vfd_relay.flex | string | "" |
faults
wiring fault models (glitches, intermittent contacts)
| key | type | unit | value | what it is |
|---|---|---|---|---|
faults.glitch_us | number | µs | 50.0 | injected faults: a glitch opens the contact this long; an intermittent wire drops out while its cable flexes (per metre of travel of the axes it follows), for a random time |
faults.intermittent | object | an intermittent wire: it drops out while its cable flexes, so often per metre of travel of the axes it follows, each time for a random time in the range (ms) | ||
faults.intermittent.per_m | number | per m | 5.0 | |
faults.intermittent.ms | array (2) | [0.2, 3.0] |
drives
the feed drives: ball screws, closed-loop steppers, their power (KM1), the L1/L2 models
| key | type | unit | value | what it is |
|---|---|---|---|---|
drives.model | string | "L1" | ||
drives.note | string | "rigid axis driven by a closed-loop stepper: magnetic spr… | ||
drives.lead_mm | number | mm | 4.0 | |
drives.motor | object | the stepper motor: holding torque, rotor inertia, steps, detent torque, phase resistance and inductance, torque constant, rated current, iron loss | ||
drives.motor.type | string | "NEMA23 closed-loop hybrid stepper, 23HS22-2804D-E1000 cl… | ||
drives.motor.holding_nm | number | N·m | 1.26 | |
drives.motor.rotor_inertia_kgm2 | number | kg·m² | 3e-05 | |
drives.motor.full_steps_per_rev | number | per revolution | 200 | |
drives.motor.detent_nm | number | N·m | 0.05 | |
drives.motor.power_up_jump | boolean | true | the drive's first current after a power-up (its phase reset): the rotor snaps to the nearest stable position of that state, up to two full steps either way (architecture 4.4; unverified on the drive) | |
drives.motor.phase_resistance_ohm | number | Ω | 0.9 | L3 (research note D, L3): the phases - R and L of the 2.8 A class (typical catalogue values, unverified), the torque constant fitted to the 48 V pull-out plateau (0.8 N m at 2.8 A; the 1.26 N m holding torque is both phases at rated current), the detent's amplitude as above |
drives.motor.phase_inductance_mh | number | mH | 2.9 | |
drives.motor.torque_constant_nm_a | number | N·m/A | 0.286 | |
drives.motor.rated_current_a | number | A | 2.8 | |
drives.motor.iron_loss_nm_per_krpm | number | N·m per 1000 rpm | 0.0377 | the laminations' hysteresis and eddy losses as a drag growing with speed: fitted so that L3 on its dynamometer gives the 48 V pull-out curve above (9 W at 1500 rpm; to be measured, architecture 7.3 step 8) |
drives.coupling_inertia_kgm2 | number | kg·m² | 2.6e-06 | |
drives.pullout_48v_rpm_nm | array (9) | rpm/(N·m) | ||
drives.drive | object | the closed-loop drive: encoder counts, holding current, damping, the following error it alarms at and how that alarm is reset, current loop, DC bus, the L3 sub-steps | ||
drives.drive.type | string | "CL57T class closed-loop drive, 48 V" | ||
drives.drive.loop | string | "closed" | ||
drives.drive.encoder_counts_per_rev | number | per revolution | 4000 | |
drives.drive.holding_current | number | 0.5 | ||
drives.drive.damping_ratio | number | 0.5 | ||
drives.drive.smoothing_ms | number | ms | 0.0 | |
drives.drive.following_error_limit_counts | number | 400 | ||
drives.drive.alarm_reset | string | "power" | ||
drives.drive.open_loop_below_rpm | number | rpm | 0 | |
drives.drive.current_loop_hz | number | Hz | 2000.0 | then only the holding current at standstill (0: always closed) L3: its current loop's bandwidth, its bus capacitance and overvoltage alarm (assumed), 5 us steps |
drives.drive.bus_capacitance_uf | number | µF | 470.0 | |
drives.drive.overvoltage_v | number | V | 60.0 | |
drives.drive.l3_sub_steps | number | 20 | ||
drives.drive.max_phase_advance_deg | number | ° | 0.0 | |
drives.alm | object | the alarm chain: the drives' ALM outputs and the spindle drive's fault relay in series to the controller's motor-fault input | ||
drives.alm.wired | boolean | true | ||
drives.alm.vfd_relay | boolean | true | ||
drives.alm.chain | string | "the three ALM outputs and the VFD's fault relay (its mul… | ||
drives.power | object | the drives' supply: the 48 V supply behind the contactor KM1, its timing, the supply's hold-up and rise, the drives' boot | ||
drives.power.source | string | "PSU1 48 V behind KM1 (drives, VFD); the 24 V supply befo… | ||
drives.power.km1 | string | "24 V DC coil, latched by the START button SB1 through it… | ||
drives.power.km1_latched | boolean | true | ||
drives.power.km1_drop_ms | number | ms | 15 | |
drives.power.km1_pickup_ms | number | ms | 25 | |
drives.power.psu_holdup_ms | number | ms | 40 | |
drives.power.psu_rise_ms | number | ms | 150 | |
drives.power.drive_boot_ms | number | ms | 800 | |
drives.step_s | number | s | 0.0001 | |
drives.l2 | object | L2 (--drive L2): the axial chain between the motor side and the table - stiffness by the nut's distance from its BK bearing (the design's hand calculation at 100 N), the nut's play (the accuracy section's backlash), modal damping assumed; integrated in sub-steps of step_s. The drive's current loop (lag) and velocity loop (damping of the motor side on its magnetic spring) are assumed: a closed-loop drive is tuned not to overshoot - fit both to encoder logs (architecture 7.3 step 1) The nut's play closes with an impact: the grease film makes it strongly damped at a few mm/s (Hunt-Crossley damping, growing with the penetration; restitution assumed) | ||
drives.l2.zeta_axial | number | 0.03 | ||
drives.l2.sub_steps | number | 5 | ||
drives.l2.current_lag_ms | number | ms | 0.2 | |
drives.l2.servo_damping_ratio | number | 0.7 | ||
drives.l2.smoothing_ms | number | ms | 1.0 | |
drives.l2.contact_restitution | number | 0.0 | ||
drives.l2.impact_speed_mm_s | number | mm/s | 5.0 | |
drives.l2.masses | number | 3 | three masses (note D, L2): the coupling's mode sits near 1.75 kHz - 20 sub-steps of 5 us; its damping assumed; the friction model of guides and nut: "karnopp" (Stribeck + viscous with a stick band) or "lugre" (pre-sliding, friction lag at reversals) | |
drives.l2.sub_steps_3 | number | 20 | ||
drives.l2.zeta_coupling | number | 0.05 | ||
drives.l2.friction | string | "karnopp" | ||
drives.l2.stribeck_ratio | number | 1.25 | ||
drives.l2.stribeck_v_mm_s | number | mm/s | 2.0 | |
drives.l2.viscous_n_s_mm | number | N·s/mm | 0.02 | |
drives.l2.lugre_sigma0_n_um | number | N/µm | 10.0 | |
drives.axes | array (3) | per axis (X, Y, Z): screw, inertias, masses, friction, the L2 elastic model | ||
drives.axes[].id | string | "X" | ||
drives.axes[].screw_length_mm | number | mm | 327.0 | |
drives.axes[].screw_inertia_kgm2 | number | kg·m² | 3.347015168018846e-06 | |
drives.axes[].rotating_inertia_kgm2 | number | kg·m² | 3.594701516801885e-05 | |
drives.axes[].moving_mass_kg | number | kg | 13.87 | |
drives.axes[].equivalent_mass_kg | number | kg | 102.56570477707619 | |
drives.axes[].gravity_n | number | N | 0.0 | |
drives.axes[].friction_n | number | N | 57.06814860384689 | |
drives.axes[].l2 | object | the axis in the L2 drive model (--drive L2): the masses, the axial and torsional stiffness by the nut's distance from the fixed bearing, friction, the coupling, the frame under the bearing | ||
drives.axes[].l2.rotating_mass_kg | number | kg | 88.69570477707619 | |
drives.axes[].l2.table_mass_kg | number | kg | 13.87 | |
drives.axes[].l2.k_axial_n_um | array (2) | N/µm | ||
drives.axes[].l2.friction_motor_n | number | N | 47.12388980384689 | |
drives.axes[].l2.friction_table_n | number | N | 9.9442588 | |
drives.axes[].l2.motor_mass_kg | number | kg | 77.22965443852422 | three masses: the rotor with half the coupling, the screw with the other half, the table |
drives.axes[].l2.screw_mass_kg | number | kg | 11.46605033855195 | |
drives.axes[].l2.coupling_n_um | number | N/µm | 1189.2873303312676 | |
drives.axes[].l2.torsion_gj_nmm2 | number | N·mm² | 64770810.92360646 | the screw's torsion from the coupling to the nut: its root section's G J over the BK journal, the drive journal (as lengths of root section) and the distance BK -> nut |
drives.axes[].l2.torsion_extra_mm | number | mm | 61.593853491210936 | |
drives.axes[].l2.k_rest_n_um | array (2) | N/µm | the axial chain without the nut (shaft, BK, mount), by the nut's distance from the BK | |
drives.axes[].l2.nut_hertz_n_um15 | number | N/µm^1.5 | 31.87940238298543 | |
drives.axes[].l2.frame | object | the frame under the axis' fixed bearing as one mode along the axis: stiffness, mass, damping | ||
drives.axes[].l2.frame.k_n_um | number | N/µm | 33.2 | |
drives.axes[].l2.frame.m_kg | number | kg | 17.66 | |
drives.axes[].l2.frame.zeta | number | 0.02 |
drives.axes[].l2.coupling_play_um
The coupling's play, part of the twin's internal error model like the backlash: its value is not published.
| key | type | unit | what it is |
|---|---|---|---|
drives.axes[].l2.coupling_play_um | number | µm |
accuracy
geometric and thermal errors of the tool relative to the work (Phase 4)
The twin's internal error-model parameters, off by default; their values are not published.
| key | type | unit | what it is |
|---|---|---|---|
accuracy.enabled | boolean | ||
accuracy.note | string | ||
accuracy.units | string | ||
accuracy.sign | string | ||
accuracy.axes | object | ||
accuracy.axes.X | object | ||
accuracy.axes.X.lead_um | array (45) | µm | |
accuracy.axes.X.periodic_um | number | µm | |
accuracy.axes.X.periodic_mm | number | mm | |
accuracy.axes.X.periodic_phase | number | ||
accuracy.axes.X.straight_um | object | µm | |
accuracy.axes.X.straight_um.Y | array (45) | ||
accuracy.axes.X.straight_um.Z | array (45) | ||
accuracy.axes.X.angle_urad | object | µrad | |
accuracy.axes.X.angle_urad.A | array (45) | ||
accuracy.axes.X.angle_urad.B | array (45) | ||
accuracy.axes.X.angle_urad.C | array (45) | ||
accuracy.axes.X.backlash_um | number | µm | |
accuracy.axes.X.gravity_loaded | boolean | ||
accuracy.axes.Y | object | ||
accuracy.axes.Y.lead_um | array (35) | µm | |
accuracy.axes.Y.periodic_um | number | µm | |
accuracy.axes.Y.periodic_mm | number | mm | |
accuracy.axes.Y.periodic_phase | number | ||
accuracy.axes.Y.straight_um | object | µm | |
accuracy.axes.Y.straight_um.X | array (35) | ||
accuracy.axes.Y.straight_um.Z | array (35) | ||
accuracy.axes.Y.angle_urad | object | µrad | |
accuracy.axes.Y.angle_urad.A | array (35) | ||
accuracy.axes.Y.angle_urad.B | array (35) | ||
accuracy.axes.Y.angle_urad.C | array (35) | ||
accuracy.axes.Y.backlash_um | number | µm | |
accuracy.axes.Y.gravity_loaded | boolean | ||
accuracy.axes.Z | object | ||
accuracy.axes.Z.lead_um | array (21) | µm | |
accuracy.axes.Z.periodic_um | number | µm | |
accuracy.axes.Z.periodic_mm | number | mm | |
accuracy.axes.Z.periodic_phase | number | ||
accuracy.axes.Z.straight_um | object | µm | |
accuracy.axes.Z.straight_um.X | array (21) | ||
accuracy.axes.Z.straight_um.Y | array (21) | ||
accuracy.axes.Z.angle_urad | object | µrad | |
accuracy.axes.Z.angle_urad.A | array (21) | ||
accuracy.axes.Z.angle_urad.B | array (21) | ||
accuracy.axes.Z.angle_urad.C | array (21) | ||
accuracy.axes.Z.backlash_um | number | µm | |
accuracy.axes.Z.gravity_loaded | boolean | ||
accuracy.square_urad | object | µrad | |
accuracy.square_urad.xy | number | ||
accuracy.square_urad.xz | number | ||
accuracy.square_urad.yz | number | ||
accuracy.abbe | object | Abbe arms: where each axis' angular errors are referred to (params.py geometry, model frame: y towards the beam, z up from the base top; the reference tool tip is at z = tip_z0 + Z) | |
accuracy.abbe.tip_z0 | number | ||
accuracy.abbe.X | object | ||
accuracy.abbe.X.y | number | ||
accuracy.abbe.X.z | number | ||
accuracy.abbe.Z | object | ||
accuracy.abbe.Z.y | number | ||
accuracy.abbe.Z.dz | number | ||
accuracy.abbe.Y | object | ||
accuracy.abbe.Y.x | number | ||
accuracy.abbe.Y.y | number | ||
accuracy.abbe.Y.z | number | ||
accuracy.thermal | object | ||
accuracy.thermal.alpha_um_m_k | number | µm/(m·K) | |
accuracy.thermal.screw_dt_k | array (3) | K | |
accuracy.thermal.bk_at | array (3) | ||
accuracy.thermal.spindle_growth_um | number | µm | |
accuracy.thermal.dynamic | object | first-order dynamics (research note D 8 T-layer, "second version"): each screw warmed by its nut and BK drag times its speed through a thermal resistance, the spindle grown by its bearings (by speed) and its motor's copper (by current) - time constants and gains assumed, to be fitted to a 2 h warm-up log (architecture 7.3 step 14); off unless asked for (the static offsets above, and %thermal, stay as set) | |
accuracy.thermal.dynamic.enabled | boolean | ||
accuracy.thermal.dynamic.screw_k_per_w | number | K/W | |
accuracy.thermal.dynamic.screw_tau_s | number | s | |
accuracy.thermal.dynamic.spindle_um_per_w | number | µm/W | |
accuracy.thermal.dynamic.spindle_tau_s | number | s | |
accuracy.thermal.dynamic.spindle_bearing_w_at_24000 | number | W | |
accuracy.thermal.dynamic.spindle_copper_w_rated | number | W | |
accuracy.thermal.frame | object | ||
accuracy.thermal.frame.alpha_um_m_k | number | µm/(m·K) | |
accuracy.thermal.frame.dt_k | number | K | |
accuracy.thermal.frame.tool_to_table_um_k | number | µm/K | |
accuracy.thermal.frame.capacity_j_k | number | J/K | |
accuracy.thermal.frame.g_w_k | number | W/K | |
accuracy.thermal.frame.motors_w | number | W | |
accuracy.thermal.frame.spindle_share | number | ||
accuracy.thermal.ambient_dt_k | number | K | the room above the reference (20 C): the frame follows it (at once without the dynamics) |
accuracy.thermal.part | object | the workpiece (research note L 8): 10-25 % of the cutting power goes into it (0.15 taken), out through the fixture - 0.2 K/W with good contact (vise, clamps), 1 K/W on tape or lying loose | |
accuracy.thermal.part.heat_share | number | ||
accuracy.thermal.part.g_good_w_k | number | W/K | |
accuracy.thermal.part.g_poor_w_k | number | W/K | |
accuracy.source | string |
spindle
the spindle drive: the Huanyang VFD (HY protocol, PD parameters), the motor, the pump
| key | type | unit | value | what it is |
|---|---|---|---|---|
spindle.vfd | object | the spindle drive (Huanyang HY series): rating, supply, the RS-485 port and the HY protocol, timing, the DC bus and its protection levels, its parameters | ||
spindle.vfd.model | string | "Huanyang HY01D523B (HY series)" | ||
spindle.vfd.rated_power_w | number | W | 1500 | |
spindle.vfd.rated_current_a | number | A | 7.0 | |
spindle.vfd.supply | string | "1 x 220 V through KM1 (build.py ELECTRICAL)" | ||
spindle.vfd.port | string | "RS-485 to RS+/RS-/DCM (wiring.py PIN_MAP 主轴)" | ||
spindle.vfd.protocol | string | "HY: address, function, length, data, CRC-16 (Huanyang v1)" | ||
spindle.vfd.reply_latency_ms | number | ms | 5.0 | |
spindle.vfd.min_gap_ms | number | ms | 5.0 | |
spindle.vfd.boot_s | number | s | 1.5 | |
spindle.vfd.bus_capacitance_uf | number | µF | 680.0 | |
spindle.vfd.lu_v | number | V | 200.0 | DC bus: without mains it feeds the control and the motor until undervoltage (LU: output off), then the control's own supply stops below control_off_v |
spindle.vfd.control_off_v | number | V | 100.0 | |
spindle.vfd.control_w | number | W | 15.0 | |
spindle.vfd.oc_factor | number | 2.0 | ||
spindle.vfd.overload_factor | number | 1.5 | ||
spindle.vfd.overload_s | number | s | 60.0 | |
spindle.vfd.dc_bus_v | number | V | 311.0 | |
spindle.vfd.factory | object | the drive's PD parameters as they leave the factory (its manual) | ||
spindle.vfd.factory.PD000 | number | 0 | ||
spindle.vfd.factory.PD001 | number | 0 | ||
spindle.vfd.factory.PD002 | number | 0 | ||
spindle.vfd.factory.PD004 | number | 50.0 | ||
spindle.vfd.factory.PD005 | number | 50.0 | ||
spindle.vfd.factory.PD006 | number | 2.5 | ||
spindle.vfd.factory.PD007 | number | 0.5 | ||
spindle.vfd.factory.PD008 | number | 220.0 | ||
spindle.vfd.factory.PD009 | number | 15.0 | ||
spindle.vfd.factory.PD010 | number | 8.0 | ||
spindle.vfd.factory.PD011 | number | 0.0 | ||
spindle.vfd.factory.PD014 | number | 10.0 | ||
spindle.vfd.factory.PD015 | number | 10.0 | ||
spindle.vfd.factory.PD026 | number | 0 | ||
spindle.vfd.factory.PD119 | number | 150 | ||
spindle.vfd.factory.PD141 | number | 220.0 | ||
spindle.vfd.factory.PD142 | number | 7.0 | ||
spindle.vfd.factory.PD143 | number | 4 | ||
spindle.vfd.factory.PD144 | number | 1440 | ||
spindle.vfd.factory.PD163 | number | 0 | ||
spindle.vfd.factory.PD164 | number | 1 | ||
spindle.vfd.factory.PD165 | number | 0 | ||
spindle.vfd.factory.PD118 | number | 1 | the protection and compensation group as the twin reads it (numbers and meanings from the manual's list, unverified on the unit): PD118 overvoltage stall prevention (1 on: the decel ramp waits while the DC bus is high), PD120 stall prevention level at constant speed (% of PD142), PD121 its deceleration time (s), PD123 over-torque detection (0 off, 1 warn at constant speed, 2 trip), PD124 its level (% of PD142), PD125 its time (s), PD147 slip compensation (% of the rated slip made up at rated current; 0 off) | |
spindle.vfd.factory.PD120 | number | 150 | ||
spindle.vfd.factory.PD121 | number | 5.0 | ||
spindle.vfd.factory.PD123 | number | 0 | ||
spindle.vfd.factory.PD124 | number | 150 | ||
spindle.vfd.factory.PD125 | number | 0.1 | ||
spindle.vfd.factory.PD147 | number | 0 | ||
spindle.vfd.factory.PD041 | number | 8 | PD041 the PWM carrier: 0-15 for 0.7, 1, 1.5, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 15, 17, 20 kHz; the manual's factory value for the A01D523B (the HY01D523B) is 8 = 8 kHz (research note N 2.3). Only the sound uses it | |
spindle.vfd.params | object | the PD parameters commissioning sets (the design's table wiring.VFD_PARAMS) | ||
spindle.vfd.params.PD001 | number | 2 | ||
spindle.vfd.params.PD002 | number | 2 | ||
spindle.vfd.params.PD004 | number | 400.0 | ||
spindle.vfd.params.PD005 | number | 400.0 | ||
spindle.vfd.params.PD006 | number | 20.0 | ||
spindle.vfd.params.PD007 | number | 0.5 | ||
spindle.vfd.params.PD008 | number | 220.0 | ||
spindle.vfd.params.PD009 | number | 16.0 | ||
spindle.vfd.params.PD010 | number | 4.0 | ||
spindle.vfd.params.PD011 | number | 100.0 | ||
spindle.vfd.params.PD014 | number | 6.0 | ||
spindle.vfd.params.PD015 | number | 6.0 | ||
spindle.vfd.params.PD141 | number | 220.0 | ||
spindle.vfd.params.PD142 | number | 5.0 | ||
spindle.vfd.params.PD143 | number | 2 | ||
spindle.vfd.params.PD144 | number | 3000 | ||
spindle.vfd.params.PD163 | number | 1 | ||
spindle.vfd.params.PD164 | number | 2 | ||
spindle.vfd.params.PD165 | number | 3 | ||
spindle.motor | object | the spindle motor, an induction motor: rating, poles, slip, breakdown torque, no-load current, inertia, friction | ||
spindle.motor.model | string | "GDZ65-800" | ||
spindle.motor.rated_power_w | number | W | 800.0 | |
spindle.motor.rated_voltage_v | number | V | 220.0 | |
spindle.motor.rated_current_a | number | A | 5.0 | |
spindle.motor.rated_freq_hz | number | Hz | 400.0 | |
spindle.motor.poles | number | 2 | ||
spindle.motor.rated_rpm | number | rpm | 24000.0 | |
spindle.motor.rated_slip | number | 0.04 | ||
spindle.motor.breakdown_torque_ratio | number | 2.0 | ||
spindle.motor.no_load_current_a | number | A | 2.0 | |
spindle.motor.inertia_kgm2 | number | kg·m² | 8e-05 | |
spindle.motor.friction_nm | number | N·m | 0.005 | |
spindle.motor.viscous_nms | number | N·m·s | 1e-05 | |
spindle.coolant_pump | string | "on relay K2 (COOLANT flood), supplied through KM1 (wirin… | ||
spindle.encoder | object | an incremental encoder on the spindle (G33, G76): lines a revolution and an index pulse once a revolution | ||
spindle.encoder.ppr | number | 0 | lines a revolution (0: none); the controller's $38 is this (the other firmware: one channel's pulses) or 4 times it (the kernel: quadrature counts) |
supply
the 24 V supply of controller, sensors and relays
| key | type | unit | value | what it is |
|---|---|---|---|---|
supply.psu24 | string | "PSU2 24 V 60 W, before KM1: controller, sensors, the coi… | QF1 (the utility) feeds PSU2 directly and, through KM1, PSU1 and the VFD (wiring.py) | |
supply.psu24_holdup_ms | number | ms | 80.0 | |
supply.psu24_rise_ms | number | ms | 100.0 |
tool_setter
the tool length sensor: where it stands (machine X, Y), its top (machine Z)
| key | type | unit | value | what it is |
|---|---|---|---|---|
tool_setter.x | number | 25.0 | ||
tool_setter.y | number | 150.0 | ||
tool_setter.top_z | number | -42.0 | the contact (research note F 7, all unverified): it opens after the plunger has gone down pretravel_mm, the point scatters by repeat_sigma_mm (with --seed), it closes again reset_hyst_mm higher, and it bounces (closes for a moment) bounces times within bounce_ms as it opens | |
tool_setter.overtravel | number | 3.0 | ||
tool_setter.contact | string | "NC" | ||
tool_setter.diameter | number | 30.0 | ||
tool_setter.pretravel_mm | number | mm | 0.2 | |
tool_setter.repeat_sigma_mm | number | mm | 0.001 | |
tool_setter.reset_hyst_mm | number | mm | 0.01 | |
tool_setter.bounces | number | 2 | ||
tool_setter.bounce_ms | number | ms | 0.5 |
touch_probe
a touch probe tool (ball stylus on the PROBE input): ideal - it switches as the ball touches - or typical: a kinematic seat that opens once the stylus has given way by its pretravel (by the approach, scattered with a seed), closes again less deflected; its stylus breaks past its travel (docs/06 12.31)
| key | type | unit | value | what it is |
|---|---|---|---|---|
touch_probe.model | string | "ideal" | ||
touch_probe.stylus_travel_mm | number | mm | 2.0 | A touch probe is a tool ("probe 2 L30": a ball stylus on the PROBE input with the setter). "ideal": it switches as the ball touches; "typical": a kinematic touch-trigger probe's seat opens once the stylus has given way by its pretravel - along Z, in XY with three lobes round the stylus (three seats), each touch's scattered by repeatability_sigma_mm with --seed - and closes again release_hysteresis_mm less deflected (docs/06 12.31). The MC-1's probe is an option not chosen yet: the typical values are orders of magnitude for a hobby-class probe, an assumption (research O: such probes claim 1-5 um repeatability, unverified), no specification of any probe. |
touch_probe.geometry | object | the probe's shape in the collision zone (the jaws, the clamps, the workpiece): its stylus over the ball, its body from body_from_mm above the ball's lowest point up to the collet; 0: not given | ||
touch_probe.geometry.stylus_d_mm | number | mm | 1.5 | the stylus' diameter over the ball (thinner than the ball: the ball stands for it) |
touch_probe.geometry.body_d_mm | number | mm | 20.0 | the body's diameter (0: no body) |
touch_probe.geometry.body_from_mm | number | mm | 15.0 | where the body starts, above the ball's lowest point (the stylus' length below it) |
touch_probe.styli | array (3) | the styli by ball size (1.1, e09's Ø2 H7 features: a Ø2 ball does not fit) - each its own stem and where the body starts above the ball's lowest point; a probe tool takes the nearest ball's (within 25 %), else geometry's. Typical M2 ruby styli, an assumption until the user's are entered | ||
touch_probe.styli[].ball_d_mm | number | mm | 2.0 | |
touch_probe.styli[].stylus_d_mm | number | mm | 1.5 | |
touch_probe.styli[].body_from_mm | number | mm | 15.0 | |
touch_probe.typical | object | the typical probe's model: pretravel along Z and sideways, the three-lobed pattern, repeatability, release hysteresis - typical of touch-trigger probes, until a probe is calibrated | ||
touch_probe.typical.pretravel_z_mm | number | mm | 0.005 | |
touch_probe.typical.pretravel_xy_mm | number | mm | 0.015 | |
touch_probe.typical.lobing_xy_mm | number | mm | 0.005 | |
touch_probe.typical.lobing_count | number | 3 | ||
touch_probe.typical.lobing_phase_deg | number | ° | 0.0 | |
touch_probe.typical.repeatability_sigma_mm | number | mm | 0.001 | |
touch_probe.typical.release_hysteresis_mm | number | mm | 0.003 |
sound
where the sounds come from (model mm at the GLB pose, the motion group each rides on) and the default listener, for the sound engine's panning
| key | type | unit | value | what it is |
|---|---|---|---|---|
sound.frame | string | "model mm, Z up, at the GLB pose (viewer.glb_pose); moves… | ||
sound.sources | object | the machine's sources of sound, by name | ||
sound.sources.x_motor | object | one source of sound: where it is (model mm at the GLB pose) and the motion group it rides on | ||
sound.sources.x_motor.at | array (3) | [254.0, 160.0, 250.0] | ||
sound.sources.x_motor.moves | string | "frame" | ||
sound.sources.y_motor | object | |||
sound.sources.y_motor.at | array (3) | [0.0, 245.0, 22.0] | ||
sound.sources.y_motor.moves | string | "frame" | ||
sound.sources.z_motor | object | |||
sound.sources.z_motor.at | array (3) | [0.0, 91.0, 465.0] | ||
sound.sources.z_motor.moves | string | "X" | ||
sound.sources.spindle | object | |||
sound.sources.spindle.at | array (3) | [0.0, 0.0, 206.5] | ||
sound.sources.spindle.moves | string | "Z" | ||
sound.sources.tool_tip | object | |||
sound.sources.tool_tip.at | array (3) | [0.0, 0.0, 59.0] | ||
sound.sources.tool_tip.moves | string | "Z" | ||
sound.sources.box | object | |||
sound.sources.box.at | array (3) | [430.0, 50.0, 140.0] | ||
sound.sources.box.moves | string | "frame" | ||
sound.sources.setter | object | |||
sound.sources.setter.at | array (3) | [-75.0, 75.0, 97.0] | ||
sound.sources.setter.moves | string | "Y" | ||
sound.sources.pump | object | |||
sound.sources.pump.at | array (3) | [-335.0, 0.0, 40.0] | ||
sound.sources.pump.moves | string | "frame" | ||
sound.listener | object | where the listener stands and what it faces (model mm) | ||
sound.listener.at | array (3) | [0.0, -695.0, 559.0] | ||
sound.listener.looks_at | array (3) | [0.0, 0.0, 99.0] | ||
sound.radiation | object | the cut's sound through the machine's modes (cutting.dynamics): Pa/N well above them, each mode's share of it (the rest radiates flat) | ||
sound.radiation.pa_per_n | number | Pa/N | 0.005 | the cut's sound: the force's harmonics through the machine's modes (cutting.dynamics: the structure's X and Y modes, the tool's) as their accelerations radiate (research note N 2.4) - pa_per_n well above the modes, each mode's share of it (a peak of share / (2 zeta) at its frequency), the shares' rest flat |
sound.radiation.structure_x | number | 0.35 | ||
sound.radiation.structure_y | number | 0.35 | ||
sound.radiation.tool | number | 0.3 |
collision
collision proxies: the table, the spindle stack above the tool tip (coaxial cylinders), what stands on the table (table-local mm, origin at its centre)
| key | type | unit | value | what it is |
|---|---|---|---|---|
collision.table | object | the table's proxy: its size, its origin in machine XY, the reference tool tip's machine Z on it | ||
collision.table.size | array (2) | [300.0, 220.0] | ||
collision.table.origin_machine_xy | array (2) | [100.0, 75.0] | ||
collision.table.ref_tip_on_table_z | number | -80.0 | ||
collision.spindle | array (6) | |||
collision.spindle[].id | string | "tool" | ||
collision.spindle[].r | number | 3.0 | ||
collision.spindle[].h | array (2) | [0.0, 15.5] | ||
collision.table_items | array (7) | |||
collision.table_items[].id | string | "setter_flange" | ||
collision.table_items[].shape | string | "box" | ||
collision.table_items[].min | array (3) | [-107.0, 66.0, 0.0] | ||
collision.table_items[].max | array (3) | [-43.0, 84.0, 5.0] | ||
collision.groups | array (3) | |||
collision.groups[].id | string | "z_slide" | ||
collision.groups[].moves | string | "XZ" | ||
collision.groups[].min | array (3) | [-73.5, 45.0, 95.0] | ||
collision.groups[].max | array (3) | [73.5, 65.0, 255.0] | ||
collision.near_miss_mm | number | mm | 1.0 | a gap this small without contact is a near miss (0: none) |
cutting
cutting-force coefficients (Altintas' linear edge-force model), materials, tool compliance and structural dynamics for the stock model
| key | type | unit | value | what it is |
|---|---|---|---|---|
cutting.material | string | "6061-T6 (assumed, research note C 1.5)" | ||
cutting.ktc_n_mm2 | number | N/mm² | 750.0 | |
cutting.krc_n_mm2 | number | N/mm² | 250.0 | |
cutting.kac_n_mm2 | number | N/mm² | 150.0 | |
cutting.kte_n_mm | number | N/mm | 5.0 | |
cutting.kre_n_mm | number | N/mm | 5.0 | |
cutting.kae_n_mm | number | N/mm | 2.0 | |
cutting.kc_plunge_j_mm3 | number | J/mm³ | 2.4 | |
cutting.tool_default | string | "flat 6 n2" | ||
cutting.stock_res_mm | number | mm | 0.02 | |
cutting.chunk_mm | number | mm | 0.5 | the cut's time resolution (A10): chunks of 0.5 mm / 20 ms, or "tooth": a tooth period (at most 0.05 mm) at a time; polyline points within merge_tol_um of a segment's chord merged into it (the drives' tiny deviations at L1/L2 stay in the swept surface); the height pyramid skips the blocks the tool passes over; the sweep looks only at the cells each segment can reach below the blank's top (its profile's inverse: a V-bit engraving shallow reaches a tenth of a millimetre - round 16; false: as before, the same cut) |
cutting.chunk_ms | number | ms | 20.0 | |
cutting.force_step | string | "chunk" | ||
cutting.merge_tol_um | number | µm | 0.1 | |
cutting.pyramid | boolean | true | ||
cutting.sweep_reach | boolean | true | ||
cutting.variation | boolean | true | the shear coefficients follow chip thickness and cutting speed where a material has orthogonal cutting data ("oblique"); false: constant coefficients everywhere (--set cutting.variation=0) | |
cutting.wear | object | the tools' wear book: kept and reported only (the cut stays a sharp tool's); the wear band's curve, the edge's clearance angle, a small tool's criterion | ||
cutting.wear.track | boolean | true | the tools' wear book (1.1, twin/core/src/wear.h; handover/virtual-cnc-tools/wear_design.md): track - kept and reported only, the cut a sharp tool's; the wear band's curve (run in to run_in[1] VB_c by u = run_in[0], late_slope times as steep past its life), the edge's clearance angle (VB tan alpha: how far it goes back); a small tool's criterion at most vb_c_d x D, not under vb_c_min_mm (micro-milling studies: VB 12 um ends a 0.5 mm tool's life, 37.5 um a 1 mm one's - about 3 % of D; wear_life_data.md section 2) | |
cutting.wear.alpha_deg | number | ° | 10.0 | |
cutting.wear.run_in | array (2) | [0.05, 0.3] | ||
cutting.wear.late_slope | number | 3.0 | ||
cutting.wear.vb_c_d | number | 0.03 | ||
cutting.wear.vb_c_min_mm | number | mm | 0.01 | |
cutting.tool_geometry | object | the end mills' geometry for that transformation: a two-flute aluminium cutter (the values Ozsoy used); the helix also spreads the force's harmonics (stock.c force_harmonics, docs/06 M3) | ||
cutting.tool_geometry.helix_deg | number | ° | 30.0 | |
cutting.tool_geometry.rake_deg | number | ° | 10.5 | |
cutting.tool_strength | object | the end mill's strength (research note L 4.4; the twin's M4): carbide rod's transverse rupture strength, the share of it a tool takes at once, the flute core's diameter for strength (x D) | ||
cutting.tool_strength.trs_mpa | number | MPa | 4000.0 | |
cutting.tool_strength.allowable | number | 0.35 | ||
cutting.tool_strength.core_d | number | 0.7 | ||
cutting.force_model | string | "tooth" | the cutting forces (V0 P1, stock.c and tooth.c): "tooth" - the tooth-level kernel, disc by disc and tooth by tooth (engagement from the cells cut, the tool's profile, the helix, runout, the minimum chip, Kienzle's law where a material has it); "chunk" - one engagement arc per chunk and the flat end mill's closed forms, as before. The runout at the tool's tip (TIR; research note L 3.3: ER11 collet and spindle 5-15 um), the offset's direction drawn per cutter from the seed unless phase_deg gives it; envelope: the outermost tooth cuts the part, the cutter reaching R + rho max cos(lambda - j 2 pi / N) - holes larger, bosses smaller (finding 187; false: the nominal radius, as before); the edge of a new carbide tool (radius; the minimum chip as a share of it, aluminium 0.2-0.4: note L 3.2) | |
cutting.runout | object | the cutter's runout in the collet (TIR), its direction (null: drawn for each tool from the session's seed), and whether the cut takes its envelope (finding 187) | ||
cutting.runout.tir_um | number | µm | 10.0 | |
cutting.runout.phase_deg | null | ° | null | |
cutting.runout.envelope | boolean | true | ||
cutting.edge | object | the cutting edge: its radius, and the minimum chip as a share of it - a thinner chip only ploughs | ||
cutting.edge.radius_um | number | µm | 2.0 | |
cutting.edge.h_min_ratio | number | 0.3 | ||
cutting.materials | array (17) | the workpiece materials the setup offers, with their cutting data | ||
cutting.materials[].key | string | "6061-T6" | ||
cutting.materials[].name | string | "Aluminum alloy 6061-T6" | ||
cutting.materials[].group | string | "VDI 22 / ISO N" | ||
cutting.materials[].density_g_cm3 | number | g/cm³ | 2.7 | |
cutting.materials[].ktc_n_mm2 | number | N/mm² | 750.0 | |
cutting.materials[].krc_n_mm2 | number | N/mm² | 250.0 | |
cutting.materials[].kac_n_mm2 | number | N/mm² | 150.0 | |
cutting.materials[].kte_n_mm | number | N/mm | 5.0 | |
cutting.materials[].kre_n_mm | number | N/mm | 5.0 | |
cutting.materials[].kae_n_mm | number | N/mm | 2.0 | |
cutting.materials[].kc_plunge_j_mm3 | number | J/mm³ | 2.4 | |
cutting.materials[].vc_m_min | array (2) | m/min | [152, 335] | |
cutting.materials[].alpha_um_m_k | number | µm/(m·K) | 23.6 | |
cutting.materials[].c_j_kg_k | number | J/(kg·K) | 896 | |
cutting.materials[].color | string | "#b9bdc3" | ||
cutting.materials[].source | string | "aluminium sharp-tool set (note C 1.5)" | ||
cutting.materials[].note | string | "measured sharp-carbide set (note C 1.5); Kienzle 800/0.2… | ||
cutting.materials[].oblique | object | orthogonal cutting data: shear stress, shear and friction angles as functions of the chip, the speed and the rake; the reference chip and speed; the source | ||
cutting.materials[].oblique.tau_s_mpa | array (4) | MPa | [205.928, 204.038, 0.016, -0.056] | |
cutting.materials[].oblique.phi_n_deg | array (4) | ° | [13.866, 62.929, 0.005, 0.259] | |
cutting.materials[].oblique.beta_a_deg | array (4) | ° | [20.835, -4.901, -0.007, 0.291] | |
cutting.materials[].oblique.h_ref_mm | number | mm | 0.02 | |
cutting.materials[].oblique.vc_ref_m_min | number | m/min | 452.4 | |
cutting.materials[].oblique.source | string | "M. Ozsoy, MATECA 6(3) 263-271 (2025), Table 1 (orthogona… | ||
cutting.materials[].life | object | a carbide end mill's life in it for the wear book (wear.h): Taylor's pair and exponent, the flank wear criterion, judged by length or by VB; estimates where the source says est | ||
cutting.materials[].life.taylor_n | number | N | 0.4 | |
cutting.materials[].life.vc_ref_m_min | number | m/min | 300.0 | |
cutting.materials[].life.t_ref_min | number | 60.0 | ||
cutting.materials[].life.vb_c_mm | number | mm | 0.3 | |
cutting.materials[].life.basis | string | "length" | ||
cutting.materials[].life.source | string | "est: carbide start speeds 244-366 m/min, life set by BUE… | ||
cutting.compliance | object | the static give at the tool tip: the tool (modulus, core, flute length), the holder's joint, the frame, the drives by the nut's position | ||
cutting.compliance.note | string | "static compliance at the tool tip, force on the tool: to… | ||
cutting.compliance.tool_e_n_mm2 | number | N/mm² | 600000.0 | |
cutting.compliance.flute_core | number | 0.8 | ||
cutting.compliance.flute_length_d | number | 2.5 | ||
cutting.compliance.tool_density_kg_m3 | number | 14500.0 | the tool's mass for its own bending mode (cutting.dynamics): cemented carbide, the fluted section a share of the full circle's area (two to four flutes: about 0.6-0.75; assumed) | |
cutting.compliance.flute_area | number | 0.65 | ||
cutting.compliance.joint_um_per_100n | number | µm per 100 N | 10.0 | |
cutting.compliance.frame_um_per_100n | array (3) | µm per 100 N | ||
cutting.compliance.frame_portal_um_per_100n | array (3) | µm per 100 N | [2.3495, 0.0, 0.0] | |
cutting.compliance.drive_um_per_100n | object | µm per 100 N | each axis' drive, axially, by the nut's distance from the fixed bearing | |
cutting.compliance.drive_um_per_100n.X | array (2) | |||
cutting.compliance.drive_um_per_100n.Y | array (2) | |||
cutting.compliance.drive_um_per_100n.Z | array (2) | |||
cutting.compliance.source | string | "research note C 3.1-3.3; frame: out/fea/fea_result.json … | ||
cutting.dynamics | object | the tool point's frequency response for chatter: the structure's and the tool's natural frequencies and damping, the spindle's speed range, input shaping | ||
cutting.dynamics.note | string | "tool-point FRF, per direction x (feed axes X, Y): struct… | ||
cutting.dynamics.structure_fn_hz | array (2) | Hz | [161.0, 196.0] | |
cutting.dynamics.tool_fn_hz | number | Hz | 1500.0 | |
cutting.dynamics.zeta | array (3) | [0.03, 0.03, 0.03] | ||
cutting.dynamics.rpm_range | array (2) | rpm | [6000.0, 24000.0] | |
cutting.dynamics.source | string | "research note C 4.1, 4.4 (ZOA; the holder mode's frequen… | ||
cutting.dynamics.input_shaping | object | the kernel's input shaping (K1.10, kernel/docs/08-input-shaping.md): what the structure modes ask of it | ||
cutting.dynamics.input_shaping.note | string | "not needed at the commissioned accelerations ($120-$122 … | ||
cutting.dynamics.input_shaping.commissioned | object | the input shaping settings as commissioned | ||
cutting.dynamics.input_shaping.commissioned.$1000 | number | 0 | ||
cutting.dynamics.input_shaping.commissioned.$1001 | number | 0 | ||
cutting.dynamics.input_shaping.commissioned.$1002 | number | 0 | ||
cutting.dynamics.input_shaping.raised_acceleration | object | the input shaping settings for raised accelerations: the modes they suppress | ||
cutting.dynamics.input_shaping.raised_acceleration.$1000 | number | 2 | ||
cutting.dynamics.input_shaping.raised_acceleration.$1010 | number | 161.0 | ||
cutting.dynamics.input_shaping.raised_acceleration.$1020 | number | 0.05 | ||
cutting.dynamics.input_shaping.raised_acceleration.$1001 | number | 2 | ||
cutting.dynamics.input_shaping.raised_acceleration.$1011 | number | 196.0 | ||
cutting.dynamics.input_shaping.raised_acceleration.$1021 | number | 0.05 | ||
cutting.dynamics.input_shaping.source | string | "kernel line K1.10 (0bd7ffe): tests/shaper_test.py residu… |
workholding
the fixtures: the tapped grid, vise, parallels, strap clamps, tape, V-blocks, friction
| key | type | unit | value | what it is |
|---|---|---|---|---|
workholding.grid | object | the table's tapped grid (model.py: M6 x 12 in columns GRID_XS either side, 9 rows from y -100) | ||
workholding.grid.thread | string | "M6" | ||
workholding.grid.x | array (8) | [-125.0, -100.0, -75.0, -50.0, 50.0, 75.0, 100.0, 125.0] | ||
workholding.grid.y | array (9) | [-100.0, -75.0, -50.0, -25.0, 0.0, 25.0, 50.0, 75.0, 100.0] | ||
workholding.vise | object | a 75 mm self-centring vise (5th Axis V75100X class, note H 2.2 [R30]) on a 10 mm aluminium subplate bolted into the grid: the only low vise that leaves room under MC-1's 80 mm of Z (jaws 66 mm up) | ||
workholding.vise.name | string | "75 mm self-centering precision vise (V75100X class) + 10… | ||
workholding.vise.self_centring | boolean | true | ||
workholding.vise.jaw_width | number | 75.0 | ||
workholding.vise.jaw_height | number | 21.15 | ||
workholding.vise.jaw_thickness | number | 12.0 | ||
workholding.vise.step_height | number | 2.5 | ||
workholding.vise.min_opening | number | 3.25 | ||
workholding.vise.max_opening | number | 77.0 | ||
workholding.vise.base_height | number | 35.0 | ||
workholding.vise.body_width | number | 75.0 | ||
workholding.vise.body_length | number | 100.0 | ||
workholding.vise.plate_thickness | number | 10.0 | ||
workholding.vise.plate_length | number | 130.0 | ||
workholding.vise.plate_width | number | 110.0 | ||
workholding.vise.clamp_force_n | number | N | 7400.0 | |
workholding.vise_low | object | the low-profile vise on the grid (a set-up's "vise": "low"): jaw tops low enough for a short probe to get over the blank with Z at its top | ||
workholding.vise_low.name | string | "Low-profile vise, 75 mm jaws, 128 mm opening (Inception … | ||
workholding.vise_low.self_centring | boolean | false | ||
workholding.vise_low.jaw_width | number | 75.0 | ||
workholding.vise_low.jaw_height | number | 15.0 | ||
workholding.vise_low.jaw_thickness | number | 15.0 | ||
workholding.vise_low.step_height | number | 3.0 | ||
workholding.vise_low.min_opening | number | 0.0 | ||
workholding.vise_low.max_opening | number | 128.0 | ||
workholding.vise_low.base_height | number | 5.0 | ||
workholding.vise_low.body_width | number | 75.0 | ||
workholding.vise_low.body_length | number | 210.0 | ||
workholding.vise_low.plate_thickness | number | 0.0 | ||
workholding.vise_low.plate_length | number | 0.0 | ||
workholding.vise_low.plate_width | number | 0.0 | ||
workholding.vise_low.clamp_force_n | number | N | 5000.0 | |
workholding.parallels | object | a standard parallel set (note H 2.6 [R45]): 1/8" thick, 1/2"..1-5/8" high in 1/8" steps, 6" long | ||
workholding.parallels.thickness | number | 3.18 | ||
workholding.parallels.min_height | number | 12.7 | ||
workholding.parallels.step | number | 3.175 | ||
workholding.parallels.max_height | number | 41.3 | ||
workholding.parallels.length | number | 152.4 | ||
workholding.clamp | object | M6 serrated step clamp (Te-Co 30501M, 64 x 25 x 13) with a step block behind the stud; the stud screws into the grid; 5.4 N m gives 4.45 kN in the stud (Carr Lane, note H 2.3 [R37][R39]) | ||
workholding.clamp.strap_length | number | 64.0 | ||
workholding.clamp.strap_width | number | 25.0 | ||
workholding.clamp.strap_thickness | number | 13.0 | ||
workholding.clamp.nose_on_part | number | 8.0 | ||
workholding.clamp.heel_length | number | 14.0 | ||
workholding.clamp.reach_min | number | 7.0 | ||
workholding.clamp.reach_max | number | 35.0 | ||
workholding.clamp.stud_diameter | number | 6.0 | ||
workholding.clamp.washer_diameter | number | 12.0 | ||
workholding.clamp.nut_height | number | 7.0 | ||
workholding.clamp.bolt_preload_n | number | N | 4450.0 | |
workholding.tape | object | 3M VHB 4910, 1.0 mm acrylic foam (note H 2.4 [R41]): 480 kPa overlap shear after 72 h; half of it counted (peel from the moment of a lateral force above the bond line, imperfect contact) [assumed] | ||
workholding.tape.thickness | number | 1.0 | ||
workholding.tape.shear_mpa | number | MPa | 0.48 | |
workholding.tape.effective_share | number | 0.5 | ||
workholding.vblock | object | a large V-block pair (Fowler X-Blox, 50.8 x 38.1 x 38.1, 38 mm capacity, 90 deg [R43]) with its strap clamp (force assumed) | ||
workholding.vblock.length | number | 38.1 | ||
workholding.vblock.width | number | 50.8 | ||
workholding.vblock.height | number | 38.1 | ||
workholding.vblock.v_width | number | 28.0 | ||
workholding.vblock.clamp_force_n | number | N | 2000.0 | |
workholding.friction | object | friction coefficients - the part on the table, in the jaws, under a strap - and the safety factor of the slip check | ||
workholding.friction.part_on_table | number | 0.3 | physics, not design values (note H 2.7): the part slips when the cut beats these | |
workholding.friction.jaw_on_part | number | 0.35 | ||
workholding.friction.strap_on_part | number | 0.35 | ||
workholding.friction.safety_factor | number | 3.0 |
total_mass_kg
| key | type | unit | value | what it is |
|---|---|---|---|---|
total_mass_kg | number | kg | 65.73 |
controller
the controller: firmware, input filtering, boot time, the $-settings, the pin map
| key | type | unit | value | what it is |
|---|---|---|---|---|
controller.firmware | string | "Twinwright controller firmware (the kernel, 1.0) with it… | ||
controller.board_profile | string | "Teensy 4.1 + T41U5XBB: 24 MHz step timer, USB-CDC" | ||
controller.board | object | the controller board as the MCU side is modelled: step timer, step pulses and the $29 delay, input debounce, the sender's link (architecture 4.2) | ||
controller.board.id | string | "teensy41_t41u5xbb" | ||
controller.board.text | string | "Teensy 4.1 (i.MX RT1062, Cortex-M7 600 MHz) on a Brookwo… | ||
controller.board.my_machine_board | string | "BOARD_T41U5XBB" | ||
controller.board.f_step_timer_hz | number | Hz | 24000000 | the step timer's clock (hal.f_step_timer); the twin's virtual clock runs at it |
controller.board.timer_period_extra | number | 1 | ||
controller.board.timer_max_cycles | number | 1048575 | ||
controller.board.wake_up_ms | number | ms | 2.0 | |
controller.board.step_pulse_latency_us | number | µs | 0.2 | |
controller.board.step_toff_min_us | number | µs | 2.0 | |
controller.board.pulse_timer_hz | number | Hz | 150000000 | |
controller.board.signals | array (4) | ["estop", "feed_hold", "cycle_start", "motor_fault"] | ||
controller.board.debounce_ms | number | ms | 40 | control inputs are acted on this long after their edge, if still on (0: at once) |
controller.board.debounced | array (4) | ["reset", "feed_hold", "cycle_start", "safety_door"] | ||
controller.board.link_default | string | "usb_cdc" | the sender's line as the firmware is configured (my_machine.h USB_SERIAL_CDC): native USB, a UART, or Telnet | |
controller.board.links | object | the lines the board offers the sender: usb_cdc and telnet are packets the foreground polls, uart a byte per slot with a receive interrupt and the host's USB-serial adapter | ||
controller.board.links.usb_cdc | object | the USB CDC link: frames, packets, buffers, polling, the host's latencies and jitter | ||
controller.board.links.usb_cdc.frame_us | number | µs | 125.0 | |
controller.board.links.usb_cdc.packet | number | 512 | ||
controller.board.links.usb_cdc.rx_capacity | number | 4096 | ||
controller.board.links.usb_cdc.poll_us | number | µs | 50.0 | |
controller.board.links.usb_cdc.poll_bytes | number | 20 | ||
controller.board.links.usb_cdc.tx_buffer | number | 6124 | ||
controller.board.links.usb_cdc.tx_flush_us | number | µs | 75.0 | |
controller.board.links.usb_cdc.host_out_latency_us | number | µs | 250.0 | |
controller.board.links.usb_cdc.host_in_latency_us | number | µs | 500.0 | |
controller.board.links.usb_cdc.jitter_us | number | µs | 250.0 | |
controller.board.links.uart | object | the UART link through a USB-serial adapter: baud rate, the adapter's packets and timer, the host's latencies and jitter | ||
controller.board.links.uart.baud | number | 115200.0 | ||
controller.board.links.uart.adapter | string | "FT232R-class USB-serial adapter" | ||
controller.board.links.uart.adapter_packet | number | 62 | ||
controller.board.links.uart.adapter_timer_ms | number | ms | 16.0 | the adapter's latency timer: a part-filled packet waits this long |
controller.board.links.uart.host_out_latency_us | number | µs | 1000.0 | |
controller.board.links.uart.host_in_latency_us | number | µs | 1000.0 | |
controller.board.links.uart.jitter_us | number | µs | 500.0 | |
controller.board.links.telnet | object | the network (Telnet) link: packets, buffers, polling, latencies and jitter | ||
controller.board.links.telnet.frame_us | number | µs | 0.0 | |
controller.board.links.telnet.packet | number | 1460 | ||
controller.board.links.telnet.rx_capacity | number | 2920 | ||
controller.board.links.telnet.poll_us | number | µs | 1000.0 | |
controller.board.links.telnet.poll_bytes | number | 1460 | ||
controller.board.links.telnet.tx_buffer | number | 1024 | ||
controller.board.links.telnet.tx_flush_us | number | µs | 1000.0 | |
controller.board.links.telnet.host_out_latency_us | number | µs | 200.0 | |
controller.board.links.telnet.host_in_latency_us | number | µs | 200.0 | |
controller.board.links.telnet.jitter_us | number | µs | 300.0 | |
controller.board.fg_cost_us | object | µs | the foreground's CPU time per unit of work (a line parsed, a block planned, a step segment prepared), us | |
controller.board.fg_cost_us.line | number | 15.0 | The foreground's CPU time (architecture 4.2 "前台耗时模型"): charged per unit of work - a line parsed and executed, a block planned (with the planner's recalculation), a step segment prepared - so a slow foreground starves the step segment buffer as on a real MCU. Estimates for the 600 MHz Cortex-M7 with its FPU (assumed): measure on the board with a GPIO toggled around each (03-commissioning). | |
controller.board.fg_cost_us.plan_block | number | 5.0 | ||
controller.board.fg_cost_us.segment | number | 3.0 | ||
controller.board.identity | object | What the controller says about itself in $I (research note I 1.2, docs/06 G3): the driver's own lines as the iMXRT1062 driver sets them (driver.c: hal.info, f_mcu, driver_version; USB_SERIAL_CDC 2: the options) and the board map's name - read the board's $I at commissioning and put its lines here (FREE MEMORY then too). twin_marker: one more line, [PLUGIN:<marker>], tells the twin apart; "" gives the board's $I exactly (a sender cannot tell them apart - docs/06 8.6: by choice only) | ||
controller.board.identity.driver | string | "iMXRT1062" | ||
controller.board.identity.mcu_mhz | number | MHz | 600 | |
controller.board.identity.driver_version | string | "260616" | ||
controller.board.identity.driver_options | string | "USB.2" | ||
controller.board.identity.board | string | "T41U5XBB" | ||
controller.board.identity.twin_marker | string | "MC-1 twin" | ||
controller.firmware_options | object | what the controller's firmware is built with: its build options, signals, probe, plugins, storage, axes, the driver's options | ||
controller.firmware_options.my_machine_h | object | the build options as the firmware's my_machine.h names them | ||
controller.firmware_options.my_machine_h.BOARD_T41U5XBB | number | 1 | ||
controller.firmware_options.my_machine_h.USB_SERIAL_CDC | number | 2 | ||
controller.firmware_options.my_machine_h.SPINDLE0_ENABLE | string | "SPINDLE_HUANYANG1" | ||
controller.firmware_options.my_machine_h.MODBUS_ENABLE | number | 1 | ||
controller.firmware_options.my_machine_h.ESTOP_ENABLE | number | 1 | ||
controller.firmware_options.my_machine_h.MOTOR_FAULT_ENABLE | number | 1 | ||
controller.firmware_options.my_machine_h.MPG_ENABLE | number | 0 | ||
controller.firmware_options.signals | array (4) | ["estop", "feed_hold", "cycle_start", "motor_fault"] | ||
controller.firmware_options.probe | boolean | true | ||
controller.firmware_options.toolsetter | boolean | false | ||
controller.firmware_options.plugins | array (2) | ["MODBUS", "HUANYANG VFD"] | ||
controller.firmware_options.nvs | string | "flash" | ||
controller.firmware_options.axes | number | 3 | ||
controller.firmware_options.driver | object | the board driver's options: debounce, reboot, clock, planner blocks, receive buffer | ||
controller.firmware_options.driver.software_debounce | boolean | true | the iMXRT1062 driver's own (assumed from its source; the twin's driver the same): the control inputs are debounced in software (OPT S), $REBOOT restarts the MCU (NEWOPT REBOOT), the RT1062's RTC (NEWOPT RTC - though that driver never sets hal.driver_cap.rtc, so a real board answers $RTC with error:3: finding 94) | |
controller.firmware_options.driver.reboot | boolean | true | ||
controller.firmware_options.driver.rtc | boolean | true | ||
controller.firmware_options.driver.planner_blocks | number | 100 | ||
controller.firmware_options.driver.rx_buffer | number | 1024 | ||
controller.panel | object | the control box's buttons and the controller inputs they are on | ||
controller.panel.cycle_start | object | the cycle start button (SB2): how it reaches the controller, its input and pin, its contact | ||
controller.panel.cycle_start.via | string | "pin" | ||
controller.panel.cycle_start.input | string | "CYCLE_START" | ||
controller.panel.cycle_start.teensy_pin | number | 17 | ||
controller.panel.cycle_start.button | string | "循环启动按钮 SB2(绿色,1 常开),电控箱门" | ||
controller.panel.cycle_start.contact | string | "NO" | ||
controller.panel.feed_hold | object | the feed hold button (SB3): how it reaches the controller, its input and pin, its contact | ||
controller.panel.feed_hold.via | string | "pin" | ||
controller.panel.feed_hold.input | string | "FEED_HOLD" | ||
controller.panel.feed_hold.teensy_pin | number | 16 | ||
controller.panel.feed_hold.button | string | "进给保持按钮 SB3(黄色,1 常开),电控箱门" | ||
controller.panel.feed_hold.contact | string | "NO" | ||
controller.input_filter_us | number | µs | 20.0 | the board's isolated inputs: shorter pulses do not reach the pin (optocoupler; an RC filter would add to it). Limit inputs are not debounced in software (research F 2, 6) |
controller.boot_ms | number | ms | 50.0 | |
controller.settings | object | the $-settings (setting number -> value), also in mc1_settings.nc | ||
controller.settings.$3 | number | 5 | ||
controller.settings.$100 | number | 800 | ||
controller.settings.$101 | number | 800 | ||
controller.settings.$102 | number | 800 | ||
controller.settings.$110 | number | 3000.0 | ||
controller.settings.$111 | number | 3000.0 | ||
controller.settings.$112 | number | 1500.0 | ||
controller.settings.$120 | number | 300.0 | ||
controller.settings.$121 | number | 300.0 | ||
controller.settings.$122 | number | 200.0 | ||
controller.settings.$130 | number | 202.0 | ||
controller.settings.$131 | number | 152.0 | ||
controller.settings.$132 | number | 82.0 | ||
controller.settings.$10 | number | 15871 | ||
controller.settings.$11 | number | 0.002 | ||
controller.settings.$12 | number | 0.002 | ||
controller.settings.$0 | number | 5.0 | ||
controller.settings.$29 | number | 5.0 | ||
controller.settings.$1 | number | 255 | ||
controller.settings.$37 | number | 7 | ||
controller.settings.$5 | number | 7 | ||
controller.settings.$6 | number | 1 | ||
controller.settings.$22 | number | 541 | ||
controller.settings.$20 | number | 1 | ||
controller.settings.$21 | number | 1 | ||
controller.settings.$23 | number | 0 | ||
controller.settings.$44 | number | 4 | ||
controller.settings.$45 | number | 3 | ||
controller.settings.$46 | number | 0 | ||
controller.settings.$180 | number | 50 | ||
controller.settings.$181 | number | 50 | ||
controller.settings.$182 | number | 50 | ||
controller.settings.$190 | number | 1200 | ||
controller.settings.$191 | number | 1200 | ||
controller.settings.$192 | number | 600 | ||
controller.settings.$26 | number | 250 | ||
controller.settings.$27 | number | 2.0 | ||
controller.settings.$43 | number | 1 | ||
controller.settings.$65 | number | 32 | ||
controller.settings.$341 | number | 3 | ||
controller.settings.$342 | number | 50 | ||
controller.settings.$343 | number | 25 | ||
controller.settings.$344 | number | 200 | ||
controller.settings.$346 | number | 0 | ||
controller.settings.$30 | number | 24000 | ||
controller.settings.$31 | number | 6000 | ||
controller.settings.$340 | number | 5 | ||
controller.settings.$374 | number | 3 | ||
controller.settings.$375 | number | 50 | ||
controller.settings.$394 | number | 15 | ||
controller.settings.$460 | number | 1 | ||
controller.settings_file | string | "twin/machine/mc1_settings.nc" | ||
controller.pin_map | array (16) | |||
controller.design_settings_table | array (28) |
viewer
the 3D views: the GLB model and its node groups, pose conventions, cable chains
| key | type | unit | value | what it is |
|---|---|---|---|---|
viewer.glb | string | "out/web/mc1.glb" | Everything twin/web needs to draw the machine: the GLB (moving groups) plus the drag chains, cable routes and Z service loop, which the viewer rebuilds per pose. | |
viewer.groups | object | the 3D model's motion groups: which part moves with which axis | ||
viewer.groups.frame | string | "fixed_frame" | ||
viewer.groups.Y | string | "Y_table" | ||
viewer.groups.X | string | "X_carriage" | ||
viewer.groups.Z | string | "Z_slide" | ||
viewer.groups.dyn | string | "cable_chains" | ||
viewer.glb_pose | string | "model mm, Z up; exported at x_c = y_t = z_up = 0 where x… | ||
viewer.table_top_z | number | 59.0 | ||
viewer.tool_tip | string | "spindle axis at model y = 0; tool tip = (x_c, 0, table_t… | ||
viewer.chains | object | the cable chains' geometry for the 3D view | ||
viewer.chains.x | object | the X cable chain: link size, pitch, bend radius, length, where it is fixed, how it moves | ||
viewer.chains.x.h | number | 22.0 | ||
viewer.chains.x.w | number | 42.0 | ||
viewer.chains.x.pitch | number | 20.0 | ||
viewer.chains.x.R | number | 38.0 | ||
viewer.chains.x.L | number | 400.0 | ||
viewer.chains.x.fixed | number | 150.0 | ||
viewer.chains.x.y | number | 204.5 | ||
viewer.chains.x.z | number | 340.0 | ||
viewer.chains.x.move_dx | number | 40.0 | ||
viewer.chains.x.lift | number | 1.0 | ||
viewer.chains.x.fill | number | 0.85 | ||
viewer.chains.x.loop_sign | number | -1 | ||
viewer.chains.y | object | the Y cable chain: link size, pitch, bend radius, length, where it is fixed, how it moves | ||
viewer.chains.y.h | number | 15.0 | ||
viewer.chains.y.w | number | 22.0 | ||
viewer.chains.y.pitch | number | 15.0 | ||
viewer.chains.y.R | number | 20.0 | ||
viewer.chains.y.L | number | 360.0 | ||
viewer.chains.y.fixed | number | 150.0 | ||
viewer.chains.y.x | number | -169.0 | ||
viewer.chains.y.z | number | 0.0 | ||
viewer.chains.y.move_dy | number | 0.0 | ||
viewer.chains.y.lift | number | 1.0 | ||
viewer.chains.y.fill | number | 0.85 | ||
viewer.chains.y.loop_sign | number | -1 | ||
viewer.routes | object | the cables' routes for the 3D view, as points (model mm) | ||
viewer.routes.x_motor | array (5) | |||
viewer.routes.y_motor | array (6) | |||
viewer.routes.y_sensor_1 | array (4) | |||
viewer.routes.y_sensor_2 | array (4) | |||
viewer.routes.x_sensor_L | array (7) | |||
viewer.routes.x_sensor_R | array (7) | |||
viewer.routes.x_chain_in_zmotor | array (4) | |||
viewer.routes.x_chain_out | array (7) | |||
viewer.routes.y_chain_in_setter | array (5) | |||
viewer.routes.y_chain_out | array (6) | |||
viewer.route_groups | object | the routes that ride on a cable chain, and which | ||
viewer.route_groups.x_chain_in_zmotor | string | "x" | ||
viewer.route_groups.y_chain_in_setter | string | "y" | ||
viewer.cable_dia | object | each route's cable diameter (mm) | ||
viewer.cable_dia.x_motor | number | 9.0 | ||
viewer.cable_dia.y_motor | number | 9.0 | ||
viewer.cable_dia.y_sensor_1 | number | 4.0 | ||
viewer.cable_dia.y_sensor_2 | number | 4.0 | ||
viewer.cable_dia.x_sensor_L | number | 4.0 | ||
viewer.cable_dia.x_sensor_R | number | 4.0 | ||
viewer.cable_dia.x_chain_in_zmotor | number | 9.0 | ||
viewer.cable_dia.x_chain_out | number | 18.0 | ||
viewer.cable_dia.y_chain_in_setter | number | 4.0 | ||
viewer.cable_dia.y_chain_out | number | 4.0 | ||
viewer.service_loop | object | the Z cables' service loop at three heights of Z, as points (model mm) | ||
viewer.service_loop.0.0 | array (7) | |||
viewer.service_loop.40.0 | array (7) | |||
viewer.service_loop.80.0 | array (7) |
provenance
where the values come from: a path pattern ("a[]" every item of a, "x/y_*" these keys, * a prefix; it covers what is under it; the most specific pattern wins) -> its record (B1)
| key | type | unit | value | what it is |
|---|---|---|---|---|
provenance.axes[].travel | object | |||
provenance.axes[].travel.source | string | "design" | the category: design, cad (off the CAD model), datasheet, literature (research notes, catalogues), calc (from other values), assumption, measured (on this machine), model (a simulation setting) | |
provenance.axes[].travel.note | string | "params.TRAVEL_X/Y/Z" | where exactly, and what to measure | |
provenance.axes[].travel.uncertainty | string | "exact" | how far off the values may be, in words ("+-20 %", "exact") | |
provenance.axes[].travel.refs | array (1) | ["params.py"] | references: research notes, datasheets, source files | |
provenance.axes[].travel.values | string | "71d1a906ec58" | a digest of the values the pattern covers: when they change, the history gets an item | |
provenance.axes[].travel.history | array (1) | the entry's changes, dated (source, note, uncertainty, values) | ||
provenance.axes[].travel.history[].date | string | "2026-09-28" | ||
provenance.axes[].travel.history[].change | string | "recorded" | ||
provenance.axes[].steps_per_mm | object | |||
provenance.axes[].steps_per_mm.source | string | "calc" | ||
provenance.axes[].steps_per_mm.note | string | "200 steps x 16 microsteps / params.SCREW_LEAD" | ||
provenance.axes[].steps_per_mm.uncertainty | string | "exact" | ||
provenance.axes[].steps_per_mm.refs | array (1) | ["params.py"] | ||
provenance.axes[].steps_per_mm.values | string | "81ce7c8ef0bb" | ||
provenance.axes[].steps_per_mm.history | array (1) | |||
provenance.axes[].steps_per_mm.history[].date | string | "2026-09-28" | ||
provenance.axes[].steps_per_mm.history[].change | string | "recorded" | ||
provenance.axes[].switch.min/max | object | |||
provenance.axes[].switch.min/max.source | string | "cad" | ||
provenance.axes[].switch.min/max.note | string | "travel end -/+ params.TRIG_OVER for the CAD's idealised … | ||
provenance.axes[].switch.min/max.uncertainty | string | "about 1 mm until measured" | ||
provenance.axes[].switch.min/max.refs | array (1) | ["params.py"] | ||
provenance.axes[].switch.min/max.values | string | "73e033708dfd" | ||
provenance.axes[].switch.min/max.history | array (1) | |||
provenance.axes[].switch.min/max.history[].date | string | "2026-09-28" | ||
provenance.axes[].switch.min/max.history[].change | string | "recorded" | ||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm | object | |||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.source | string | "cad" | ||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.note | string | "params.PROX_SN, PROX_GAP, SENSE_R" | ||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.uncertainty | string | "sn +-10 % (catalogue)" | ||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.refs | array (1) | ["params.py"] | ||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.values | string | "3e413230868f" | ||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.history | array (1) | |||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.history[].date | string | "2026-09-28" | ||
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.history[].change | string | "recorded" | ||
provenance.axes[].switch.lambda_mm/w_mm | object | |||
provenance.axes[].switch.lambda_mm/w_mm.source | string | "assumption" | ||
provenance.axes[].switch.lambda_mm/w_mm.note | string | "research F 1.3 lateral model (gives the switch point 1.1… | ||
provenance.axes[].switch.lambda_mm/w_mm.uncertainty | string | "unknown" | ||
provenance.axes[].switch.lambda_mm/w_mm.refs | array (1) | ["research F 1.3"] | ||
provenance.axes[].switch.lambda_mm/w_mm.values | string | "2d0da42b785a" | ||
provenance.axes[].switch.lambda_mm/w_mm.history | array (1) | |||
provenance.axes[].switch.lambda_mm/w_mm.history[].date | string | "2026-09-28" | ||
provenance.axes[].switch.lambda_mm/w_mm.history[].change | string | "recorded" | ||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm | object | |||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.source | string | "literature" | ||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.note | string | "research F 7 defaults for an LJ8A3-class sensor, unverif… | ||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.uncertainty | string | "unverified" | ||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.refs | array (1) | ["research F 7"] | ||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.values | string | "a26c40540fa2" | ||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.history | array (1) | |||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.history[].date | string | "2026-09-28" | ||
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.history[].change | string | "recorded" | ||
provenance.axes[].switch.temp_c/temp_coeff_per_k | object | |||
provenance.axes[].switch.temp_c/temp_coeff_per_k.source | string | "literature" | ||
provenance.axes[].switch.temp_c/temp_coeff_per_k.note | string | "catalogue temperature drift of inductive sensors, unveri… | ||
provenance.axes[].switch.temp_c/temp_coeff_per_k.uncertainty | string | "unverified" | ||
provenance.axes[].switch.temp_c/temp_coeff_per_k.refs | array (1) | ["research F 1.3"] | ||
provenance.axes[].switch.temp_c/temp_coeff_per_k.values | string | "5ce8539eea1c" | ||
provenance.axes[].switch.temp_c/temp_coeff_per_k.history | array (1) | |||
provenance.axes[].switch.temp_c/temp_coeff_per_k.history[].date | string | "2026-09-28" | ||
provenance.axes[].switch.temp_c/temp_coeff_per_k.history[].change | string | "recorded" | ||
provenance.axes[].switch.ready_ms | object | |||
provenance.axes[].switch.ready_ms.source | string | "assumption" | ||
provenance.axes[].switch.ready_ms.note | string | "power-on delay of the sensor (outputs off meanwhile)" | ||
provenance.axes[].switch.ready_ms.uncertainty | string | "20-50 ms" | ||
provenance.axes[].switch.ready_ms.refs | array (1) | ["research F 7"] | ||
provenance.axes[].switch.ready_ms.values | string | "de157f28a540" | ||
provenance.axes[].switch.ready_ms.history | array (1) | |||
provenance.axes[].switch.ready_ms.history[].date | string | "2026-09-28" | ||
provenance.axes[].switch.ready_ms.history[].change | string | "recorded" | ||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr | object | |||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.source | string | "design" | ||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.note | string | "wiring.py sensors and inputs; target material from model… | ||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.uncertainty | string | "exact" | ||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.refs | array (2) | ["wiring.py", "model.py"] | ||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.values | string | "48d77bcc7164" | ||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.history | array (1) | |||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.history[].date | string | "2026-09-28" | ||
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.history[].change | string | "recorded" | ||
provenance.axes[].hard_stop | object | |||
provenance.axes[].hard_stop.source | string | "cad" | ||
provenance.axes[].hard_stop.note | string | "travel end -/+ the first contact per end measured off th… | ||
provenance.axes[].hard_stop.uncertainty | string | "+-0.5 mm" | ||
provenance.axes[].hard_stop.refs | array (2) | ["out/report.json", "params.py"] | ||
provenance.axes[].hard_stop.values | string | "836c5c9e9766" | ||
provenance.axes[].hard_stop.history | array (2) | |||
provenance.axes[].hard_stop.history[].date | string | "2026-09-28" | ||
provenance.axes[].hard_stop.history[].change | string | "recorded" | ||
provenance.axes[].moving_mass_kg | object | |||
provenance.axes[].moving_mass_kg.source | string | "cad" | ||
provenance.axes[].moving_mass_kg.note | string | "out/report.json mass.moving_mass_kg" | ||
provenance.axes[].moving_mass_kg.uncertainty | string | "+-10 %" | ||
provenance.axes[].moving_mass_kg.refs | array (1) | ["out/report.json"] | ||
provenance.axes[].moving_mass_kg.values | string | "478ee7f65867" | ||
provenance.axes[].moving_mass_kg.history | array (2) | |||
provenance.axes[].moving_mass_kg.history[].date | string | "2026-09-28" | ||
provenance.axes[].moving_mass_kg.history[].change | string | "recorded" | ||
provenance.axes[].id/moves/home_dir | object | |||
provenance.axes[].id/moves/home_dir.source | string | "design" | ||
provenance.axes[].id/moves/home_dir.note | string | "axis layout and homing direction (the design review)" | ||
provenance.axes[].id/moves/home_dir.uncertainty | string | "exact" | ||
provenance.axes[].id/moves/home_dir.refs | array (2) | ["params.py", "mc1_settings.nc"] | ||
provenance.axes[].id/moves/home_dir.values | string | "687fb780b2ec" | ||
provenance.axes[].id/moves/home_dir.history | array (1) | |||
provenance.axes[].id/moves/home_dir.history[].date | string | "2026-09-28" | ||
provenance.axes[].id/moves/home_dir.history[].change | string | "recorded" | ||
provenance.axes[].dir_sign/direction | object | |||
provenance.axes[].dir_sign/direction.source | string | "calc" | ||
provenance.axes[].dir_sign/direction.note | string | "the way DIR low moves each axis: the motor's end of the … | ||
provenance.axes[].dir_sign/direction.uncertainty | string | "the polarity: unknown until the first jog" | ||
provenance.axes[].dir_sign/direction.refs | array (2) | ["params.py", "model.py"] | ||
provenance.axes[].dir_sign/direction.values | string | "773df4d972c0" | ||
provenance.axes[].dir_sign/direction.history | array (1) | |||
provenance.axes[].dir_sign/direction.history[].date | string | "2026-09-28" | ||
provenance.axes[].dir_sign/direction.history[].change | string | "recorded" | ||
provenance.sensor_materials | object | |||
provenance.sensor_materials.source | string | "literature" | ||
provenance.sensor_materials.note | string | "research F 1.3 catalogue guideline factors (stainless 0.… | ||
provenance.sensor_materials.uncertainty | string | "+-0.1" | ||
provenance.sensor_materials.refs | array (1) | ["research F 1.3"] | ||
provenance.sensor_materials.values | string | "fc616da34b6d" | ||
provenance.sensor_materials.history | array (1) | |||
provenance.sensor_materials.history[].date | string | "2026-09-28" | ||
provenance.sensor_materials.history[].change | string | "recorded" | ||
provenance.wires | object | |||
provenance.wires.source | string | "design" | ||
provenance.wires.note | string | "wiring.py PIN_MAP and cable schedule (out/cables.csv); f… | ||
provenance.wires.uncertainty | string | "exact" | ||
provenance.wires.refs | array (2) | ["wiring.py", "out/cables.csv"] | ||
provenance.wires.values | string | "a2b05605dcc7" | ||
provenance.wires.history | array (2) | |||
provenance.wires.history[].date | string | "2026-09-28" | ||
provenance.wires.history[].change | string | "recorded" | ||
provenance.faults | object | injected faults: a glitch opens the contact this long; an intermittent wire drops out while its cable flexes (per metre of travel of the axes it follows), for a random time | ||
provenance.faults.source | string | "assumption" | ||
provenance.faults.note | string | "glitch width, intermittent dropout rate and length" | ||
provenance.faults.uncertainty | string | "unknown" | ||
provenance.faults.refs | array (0) | |||
provenance.faults.values | string | "8d45b99a8ac0" | ||
provenance.faults.history | array (1) | |||
provenance.faults.history[].date | string | "2026-09-28" | ||
provenance.faults.history[].change | string | "recorded" | ||
provenance.controller.input_filter_us | object | |||
provenance.controller.input_filter_us.source | string | "assumption" | ||
provenance.controller.input_filter_us.note | string | "optocoupler response (research F 1.4: tens of us)" | ||
provenance.controller.input_filter_us.uncertainty | string | "10-100 us" | ||
provenance.controller.input_filter_us.refs | array (1) | ["research F 1.4"] | ||
provenance.controller.input_filter_us.values | string | "79b22021026e" | ||
provenance.controller.input_filter_us.history | array (1) | |||
provenance.controller.input_filter_us.history[].date | string | "2026-09-28" | ||
provenance.controller.input_filter_us.history[].change | string | "recorded" | ||
provenance.controller.boot_ms | object | |||
provenance.controller.boot_ms.source | string | "assumption" | ||
provenance.controller.boot_ms.note | string | "supervisor reset release, clock start-up" | ||
provenance.controller.boot_ms.uncertainty | string | "+-50 %" | ||
provenance.controller.boot_ms.refs | array (0) | |||
provenance.controller.boot_ms.values | string | "4bbc30ef8aba" | ||
provenance.controller.boot_ms.history | array (1) | |||
provenance.controller.boot_ms.history[].date | string | "2026-09-28" | ||
provenance.controller.boot_ms.history[].change | string | "recorded" | ||
provenance.controller.board | object | |||
provenance.controller.board.source | string | "design" | ||
provenance.controller.board.note | string | "firmware/my_machine.h (BOARD_T41U5XBB, USB_SERIAL_CDC 2)… | ||
provenance.controller.board.uncertainty | string | "exact for that firmware" | ||
provenance.controller.board.refs | array (2) | ["firmware/my_machine.h", "iMXRT1062 driver.c (Teensy 4.1)"] | ||
provenance.controller.board.values | string | "01bf47495868" | ||
provenance.controller.board.history | array (2) | |||
provenance.controller.board.history[].date | string | "2026-09-28" | ||
provenance.controller.board.history[].change | string | "recorded" | ||
provenance.controller.board.links | object | |||
provenance.controller.board.links.source | string | "assumption" | ||
provenance.controller.board.links.note | string | "the host side of each link: USB CDC polling, an FT232R-c… | ||
provenance.controller.board.links.uncertainty | string | "latencies +-100 %" | ||
provenance.controller.board.links.refs | array (2) | ["FTDI AN232B-04", "usb_serial_pjrc.c"] | ||
provenance.controller.board.links.values | string | "36489eabc285" | ||
provenance.controller.board.links.history | array (1) | |||
provenance.controller.board.links.history[].date | string | "2026-09-28" | ||
provenance.controller.board.links.history[].change | string | "recorded" | ||
provenance.controller.board.identity | object | |||
provenance.controller.board.identity.source | string | "assumption" | ||
provenance.controller.board.identity.note | string | "the board's $I driver lines as the iMXRT1062 driver and … | ||
provenance.controller.board.identity.uncertainty | string | "unverified" | ||
provenance.controller.board.identity.refs | array (2) | ["iMXRT1062 driver.c (Teensy 4.1)", "firmware/T41U5XBB_ma… | ||
provenance.controller.board.identity.values | string | "eac6a6731f5f" | ||
provenance.controller.board.identity.history | array (1) | |||
provenance.controller.board.identity.history[].date | string | "2026-09-30" | ||
provenance.controller.board.identity.history[].change | string | "recorded" | ||
provenance.controller.board.fg_cost_us | object | |||
provenance.controller.board.fg_cost_us.source | string | "assumption" | ||
provenance.controller.board.fg_cost_us.note | string | "the firmware's foreground work per line parsed, block pl… | ||
provenance.controller.board.fg_cost_us.uncertainty | string | "+-50 %" | ||
provenance.controller.board.fg_cost_us.refs | array (0) | |||
provenance.controller.board.fg_cost_us.values | string | "61da7f8c49ef" | ||
provenance.controller.board.fg_cost_us.history | array (2) | |||
provenance.controller.board.fg_cost_us.history[].date | string | "2026-09-28" | ||
provenance.controller.board.fg_cost_us.history[].change | string | "recorded" | ||
provenance.controller.settings | object | |||
provenance.controller.settings.source | string | "design" | ||
provenance.controller.settings.note | string | "see mc1_settings.nc comments" | ||
provenance.controller.settings.uncertainty | string | "exact" | ||
provenance.controller.settings.refs | array (1) | ["mc1_settings.nc"] | ||
provenance.controller.settings.values | string | "e88a29749de0" | ||
provenance.controller.settings.history | array (5) | |||
provenance.controller.settings.history[].date | string | "2026-09-28" | ||
provenance.controller.settings.history[].change | string | "recorded" | ||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file | object | |||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.source | string | "design" | ||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.note | string | "firmware/my_machine.h, wiring.py" | ||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.uncertainty | string | "exact" | ||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.refs | array (2) | ["firmware/my_machine.h", "wiring.py"] | ||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.values | string | "0be081af796b" | ||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.history | array (6) | |||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.history[].date | string | "2026-09-28" | ||
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.history[].change | string | "recorded" | ||
provenance.controller.firmware_options | object | |||
provenance.controller.firmware_options.source | string | "design" | ||
provenance.controller.firmware_options.note | string | "firmware/my_machine.h's defines, the board map's inputs;… | ||
provenance.controller.firmware_options.uncertainty | string | "exact for that firmware" | ||
provenance.controller.firmware_options.refs | array (2) | ["firmware/my_machine.h", "firmware/T41U5XBB_map.h"] | ||
provenance.controller.firmware_options.values | string | "363047a0637b" | ||
provenance.controller.firmware_options.history | array (3) | |||
provenance.controller.firmware_options.history[].date | string | "2026-09-28" | ||
provenance.controller.firmware_options.history[].change | string | "recorded" | ||
provenance.controller.firmware_options.driver | object | |||
provenance.controller.firmware_options.driver.source | string | "assumption" | ||
provenance.controller.firmware_options.driver.note | string | "the iMXRT1062 driver's capabilities as read from its sou… | ||
provenance.controller.firmware_options.driver.uncertainty | string | "unverified" | ||
provenance.controller.firmware_options.driver.refs | array (1) | ["iMXRT1062 driver.c (Teensy 4.1)"] | ||
provenance.controller.firmware_options.driver.values | string | "59b20ae6a742" | ||
provenance.controller.firmware_options.driver.history | array (1) | |||
provenance.controller.firmware_options.driver.history[].date | string | "2026-09-28" | ||
provenance.controller.firmware_options.driver.history[].change | string | "recorded" | ||
provenance.controller.board.signals | object | |||
provenance.controller.board.signals.source | string | "design" | ||
provenance.controller.board.signals.note | string | "the control inputs the firmware compiles (firmware_optio… | ||
provenance.controller.board.signals.uncertainty | string | "exact" | ||
provenance.controller.board.signals.refs | array (2) | ["firmware/my_machine.h", "firmware/T41U5XBB_map.h"] | ||
provenance.controller.board.signals.values | string | "f3df84706378" | ||
provenance.controller.board.signals.history | array (1) | |||
provenance.controller.board.signals.history[].date | string | "2026-09-28" | ||
provenance.controller.board.signals.history[].change | string | "recorded" | ||
provenance.controller.panel | object | |||
provenance.controller.panel.source | string | "design" | ||
provenance.controller.panel.note | string | "wiring.py PIN_MAP (the CYCLE_START, FEED_HOLD rows: SB2,… | ||
provenance.controller.panel.uncertainty | string | "exact" | ||
provenance.controller.panel.refs | array (2) | ["wiring.py", "firmware/T41U5XBB_map.h"] | ||
provenance.controller.panel.values | string | "90f20b87d770" | ||
provenance.controller.panel.history | array (1) | |||
provenance.controller.panel.history[].date | string | "2026-10-04" | ||
provenance.controller.panel.history[].change | string | "recorded" | ||
provenance.supply | object | |||
provenance.supply.source | string | "design" | ||
provenance.supply.note | string | "wiring.py topology (24 V before KM1); hold-up and rise a… | ||
provenance.supply.uncertainty | string | "timings +-50 %" | ||
provenance.supply.refs | array (1) | ["wiring.py"] | ||
provenance.supply.values | string | "1ba0e74d799c" | ||
provenance.supply.history | array (1) | |||
provenance.supply.history[].date | string | "2026-09-28" | ||
provenance.supply.history[].change | string | "recorded" | ||
provenance.power_on_pos | object | |||
provenance.power_on_pos.source | string | "assumption" | ||
provenance.power_on_pos.note | string | "where the axes stand when the machine is switched on" | ||
provenance.power_on_pos.uncertainty | string | "anywhere in travel" | ||
provenance.power_on_pos.refs | array (0) | |||
provenance.power_on_pos.values | string | "c1d7b9e4c251" | ||
provenance.power_on_pos.history | array (1) | |||
provenance.power_on_pos.history[].date | string | "2026-09-28" | ||
provenance.power_on_pos.history[].change | string | "recorded" | ||
provenance.drives.motor | object | |||
provenance.drives.motor.source | string | "datasheet" | ||
provenance.drives.motor.note | string | "research D 2.5 (StepperOnline 23HS22-2804D-E1000 datashe… | ||
provenance.drives.motor.uncertainty | string | "+-10 %" | ||
provenance.drives.motor.refs | array (2) | ["research D 2.5", "23HS22-2804D-E1000 datasheet"] | ||
provenance.drives.motor.values | string | "63894f881246" | ||
provenance.drives.motor.history | array (1) | |||
provenance.drives.motor.history[].date | string | "2026-09-28" | ||
provenance.drives.motor.history[].change | string | "recorded" | ||
provenance.drives.motor.detent_nm | object | |||
provenance.drives.motor.detent_nm.source | string | "assumption" | ||
provenance.drives.motor.detent_nm.note | string | "D 8: 0.03-0.07 N m; measure on the unpowered motor" | ||
provenance.drives.motor.detent_nm.uncertainty | string | "0.03-0.07 N m" | ||
provenance.drives.motor.detent_nm.refs | array (1) | ["research D 8"] | ||
provenance.drives.motor.detent_nm.values | string | "887b77e9f037" | ||
provenance.drives.motor.detent_nm.history | array (1) | |||
provenance.drives.motor.detent_nm.history[].date | string | "2026-09-28" | ||
provenance.drives.motor.detent_nm.history[].change | string | "recorded" | ||
provenance.drives.motor.torque_constant_nm_a | object | |||
provenance.drives.motor.torque_constant_nm_a.source | string | "calc" | ||
provenance.drives.motor.torque_constant_nm_a.note | string | "holding torque over the rated current" | ||
provenance.drives.motor.torque_constant_nm_a.uncertainty | string | "+-10 %" | ||
provenance.drives.motor.torque_constant_nm_a.refs | array (0) | |||
provenance.drives.motor.torque_constant_nm_a.values | string | "085fa9dbd665" | ||
provenance.drives.motor.torque_constant_nm_a.history | array (1) | |||
provenance.drives.motor.torque_constant_nm_a.history[].date | string | "2026-09-28" | ||
provenance.drives.motor.torque_constant_nm_a.history[].change | string | "recorded" | ||
provenance.drives.motor.iron_loss_nm_per_krpm | object | |||
provenance.drives.motor.iron_loss_nm_per_krpm.source | string | "calc" | ||
provenance.drives.motor.iron_loss_nm_per_krpm.note | string | "fitted so the L3 dyno meets the pull-out curve (worst 0.… | ||
provenance.drives.motor.iron_loss_nm_per_krpm.uncertainty | string | "+-30 %" | ||
provenance.drives.motor.iron_loss_nm_per_krpm.refs | array (1) | ["research D 2.2"] | ||
provenance.drives.motor.iron_loss_nm_per_krpm.values | string | "0c9c62efc7d0" | ||
provenance.drives.motor.iron_loss_nm_per_krpm.history | array (1) | |||
provenance.drives.motor.iron_loss_nm_per_krpm.history[].date | string | "2026-09-28" | ||
provenance.drives.motor.iron_loss_nm_per_krpm.history[].change | string | "recorded" | ||
provenance.drives.motor.power_up_jump | object | |||
provenance.drives.motor.power_up_jump.source | string | "assumption" | ||
provenance.drives.motor.power_up_jump.note | string | "the rotor snaps to the nearest 4-full-step phase origin … | ||
provenance.drives.motor.power_up_jump.uncertainty | string | "+-2 full steps" | ||
provenance.drives.motor.power_up_jump.refs | array (1) | ["research D 8"] | ||
provenance.drives.motor.power_up_jump.values | string | "30c0028e178f" | ||
provenance.drives.motor.power_up_jump.history | array (1) | |||
provenance.drives.motor.power_up_jump.history[].date | string | "2026-09-28" | ||
provenance.drives.motor.power_up_jump.history[].change | string | "recorded" | ||
provenance.drives.pullout_48v_rpm_nm | object | |||
provenance.drives.pullout_48v_rpm_nm.source | string | "calc" | ||
provenance.drives.pullout_48v_rpm_nm.note | string | "research D 2.2: dq fit of 24/36 V vendor curves extrapol… | ||
provenance.drives.pullout_48v_rpm_nm.uncertainty | string | "+-20 %" | ||
provenance.drives.pullout_48v_rpm_nm.refs | array (1) | ["research D 2.2"] | ||
provenance.drives.pullout_48v_rpm_nm.values | string | "efeb1f50c7a0" | ||
provenance.drives.pullout_48v_rpm_nm.history | array (1) | |||
provenance.drives.pullout_48v_rpm_nm.history[].date | string | "2026-09-28" | ||
provenance.drives.pullout_48v_rpm_nm.history[].change | string | "recorded" | ||
provenance.drives.lead_mm/coupling_inertia_kgm2 | object | |||
provenance.drives.lead_mm/coupling_inertia_kgm2.source | string | "datasheet" | ||
provenance.drives.lead_mm/coupling_inertia_kgm2.note | string | "SFU1204 screw lead; coupling from its catalogue" | ||
provenance.drives.lead_mm/coupling_inertia_kgm2.uncertainty | string | "exact / +-10 %" | ||
provenance.drives.lead_mm/coupling_inertia_kgm2.refs | array (1) | ["params.py"] | ||
provenance.drives.lead_mm/coupling_inertia_kgm2.values | string | "4537839a8fc4" | ||
provenance.drives.lead_mm/coupling_inertia_kgm2.history | array (1) | |||
provenance.drives.lead_mm/coupling_inertia_kgm2.history[].date | string | "2026-09-28" | ||
provenance.drives.lead_mm/coupling_inertia_kgm2.history[].change | string | "recorded" | ||
provenance.drives.model/note/step_s | object | |||
provenance.drives.model/note/step_s.source | string | "model" | ||
provenance.drives.model/note/step_s.note | string | "the drive model's level and its time step" | ||
provenance.drives.model/note/step_s.uncertainty | string | "" | ||
provenance.drives.model/note/step_s.refs | array (0) | |||
provenance.drives.model/note/step_s.values | string | "b9de623b88cf" | ||
provenance.drives.model/note/step_s.history | array (1) | |||
provenance.drives.model/note/step_s.history[].date | string | "2026-09-28" | ||
provenance.drives.model/note/step_s.history[].change | string | "recorded" | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n | object | |||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.source | string | "calc" | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.note | string | "params.py screw layout (BF journal, thread at d 11 mm, B… | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.uncertainty | string | "+-5 %" | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.refs | array (2) | ["params.py", "out/report.json"] | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.values | string | "8c494a04976c" | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.history | array (2) | |||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.history[].change | string | "recorded" | ||
provenance.drives.axes[].equivalent_mass_kg | object | |||
provenance.drives.axes[].equivalent_mass_kg.source | string | "calc" | ||
provenance.drives.axes[].equivalent_mass_kg.note | string | "(rotor + screw + coupling) / (lead / 2 pi)^2 + moving mass" | ||
provenance.drives.axes[].equivalent_mass_kg.uncertainty | string | "+-5 %" | ||
provenance.drives.axes[].equivalent_mass_kg.refs | array (0) | |||
provenance.drives.axes[].equivalent_mass_kg.values | string | "ff0c2f1f9bd5" | ||
provenance.drives.axes[].equivalent_mass_kg.history | array (2) | |||
provenance.drives.axes[].equivalent_mass_kg.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].equivalent_mass_kg.history[].change | string | "recorded" | ||
provenance.drives.axes[].friction_n | object | |||
provenance.drives.axes[].friction_n.source | string | "assumption" | ||
provenance.drives.axes[].friction_n.note | string | "nut + BK drag 0.03 N m (research M 5.1: 0.025-0.04 N m, … | ||
provenance.drives.axes[].friction_n.uncertainty | string | "+-50 %" | ||
provenance.drives.axes[].friction_n.refs | array (3) | ["research D 3.5", "research D 4", "research M 5.1"] | ||
provenance.drives.axes[].friction_n.values | string | "9ecda1bc4a65" | ||
provenance.drives.axes[].friction_n.history | array (3) | |||
provenance.drives.axes[].friction_n.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].friction_n.history[].change | string | "recorded" | ||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg | object | |||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.source | string | "calc" | ||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.note | string | "the axis' masses split for the two- and three-mass model… | ||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.uncertainty | string | "+-5 %" | ||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.refs | array (0) | |||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.values | string | "e91b02c7c7c5" | ||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.history | array (2) | |||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.history[].change | string | "recorded" | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um | object | |||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.source | string | "calc" | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.note | string | "from params.py's screw geometry and the stiffness report… | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.uncertainty | string | "+-20 %" | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.refs | array (2) | ["out/report.json", "research D 3.1"] | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.values | string | "2bb88bca5104" | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.history | array (2) | |||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.history[].change | string | "recorded" | ||
provenance.drives.axes[].l2.coupling_n_um | object | |||
provenance.drives.axes[].l2.coupling_n_um.source | string | "datasheet" | ||
provenance.drives.axes[].l2.coupling_n_um.note | string | "KTR ROTEX GS12 92 ShA dynamic torsional stiffness (482 N… | ||
provenance.drives.axes[].l2.coupling_n_um.uncertainty | string | "+-20 %" | ||
provenance.drives.axes[].l2.coupling_n_um.refs | array (1) | ["KTR ROTEX GS catalogue"] | ||
provenance.drives.axes[].l2.coupling_n_um.values | string | "8a4b82bba26f" | ||
provenance.drives.axes[].l2.coupling_n_um.history | array (1) | |||
provenance.drives.axes[].l2.coupling_n_um.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].l2.coupling_n_um.history[].change | string | "recorded" | ||
provenance.drives.axes[].l2.nut_hertz_n_um15 | object | |||
provenance.drives.axes[].l2.nut_hertz_n_um15.source | string | "literature" | ||
provenance.drives.axes[].l2.nut_hertz_n_um15.note | string | "c of F = c d^1.5 fitted to the catalogue nut stiffness a… | ||
provenance.drives.axes[].l2.nut_hertz_n_um15.uncertainty | string | "+-20 %" | ||
provenance.drives.axes[].l2.nut_hertz_n_um15.refs | array (2) | ["HIWIN ball screw catalogue", "research D 3.1"] | ||
provenance.drives.axes[].l2.nut_hertz_n_um15.values | string | "eeef94d18e8e" | ||
provenance.drives.axes[].l2.nut_hertz_n_um15.history | array (1) | |||
provenance.drives.axes[].l2.nut_hertz_n_um15.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].l2.nut_hertz_n_um15.history[].change | string | "recorded" | ||
provenance.drives.axes[].l2.frame | object | |||
provenance.drives.axes[].l2.frame.source | string | "calc" | ||
provenance.drives.axes[].l2.frame.note | string | "the X drive's portal (research note M 2.4): the modal FE… | ||
provenance.drives.axes[].l2.frame.uncertainty | string | "frequency +-20-40 %, damping x2-5 (note M)" | ||
provenance.drives.axes[].l2.frame.refs | array (3) | ["out/fea/modal_result.json", "research M 2.2", "research… | ||
provenance.drives.axes[].l2.frame.values | string | "89419ae93b52" | ||
provenance.drives.axes[].l2.frame.history | array (2) | |||
provenance.drives.axes[].l2.frame.history[].date | string | "2026-10-01" | ||
provenance.drives.axes[].l2.frame.history[].change | string | "recorded" | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n | object | |||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.source | string | "assumption" | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.note | string | "the friction split between the motor side (BK, nut) and … | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.uncertainty | string | "+-50 %" | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.refs | array (1) | ["research D 3.5"] | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.values | string | "6633b308b6a7" | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.history | array (3) | |||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.history[].date | string | "2026-09-28" | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.history[].change | string | "recorded" | ||
provenance.drives.drive | object | |||
provenance.drives.drive.source | string | "assumption" | ||
provenance.drives.drive.note | string | "CL57T-class values; loop gains, smoothing and the follow… | ||
provenance.drives.drive.uncertainty | string | "unknown until read out" | ||
provenance.drives.drive.refs | array (1) | ["research D 2.3"] | ||
provenance.drives.drive.values | string | "128369079092" | ||
provenance.drives.drive.history | array (1) | |||
provenance.drives.drive.history[].date | string | "2026-09-28" | ||
provenance.drives.drive.history[].change | string | "recorded" | ||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg | object | |||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.source | string | "assumption" | ||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.note | string | "CL57T-class drive internals (not published): current loo… | ||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.uncertainty | string | "unknown" | ||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.refs | array (0) | |||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.values | string | "d967789c1e2b" | ||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.history | array (1) | |||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.history[].date | string | "2026-09-28" | ||
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.history[].change | string | "recorded" | ||
provenance.drives.drive.l3_sub_steps | object | |||
provenance.drives.drive.l3_sub_steps.source | string | "model" | ||
provenance.drives.drive.l3_sub_steps.note | string | "the L3 electrical model's time step" | ||
provenance.drives.drive.l3_sub_steps.uncertainty | string | "" | ||
provenance.drives.drive.l3_sub_steps.refs | array (0) | |||
provenance.drives.drive.l3_sub_steps.values | string | "9ae026b5ae69" | ||
provenance.drives.drive.l3_sub_steps.history | array (1) | |||
provenance.drives.drive.l3_sub_steps.history[].date | string | "2026-09-28" | ||
provenance.drives.drive.l3_sub_steps.history[].change | string | "recorded" | ||
provenance.drives.alm | object | |||
provenance.drives.alm.source | string | "design" | ||
provenance.drives.alm.note | string | "wiring.py ALM chain" | ||
provenance.drives.alm.uncertainty | string | "exact" | ||
provenance.drives.alm.refs | array (1) | ["wiring.py"] | ||
provenance.drives.alm.values | string | "b13146056e48" | ||
provenance.drives.alm.history | array (2) | |||
provenance.drives.alm.history[].date | string | "2026-09-28" | ||
provenance.drives.alm.history[].change | string | "recorded" | ||
provenance.drives.power | object | |||
provenance.drives.power.source | string | "design" | ||
provenance.drives.power.note | string | "wiring.py KM1/PSU1 topology; all timings assumed" | ||
provenance.drives.power.uncertainty | string | "timings +-50 %" | ||
provenance.drives.power.refs | array (1) | ["wiring.py"] | ||
provenance.drives.power.values | string | "bf089e12beff" | ||
provenance.drives.power.history | array (1) | |||
provenance.drives.power.history[].date | string | "2026-09-28" | ||
provenance.drives.power.history[].change | string | "recorded" | ||
provenance.drives.l2 | object | |||
provenance.drives.l2.source | string | "model" | ||
provenance.drives.l2.note | string | "the flexible transmission's settings: mass count, sub-st… | ||
provenance.drives.l2.uncertainty | string | "" | ||
provenance.drives.l2.refs | array (0) | |||
provenance.drives.l2.values | string | "9e959770a320" | ||
provenance.drives.l2.history | array (1) | |||
provenance.drives.l2.history[].date | string | "2026-09-28" | ||
provenance.drives.l2.history[].change | string | "recorded" | ||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s | object | |||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.source | string | "assumption" | ||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.note | string | "damping, the drive's current lag and smoothing, the hard… | ||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.uncertainty | string | "+-50 %" | ||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.refs | array (1) | ["research D 3.5"] | ||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.values | string | "46b2210b6c28" | ||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.history | array (1) | |||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.history[].date | string | "2026-09-28" | ||
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.history[].change | string | "recorded" | ||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um | object | |||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.source | string | "literature" | ||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.note | string | "Stribeck and LuGre friction of a ball-screw axis: typica… | ||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.uncertainty | string | "+-50 %" | ||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.refs | array (1) | ["research D 4"] | ||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.values | string | "f5bc18522f71" | ||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.history | array (1) | |||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.history[].date | string | "2026-09-28" | ||
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.history[].change | string | "recorded" | ||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k | object | |||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.source | string | "literature" | ||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.note | string | "handbook thermal expansion and specific heat near 20 C (… | ||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.uncertainty | string | "+-10 % (plastics, wood: +-50 %)" | ||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.refs | array (0) | |||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.values | string | "4f53cda18c2b" | ||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.history | array (1) | |||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.history[].date | string | "2026-10-01" | ||
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.history[].change | string | "recorded" | ||
provenance.spindle.vfd.params | object | |||
provenance.spindle.vfd.params.source | string | "design" | ||
provenance.spindle.vfd.params.note | string | "wiring.py VFD_PARAMS (the commissioning list)" | ||
provenance.spindle.vfd.params.uncertainty | string | "exact" | ||
provenance.spindle.vfd.params.refs | array (1) | ["wiring.py"] | ||
provenance.spindle.vfd.params.values | string | "5a5b96a140b8" | ||
provenance.spindle.vfd.params.history | array (1) | |||
provenance.spindle.vfd.params.history[].date | string | "2026-09-28" | ||
provenance.spindle.vfd.params.history[].change | string | "recorded" | ||
provenance.spindle.vfd.factory | object | |||
provenance.spindle.vfd.factory.source | string | "datasheet" | ||
provenance.spindle.vfd.factory.note | string | "HY series manual (2010-06-27) factory settings as the tw… | ||
provenance.spindle.vfd.factory.uncertainty | string | "unverified" | ||
provenance.spindle.vfd.factory.refs | array (1) | ["HY series manual 2010-06-27"] | ||
provenance.spindle.vfd.factory.values | string | "fd967f578df3" | ||
provenance.spindle.vfd.factory.history | array (2) | |||
provenance.spindle.vfd.factory.history[].date | string | "2026-09-28" | ||
provenance.spindle.vfd.factory.history[].change | string | "recorded" | ||
provenance.spindle.vfd.protocol | object | |||
provenance.spindle.vfd.protocol.source | string | "datasheet" | ||
provenance.spindle.vfd.protocol.note | string | "HY manual 2010-06-27 communication chapter; reply length… | ||
provenance.spindle.vfd.protocol.uncertainty | string | "exact" | ||
provenance.spindle.vfd.protocol.refs | array (3) | ["HY series manual 2010-06-27", "LinuxCNC hy_comm.c", "hu… | ||
provenance.spindle.vfd.protocol.values | string | "e777a31a51cb" | ||
provenance.spindle.vfd.protocol.history | array (2) | |||
provenance.spindle.vfd.protocol.history[].date | string | "2026-09-28" | ||
provenance.spindle.vfd.protocol.history[].change | string | "recorded" | ||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms | object | |||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.source | string | "assumption" | ||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.note | string | "min_gap from the spindle plugin's note that HY units do … | ||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.uncertainty | string | "+-50 %" | ||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.refs | array (1) | ["huanyang.c (Huanyang v1 spindle plugin)"] | ||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.values | string | "8affe8eea550" | ||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.history | array (2) | |||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.history[].date | string | "2026-09-28" | ||
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.history[].change | string | "recorded" | ||
provenance.spindle.vfd.boot_s/oc_factor/overload_* | object | |||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.source | string | "assumption" | ||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.note | string | "typical small-VFD values" | ||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.uncertainty | string | "+-50 %" | ||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.refs | array (0) | |||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.values | string | "c4b9f0a05cf3" | ||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.history | array (1) | |||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.history[].date | string | "2026-09-28" | ||
provenance.spindle.vfd.boot_s/oc_factor/overload_*.history[].change | string | "recorded" | ||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v | object | |||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.source | string | "assumption" | ||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.note | string | "for a 1.5 kW 220 V unit (ride-through ~0.2 s idling, ~25… | ||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.uncertainty | string | "+-30 %" | ||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.refs | array (0) | |||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.values | string | "56d18f3625cb" | ||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.history | array (1) | |||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.history[].date | string | "2026-09-28" | ||
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.history[].change | string | "recorded" | ||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port | object | |||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.source | string | "datasheet" | ||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.note | string | "the VFD's nameplate and wiring.py" | ||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.uncertainty | string | "exact" | ||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.refs | array (1) | ["wiring.py"] | ||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.values | string | "61fe0177629e" | ||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.history | array (1) | |||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.history[].date | string | "2026-09-28" | ||
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.history[].change | string | "recorded" | ||
provenance.spindle.motor.model/rated_*/poles | object | |||
provenance.spindle.motor.model/rated_*/poles.source | string | "datasheet" | ||
provenance.spindle.motor.model/rated_*/poles.note | string | "model.py spindle BOM line (nameplate), checked against V… | ||
provenance.spindle.motor.model/rated_*/poles.uncertainty | string | "exact" | ||
provenance.spindle.motor.model/rated_*/poles.refs | array (1) | ["model.py"] | ||
provenance.spindle.motor.model/rated_*/poles.values | string | "f9ddafd9857f" | ||
provenance.spindle.motor.model/rated_*/poles.history | array (1) | |||
provenance.spindle.motor.model/rated_*/poles.history[].date | string | "2026-09-28" | ||
provenance.spindle.motor.model/rated_*/poles.history[].change | string | "recorded" | ||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a | object | |||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.source | string | "assumption" | ||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.note | string | "for a 2-pole 400 Hz spindle motor; measure (idle current… | ||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.uncertainty | string | "+-30 %" | ||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.refs | array (0) | |||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.values | string | "5d17fb96313c" | ||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.history | array (1) | |||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.history[].date | string | "2026-09-28" | ||
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.history[].change | string | "recorded" | ||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms | object | |||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.source | string | "assumption" | ||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.note | string | "rotor ~ 0.75 kg, 35 mm; bearings and windage ~ 80 W at 2… | ||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.uncertainty | string | "+-50 %" | ||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.refs | array (0) | |||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.values | string | "b24f41347221" | ||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.history | array (1) | |||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.history[].date | string | "2026-09-28" | ||
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.history[].change | string | "recorded" | ||
provenance.spindle.coolant_pump | object | |||
provenance.spindle.coolant_pump.source | string | "design" | ||
provenance.spindle.coolant_pump.note | string | "wiring.py relay K2" | ||
provenance.spindle.coolant_pump.uncertainty | string | "exact" | ||
provenance.spindle.coolant_pump.refs | array (1) | ["wiring.py"] | ||
provenance.spindle.coolant_pump.values | string | "0b6b02069eb0" | ||
provenance.spindle.coolant_pump.history | array (1) | |||
provenance.spindle.coolant_pump.history[].date | string | "2026-09-28" | ||
provenance.spindle.coolant_pump.history[].change | string | "recorded" | ||
provenance.spindle.encoder | object | |||
provenance.spindle.encoder.source | string | "design" | ||
provenance.spindle.encoder.note | string | "the MC-1 has no spindle encoder (none in model.py's BOM … | ||
provenance.spindle.encoder.uncertainty | string | "exact" | ||
provenance.spindle.encoder.refs | array (2) | ["model.py", "wiring.py"] | ||
provenance.spindle.encoder.values | string | "ecfe50f9ac79" | ||
provenance.spindle.encoder.history | array (1) | |||
provenance.spindle.encoder.history[].date | string | "2026-10-04" | ||
provenance.spindle.encoder.history[].change | string | "recorded" | ||
provenance.tool_setter | object | |||
provenance.tool_setter.source | string | "cad" | ||
provenance.tool_setter.note | string | "params.SETTER_XY/SETTER_H/SETTER_D" | ||
provenance.tool_setter.uncertainty | string | "exact" | ||
provenance.tool_setter.refs | array (1) | ["params.py"] | ||
provenance.tool_setter.values | string | "10225e2b0c3e" | ||
provenance.tool_setter.history | array (1) | |||
provenance.tool_setter.history[].date | string | "2026-09-28" | ||
provenance.tool_setter.history[].change | string | "recorded" | ||
provenance.tool_setter.overtravel/contact | object | |||
provenance.tool_setter.overtravel/contact.source | string | "assumption" | ||
provenance.tool_setter.overtravel/contact.note | string | "the setter's plunger travel and switch" | ||
provenance.tool_setter.overtravel/contact.uncertainty | string | "+-50 %" | ||
provenance.tool_setter.overtravel/contact.refs | array (0) | |||
provenance.tool_setter.overtravel/contact.values | string | "e08cb500a33e" | ||
provenance.tool_setter.overtravel/contact.history | array (1) | |||
provenance.tool_setter.overtravel/contact.history[].date | string | "2026-09-28" | ||
provenance.tool_setter.overtravel/contact.history[].change | string | "recorded" | ||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms | object | |||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.source | string | "assumption" | ||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.note | string | "a mechanical setter's pre-travel, repeatability, reset h… | ||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.uncertainty | string | "+-50 %" | ||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.refs | array (0) | |||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.values | string | "ece4cb842299" | ||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.history | array (1) | |||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.history[].date | string | "2026-09-28" | ||
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.history[].change | string | "recorded" | ||
provenance.touch_probe.model | object | |||
provenance.touch_probe.model.source | string | "design" | ||
provenance.touch_probe.model.note | string | "the twin's touch probe by default: ideal - it switches a… | ||
provenance.touch_probe.model.uncertainty | string | "exact" | ||
provenance.touch_probe.model.refs | array (1) | ["twin/docs/06-virtual-machine.md"] | ||
provenance.touch_probe.model.values | string | "aed14a680982" | ||
provenance.touch_probe.model.history | array (1) | |||
provenance.touch_probe.model.history[].date | string | "2026-10-05" | ||
provenance.touch_probe.model.history[].change | string | "recorded" | ||
provenance.touch_probe.stylus_travel_mm | object | |||
provenance.touch_probe.stylus_travel_mm.source | string | "assumption" | ||
provenance.touch_probe.stylus_travel_mm.note | string | "how far a probe's stylus gives way before it breaks" | ||
provenance.touch_probe.stylus_travel_mm.uncertainty | string | "+-50 %" | ||
provenance.touch_probe.stylus_travel_mm.refs | array (0) | |||
provenance.touch_probe.stylus_travel_mm.values | string | "64e791156692" | ||
provenance.touch_probe.stylus_travel_mm.history | array (1) | |||
provenance.touch_probe.stylus_travel_mm.history[].date | string | "2026-10-05" | ||
provenance.touch_probe.stylus_travel_mm.history[].change | string | "recorded" | ||
provenance.touch_probe.geometry | object | |||
provenance.touch_probe.geometry.source | string | "assumption" | ||
provenance.touch_probe.geometry.note | string | "the probe's shape for the collision zone: its stylus ove… | ||
provenance.touch_probe.geometry.uncertainty | string | "+-50 %" | ||
provenance.touch_probe.geometry.refs | array (0) | |||
provenance.touch_probe.geometry.values | string | "7ebb1187c0cf" | ||
provenance.touch_probe.geometry.history | array (1) | |||
provenance.touch_probe.geometry.history[].date | string | "2026-10-07" | ||
provenance.touch_probe.geometry.history[].change | string | "recorded" | ||
provenance.touch_probe.styli | object | |||
provenance.touch_probe.styli.source | string | "assumption" | ||
provenance.touch_probe.styli.note | string | "the styli by ball size (1.1): each ball's stem and where… | ||
provenance.touch_probe.styli.uncertainty | string | "+-50 %" | ||
provenance.touch_probe.styli.refs | array (0) | |||
provenance.touch_probe.styli.values | string | "c67e58a03589" | ||
provenance.touch_probe.styli.history | array (1) | |||
provenance.touch_probe.styli.history[].date | string | "2026-10-10" | ||
provenance.touch_probe.styli.history[].change | string | "recorded" | ||
provenance.touch_probe.typical | object | |||
provenance.touch_probe.typical.source | string | "assumption" | ||
provenance.touch_probe.typical.note | string | "a hobby-class kinematic touch-trigger probe (the MC-1's … | ||
provenance.touch_probe.typical.uncertainty | string | "+-100 %" | ||
provenance.touch_probe.typical.refs | array (1) | ["twin/docs/research/O_real_machine_sync.md"] | ||
provenance.touch_probe.typical.values | string | "eb49d5d4bdc5" | ||
provenance.touch_probe.typical.history | array (1) | |||
provenance.touch_probe.typical.history[].date | string | "2026-10-05" | ||
provenance.touch_probe.typical.history[].change | string | "recorded" | ||
provenance.sound.sources | object | |||
provenance.sound.sources.source | string | "cad" | ||
provenance.sound.sources.note | string | "params.py: the motors' body and encoder behind their LAY… | ||
provenance.sound.sources.uncertainty | string | "+-30 mm" | ||
provenance.sound.sources.refs | array (1) | ["params.py"] | ||
provenance.sound.sources.values | string | "d285ce7e5940" | ||
provenance.sound.sources.history | array (2) | |||
provenance.sound.sources.history[].date | string | "2026-10-02" | ||
provenance.sound.sources.history[].change | string | "recorded" | ||
provenance.sound.sources.pump | object | |||
provenance.sound.sources.pump.source | string | "assumption" | ||
provenance.sound.sources.pump.note | string | "the coolant tank and pump are not in the design: on the … | ||
provenance.sound.sources.pump.uncertainty | string | "anywhere beside the machine" | ||
provenance.sound.sources.pump.refs | array (0) | |||
provenance.sound.sources.pump.values | string | "426f248647bc" | ||
provenance.sound.sources.pump.history | array (1) | |||
provenance.sound.sources.pump.history[].date | string | "2026-10-02" | ||
provenance.sound.sources.pump.history[].change | string | "recorded" | ||
provenance.sound.listener | object | |||
provenance.sound.listener.source | string | "assumption" | ||
provenance.sound.listener.note | string | "a standing operator half a metre in front of the base, e… | ||
provenance.sound.listener.uncertainty | string | "+-0.3 m" | ||
provenance.sound.listener.refs | array (0) | |||
provenance.sound.listener.values | string | "a89116f00a83" | ||
provenance.sound.listener.history | array (1) | |||
provenance.sound.listener.history[].date | string | "2026-10-02" | ||
provenance.sound.listener.history[].change | string | "recorded" | ||
provenance.sound.radiation | object | |||
provenance.sound.radiation.source | string | "assumption" | ||
provenance.sound.radiation.note | string | "research note N 2.4: the cutting force through the machi… | ||
provenance.sound.radiation.uncertainty | string | "+-10 dB" | ||
provenance.sound.radiation.refs | array (1) | ["research N 2.4"] | ||
provenance.sound.radiation.values | string | "37e223dacb01" | ||
provenance.sound.radiation.history | array (1) | |||
provenance.sound.radiation.history[].date | string | "2026-10-02" | ||
provenance.sound.radiation.history[].change | string | "recorded" | ||
provenance.collision | object | |||
provenance.collision.source | string | "cad" | ||
provenance.collision.note | string | "stdparts.py spindle()/tool_setter() evaluated with stand… | ||
provenance.collision.uncertainty | string | "+-0.5 mm" | ||
provenance.collision.refs | array (2) | ["stdparts.py", "params.py"] | ||
provenance.collision.values | string | "f946c8fd4f7e" | ||
provenance.collision.history | array (1) | |||
provenance.collision.history[].date | string | "2026-09-28" | ||
provenance.collision.history[].change | string | "recorded" | ||
provenance.collision.groups | object | |||
provenance.collision.groups.source | string | "cad" | ||
provenance.collision.groups.note | string | "boxes around the Z slide, the X carriage and the beam fr… | ||
provenance.collision.groups.uncertainty | string | "+-2 mm" | ||
provenance.collision.groups.refs | array (1) | ["params.py"] | ||
provenance.collision.groups.values | string | "9aabca6ecc98" | ||
provenance.collision.groups.history | array (1) | |||
provenance.collision.groups.history[].date | string | "2026-09-28" | ||
provenance.collision.groups.history[].change | string | "recorded" | ||
provenance.collision.near_miss_mm | object | |||
provenance.collision.near_miss_mm.source | string | "design" | ||
provenance.collision.near_miss_mm.note | string | "the safety distance warned about" | ||
provenance.collision.near_miss_mm.uncertainty | string | "exact" | ||
provenance.collision.near_miss_mm.refs | array (0) | |||
provenance.collision.near_miss_mm.values | string | "1dff6251b5a5" | ||
provenance.collision.near_miss_mm.history | array (1) | |||
provenance.collision.near_miss_mm.history[].date | string | "2026-09-28" | ||
provenance.collision.near_miss_mm.history[].change | string | "recorded" | ||
provenance.cutting.materials | object | |||
provenance.cutting.materials.source | string | "literature" | ||
provenance.cutting.materials.note | string | "research note H 3.1: aluminium alloys the measured set o… | ||
provenance.cutting.materials.uncertainty | string | "+-20 % (placeholders: unknown)" | ||
provenance.cutting.materials.refs | array (2) | ["research H 3.1", "research C 1.5"] | ||
provenance.cutting.materials.values | string | "e456ee942dd5" | ||
provenance.cutting.materials.history | array (5) | |||
provenance.cutting.materials.history[].date | string | "2026-09-28" | ||
provenance.cutting.materials.history[].change | string | "recorded" | ||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3 | object | |||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.source | string | "literature" | ||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.note | string | "the default material's set (6061-T6, research note C 1.5)" | ||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.uncertainty | string | "+-20 %" | ||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.refs | array (1) | ["research C 1.5"] | ||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.values | string | "880d1b10a373" | ||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.history | array (1) | |||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.history[].date | string | "2026-09-28" | ||
provenance.cutting.material/ktc_n_mm2/krc_n_mm2/kac_n_mm2/kte_n_mm/kre_n_mm/kae_n_mm/kc_plunge_j_mm3.history[].change | string | "recorded" | ||
provenance.cutting.tool_default/tool_geometry | object | |||
provenance.cutting.tool_default/tool_geometry.source | string | "literature" | ||
provenance.cutting.tool_default/tool_geometry.note | string | "a typical 2-flute carbide end mill" | ||
provenance.cutting.tool_default/tool_geometry.uncertainty | string | "" | ||
provenance.cutting.tool_default/tool_geometry.refs | array (1) | ["research H 3.1"] | ||
provenance.cutting.tool_default/tool_geometry.values | string | "c5b73e4d95ee" | ||
provenance.cutting.tool_default/tool_geometry.history | array (1) | |||
provenance.cutting.tool_default/tool_geometry.history[].date | string | "2026-09-28" | ||
provenance.cutting.tool_default/tool_geometry.history[].change | string | "recorded" | ||
provenance.cutting.tool_strength | object | |||
provenance.cutting.tool_strength.source | string | "assumption" | ||
provenance.cutting.tool_strength.note | string | "research note L 4.4: carbide rod's transverse rupture st… | ||
provenance.cutting.tool_strength.uncertainty | string | "+-30 %" | ||
provenance.cutting.tool_strength.refs | array (1) | ["research L 4.4"] | ||
provenance.cutting.tool_strength.values | string | "6fe0b6b19a43" | ||
provenance.cutting.tool_strength.history | array (1) | |||
provenance.cutting.tool_strength.history[].date | string | "2026-09-30" | ||
provenance.cutting.tool_strength.history[].change | string | "recorded" | ||
provenance.cutting.force_model | object | |||
provenance.cutting.force_model.source | string | "model" | ||
provenance.cutting.force_model.note | string | "the tooth-level force kernel (V0 P1, research note L 3.1… | ||
provenance.cutting.force_model.uncertainty | string | "" | ||
provenance.cutting.force_model.refs | array (1) | ["research L 3.1"] | ||
provenance.cutting.force_model.values | string | "e2d39d8fb75b" | ||
provenance.cutting.force_model.history | array (1) | |||
provenance.cutting.force_model.history[].date | string | "2026-10-01" | ||
provenance.cutting.force_model.history[].change | string | "recorded" | ||
provenance.cutting.runout | object | |||
provenance.cutting.runout.source | string | "assumption" | ||
provenance.cutting.runout.note | string | "research note L 3.3: an ER11 collet and the spindle at t… | ||
provenance.cutting.runout.uncertainty | string | "5-15 um" | ||
provenance.cutting.runout.refs | array (1) | ["research L 3.3"] | ||
provenance.cutting.runout.values | string | "be7feab42ad4" | ||
provenance.cutting.runout.history | array (2) | |||
provenance.cutting.runout.history[].date | string | "2026-10-01" | ||
provenance.cutting.runout.history[].change | string | "recorded" | ||
provenance.cutting.edge | object | |||
provenance.cutting.edge.source | string | "literature" | ||
provenance.cutting.edge.note | string | "research note L 3.2: a new micro-grain carbide edge 1-3 … | ||
provenance.cutting.edge.uncertainty | string | "+-50 %" | ||
provenance.cutting.edge.refs | array (1) | ["research L 3.2"] | ||
provenance.cutting.edge.values | string | "22f50f57eb94" | ||
provenance.cutting.edge.history | array (1) | |||
provenance.cutting.edge.history[].date | string | "2026-10-01" | ||
provenance.cutting.edge.history[].change | string | "recorded" | ||
provenance.cutting.wear | object | |||
provenance.cutting.wear.source | string | "literature" | ||
provenance.cutting.wear.note | string | "the tools' wear book (1.1, wear.h; kept and reported onl… | ||
provenance.cutting.wear.uncertainty | string | "+-50 %" | ||
provenance.cutting.wear.refs | array (1) | ["wear_life_data.md section 2"] | ||
provenance.cutting.wear.values | string | "300e453ff41d" | ||
provenance.cutting.wear.history | array (1) | |||
provenance.cutting.wear.history[].date | string | "2026-10-13" | ||
provenance.cutting.wear.history[].change | string | "recorded" | ||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach | object | |||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.source | string | "model" | ||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.note | string | "the workpiece's grid and the cut's time and height resol… | ||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.uncertainty | string | "" | ||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.refs | array (0) | |||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.values | string | "befd22532a22" | ||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.history | array (1) | |||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.history[].date | string | "2026-10-07" | ||
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.history[].change | string | "recorded" | ||
provenance.cutting.variation | object | |||
provenance.cutting.variation.source | string | "model" | ||
provenance.cutting.variation.note | string | "tooth-to-tooth variation of the cutting coefficients on … | ||
provenance.cutting.variation.uncertainty | string | "" | ||
provenance.cutting.variation.refs | array (0) | |||
provenance.cutting.variation.values | string | "d461f9d7f2b0" | ||
provenance.cutting.variation.history | array (1) | |||
provenance.cutting.variation.history[].date | string | "2026-09-28" | ||
provenance.cutting.variation.history[].change | string | "recorded" | ||
provenance.cutting.compliance | object | |||
provenance.cutting.compliance.source | string | "calc" | ||
provenance.cutting.compliance.note | string | "the tool as a beam (E, core, flute length) with joint, f… | ||
provenance.cutting.compliance.uncertainty | string | "+-30 %" | ||
provenance.cutting.compliance.refs | array (3) | ["out/report.json", "out/fea/modal_result.json", "researc… | ||
provenance.cutting.compliance.values | string | "785e2a3fa895" | ||
provenance.cutting.compliance.history | array (4) | |||
provenance.cutting.compliance.history[].date | string | "2026-09-28" | ||
provenance.cutting.compliance.history[].change | string | "recorded" | ||
provenance.cutting.dynamics | object | |||
provenance.cutting.dynamics.source | string | "assumption" | ||
provenance.cutting.dynamics.note | string | "the structure's, the holder's and the tool's own bending… | ||
provenance.cutting.dynamics.uncertainty | string | "+-30 % (frequencies; damping 1-5 %)" | ||
provenance.cutting.dynamics.refs | array (1) | ["research H 5"] | ||
provenance.cutting.dynamics.values | string | "cb09add86dfb" | ||
provenance.cutting.dynamics.history | array (5) | |||
provenance.cutting.dynamics.history[].date | string | "2026-09-28" | ||
provenance.cutting.dynamics.history[].change | string | "recorded" | ||
provenance.workholding | object | |||
provenance.workholding.source | string | "literature" | ||
provenance.workholding.note | string | "research note H 2: V75100X-class vise on a subplate, Te-… | ||
provenance.workholding.uncertainty | string | "+-30 %" | ||
provenance.workholding.refs | array (2) | ["research H 2", "params.py"] | ||
provenance.workholding.values | string | "1cbcc1296116" | ||
provenance.workholding.history | array (2) | |||
provenance.workholding.history[].date | string | "2026-09-28" | ||
provenance.workholding.history[].change | string | "recorded" | ||
provenance.workholding.vise_low | object | |||
provenance.workholding.vise_low.source | string | "literature" | ||
provenance.workholding.vise_low.note | string | "mech's low-profile vise for the MC-1's Z (micro_cnc-mech… | ||
provenance.workholding.vise_low.uncertainty | string | "+-30 % (force), heights +-2 mm" | ||
provenance.workholding.vise_low.refs | array (1) | ["micro_cnc-mech README"] | ||
provenance.workholding.vise_low.values | string | "f0389d3fc573" | ||
provenance.workholding.vise_low.history | array (1) | |||
provenance.workholding.vise_low.history[].date | string | "2026-10-12" | ||
provenance.workholding.vise_low.history[].change | string | "recorded" | ||
provenance.total_mass_kg | object | |||
provenance.total_mass_kg.source | string | "cad" | ||
provenance.total_mass_kg.note | string | "out/report.json" | ||
provenance.total_mass_kg.uncertainty | string | "+-10 %" | ||
provenance.total_mass_kg.refs | array (1) | ["out/report.json"] | ||
provenance.total_mass_kg.values | string | "5d5430514b79" | ||
provenance.total_mass_kg.history | array (2) | |||
provenance.total_mass_kg.history[].date | string | "2026-09-28" | ||
provenance.total_mass_kg.history[].change | string | "recorded" | ||
provenance.viewer | object | Everything twin/web needs to draw the machine: the GLB (moving groups) plus the drag chains, cable routes and Z service loop, which the viewer rebuilds per pose. | ||
provenance.viewer.source | string | "cad" | ||
provenance.viewer.note | string | "out/report.json web (chains.py, wiring.py ROUTES/service… | ||
provenance.viewer.uncertainty | string | "" | ||
provenance.viewer.refs | array (1) | ["out/report.json"] | ||
provenance.viewer.values | string | "176741b6fa14" | ||
provenance.viewer.history | array (2) | |||
provenance.viewer.history[].date | string | "2026-09-28" | ||
provenance.viewer.history[].change | string | "recorded" | ||
provenance.schema/generated/units/name/coordinates | object | |||
provenance.schema/generated/units/name/coordinates.source | string | "design" | ||
provenance.schema/generated/units/name/coordinates.note | string | "the archive itself" | ||
provenance.schema/generated/units/name/coordinates.uncertainty | string | "" | ||
provenance.schema/generated/units/name/coordinates.refs | array (0) | |||
provenance.schema/generated/units/name/coordinates.values | string | "6e4b172b64a3" | ||
provenance.schema/generated/units/name/coordinates.history | array (12) | |||
provenance.schema/generated/units/name/coordinates.history[].date | string | "2026-09-28" | ||
provenance.schema/generated/units/name/coordinates.history[].change | string | "recorded" |
provenance.accuracy
Where the twin's internal error-model parameters come from (the error model is off by default); the records' values are not published.
| key | type | unit | what it is |
|---|---|---|---|
provenance.accuracy | object | ||
provenance.accuracy.source | string | the category: design, cad (off the CAD model), datasheet, literature (research notes, catalogues), calc (from other values), assumption, measured (on this machine), model (a simulation setting) | |
provenance.accuracy.note | string | where exactly, and what to measure | |
provenance.accuracy.uncertainty | string | how far off the values may be, in words ("+-20 %", "exact") | |
provenance.accuracy.refs | array (3) | references: research notes, datasheets, source files | |
provenance.accuracy.values | string | a digest of the values the pattern covers: when they change, the history gets an item | |
provenance.accuracy.history | array (2) | the entry's changes, dated (source, note, uncertainty, values) | |
provenance.accuracy.history[].date | string | ||
provenance.accuracy.history[].change | string | ||
provenance.accuracy.thermal.frame | object | ||
provenance.accuracy.thermal.frame.source | string | ||
provenance.accuracy.thermal.frame.note | string | ||
provenance.accuracy.thermal.frame.uncertainty | string | ||
provenance.accuracy.thermal.frame.refs | array (2) | ||
provenance.accuracy.thermal.frame.values | string | ||
provenance.accuracy.thermal.frame.history | array (1) | ||
provenance.accuracy.thermal.frame.history[].date | string | ||
provenance.accuracy.thermal.frame.history[].change | string | ||
provenance.accuracy.thermal.ambient_dt_k | object | ||
provenance.accuracy.thermal.ambient_dt_k.source | string | ||
provenance.accuracy.thermal.ambient_dt_k.note | string | ||
provenance.accuracy.thermal.ambient_dt_k.uncertainty | string | ||
provenance.accuracy.thermal.ambient_dt_k.refs | array (0) | ||
provenance.accuracy.thermal.ambient_dt_k.values | string | ||
provenance.accuracy.thermal.ambient_dt_k.history | array (1) | ||
provenance.accuracy.thermal.ambient_dt_k.history[].date | string | ||
provenance.accuracy.thermal.ambient_dt_k.history[].change | string | ||
provenance.accuracy.thermal.part | object | ||
provenance.accuracy.thermal.part.source | string | ||
provenance.accuracy.thermal.part.note | string | ||
provenance.accuracy.thermal.part.uncertainty | string | ||
provenance.accuracy.thermal.part.refs | array (1) | ||
provenance.accuracy.thermal.part.values | string | ||
provenance.accuracy.thermal.part.history | array (1) | ||
provenance.accuracy.thermal.part.history[].date | string | ||
provenance.accuracy.thermal.part.history[].change | string | ||
provenance.accuracy.thermal.dynamic | object | ||
provenance.accuracy.thermal.dynamic.source | string | ||
provenance.accuracy.thermal.dynamic.note | string | ||
provenance.accuracy.thermal.dynamic.uncertainty | string | ||
provenance.accuracy.thermal.dynamic.refs | array (1) | ||
provenance.accuracy.thermal.dynamic.values | string | ||
provenance.accuracy.thermal.dynamic.history | array (1) | ||
provenance.accuracy.thermal.dynamic.history[].date | string | ||
provenance.accuracy.thermal.dynamic.history[].change | string |
provenance.drives.axes[].l2.coupling_play_um
Where the coupling's play comes from; the record's values are not published.
| key | type | unit | what it is |
|---|---|---|---|
provenance.drives.axes[].l2.coupling_play_um | object | ||
provenance.drives.axes[].l2.coupling_play_um.source | string | the category: design, cad (off the CAD model), datasheet, literature (research notes, catalogues), calc (from other values), assumption, measured (on this machine), model (a simulation setting) | |
provenance.drives.axes[].l2.coupling_play_um.note | string | where exactly, and what to measure | |
provenance.drives.axes[].l2.coupling_play_um.uncertainty | string | how far off the values may be, in words ("+-20 %", "exact") | |
provenance.drives.axes[].l2.coupling_play_um.refs | array (0) | references: research notes, datasheets, source files | |
provenance.drives.axes[].l2.coupling_play_um.values | string | a digest of the values the pattern covers: when they change, the history gets an item | |
provenance.drives.axes[].l2.coupling_play_um.history | array (1) | the entry's changes, dated (source, note, uncertainty, values) | |
provenance.drives.axes[].l2.coupling_play_um.history[].date | string | ||
provenance.drives.axes[].l2.coupling_play_um.history[].change | string |
1820 keys.