Ceci est le manuel de Studio 1.0.2, une version antérieure. Le manuel de la dernière version
Documentation 1.0.2 Référence
Cette référence est générée à partir du programme et n’existe qu’en anglais.
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 | "6528e49911ce4825f7555ab9e42991051ee85046b9ed9511f960cfbb… | ||
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-07T18:16:05" |
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) | [-8.0, 208.0] | where the moving part hits the frame [min, max], machine mm | |
axes[].moving_mass_kg | number | kg | 13.83 |
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.83 | |
drives.axes[].equivalent_mass_kg | number | kg | 102.52570477707619 | |
drives.axes[].gravity_n | number | N | 0.0 | |
drives.axes[].friction_n | number | N | 57.06657900384689 | |
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.83 | |
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.9426892 | |
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.15 | |
drives.axes[].l2.frame.m_kg | number | kg | 17.64 | |
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.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, 256.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.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.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.3492, 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.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.75 |
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 -/+ params.END_GAP (nut assembly hits BK/BF s… | ||
provenance.axes[].hard_stop.uncertainty | string | "+-0.5 mm" | ||
provenance.axes[].hard_stop.refs | array (1) | ["params.py"] | ||
provenance.axes[].hard_stop.values | string | "17a5e3e4d823" | ||
provenance.axes[].hard_stop.history | array (1) | |||
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 | "c9e245f1fa09" | ||
provenance.axes[].moving_mass_kg.history | array (1) | |||
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 | "23b91a944aca" | ||
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.history | array (1) | |||
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 | "aed6691f39c2" | ||
provenance.drives.axes[].equivalent_mass_kg.history | array (1) | |||
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 | "b3e1057050e9" | ||
provenance.drives.axes[].friction_n.history | array (2) | |||
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 | "41feaf6fe952" | ||
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.history | array (1) | |||
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 | "ea7d5292fa7e" | ||
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.history | array (1) | |||
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 | "db6ce3cc4d05" | ||
provenance.drives.axes[].l2.frame.history | array (1) | |||
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 | "a15f465338ec" | ||
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.history | array (2) | |||
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.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 | "e254f2257fe3" | ||
provenance.sound.sources.history | array (1) | |||
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 | "46045d258cf9" | ||
provenance.cutting.materials.history | array (4) | |||
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.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 | "cbf0bf84c083" | ||
provenance.cutting.compliance.history | array (3) | |||
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.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 | "0bee03832947" | ||
provenance.total_mass_kg.history | array (1) | |||
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 | "c5ab0c97487f" | ||
provenance.viewer.history | array (1) | |||
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 | "13bdc5d2ce34" | ||
provenance.schema/generated/units/name/coordinates.history | array (10) | |||
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 (1) | 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 |
1759 keys.