Dies ist das Handbuch zu Studio 1.1.0, einer früheren Version. Das Handbuch der neuesten Version

Dokumentation 1.1.0 Referenz

Diese Referenz wird aus dem Programm erzeugt und ist nur auf Englisch.

Machine profile schema: MC-1

Every key of the machine archive the twin is built from (24 sections), with the value the MC-1's archive gives - for the twin's internal error model (accuracy, the coupling's play, and where their values come from) the keys only. The values are the model's parameters - typical values until a machine is measured - not specifications of the machine and not its accuracy; every number the twin gives about the physical world is an estimate.

schema

the archive format and its version

keytypeunitvaluewhat it is
schemastring"mc1-machine/0.1"

generated

what made this archive, from which inputs (hashes of params.py and wiring.py)

keytypeunitvaluewhat it is
generated.bystring"twin/gen/gen_machine.py"
generated.params_sha256string"b0e4925cf5845ce9c1a300d48cdf6dc7dc94381a2b11a6d1830091c8…
generated.wiring_sha256string"4f378185683bcbd33fb0a42e8fa2b79e93474c861a9a2f76da1e7ee1…
generated.report_jsonobjectthe design checks' report the archive was made from: its path and when it was written
generated.report_json.pathstring"out/report.json"
generated.report_json.modifiedstring"2026-10-11T06:10:28"

units

the base units

keytypeunitvaluewhat it is
units.lengthstring"mm"
units.massstring"kg"
units.timestring"s"

name

keytypeunitvaluewhat it is
namestring"MC-1"

coordinates

the machine coordinate frame in words (MPos = machine - home offset)

keytypeunitvaluewhat it is
coordinatesstring"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

keytypeunitvaluewhat it is
axes[].idstring"X"
axes[].movesstring"X carriage with the Z axis and spindle"
axes[].travelarray (2)[0.0, 200.0]the axis' travel [min, max], machine mm
axes[].home_dirstring"+"the direction homing seeks its switch
axes[].steps_per_mmnumberper mm800.0steps per mm (the controller's $100-$102)
axes[].dir_signnumber-1+1: the motor's positive direction is the axis' positive direction
axes[].directionobjectwhich way the motor turns the screw and the axis moves: for the drive model and the wiring's polarity
axes[].direction.motor_endstring"+"
axes[].direction.screw_handstring"right"
axes[].direction.dir_low_turnsstring"cw (seen from the shaft end; assumed)"
axes[].direction.machine_per_modelnumber1
axes[].direction.dir_low_movesnumber-1
axes[].switchobjectthe axis' limit / home switches: position, contact, sensor physics
axes[].switch.minnumber-2.0
axes[].switch.maxnumber202.0
axes[].switch.contactstring"NC"
axes[].switch.inputsstring"separate"
axes[].switch.typestring"M8 inductive NPN NC, Sn 2.0 mm"
axes[].switch.sn_mmnumbermm2.0
axes[].switch.gap_design_mmnumbermm1.0
axes[].switch.gap_mmarray (2)mm[1.0, 1.0]
axes[].switch.spot_r_cad_mmnumbermm3.0
axes[].switch.anchorstring"cad"
axes[].switch.targetarray (2)["steel", "steel"]
axes[].switch.unit_srarray (2)[1.0, 1.0]
axes[].switch.lambda_mmnumbermm0.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_mmnumbermm1.0
axes[].switch.hyst_mmnumbermm0.15
axes[].switch.response_msnumberms1.0
axes[].switch.jitter_msnumberms0.25
axes[].switch.repeat_sigma_mmnumbermm0.003
axes[].switch.temp_cnumber°C20.0
axes[].switch.temp_coeff_per_knumber1/K0.0
axes[].switch.ready_msnumberms30.0IEC 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_stoparray (2)[-9.02, 210.02]where the moving part hits the frame [min, max], machine mm
axes[].moving_mass_kgnumberkg13.87

sensor_materials

inductive sensors: switching distance reduction factor by target material

keytypeunitvaluewhat it is
sensor_materials.steelnumber1.0
sensor_materials.stainlessnumber0.7
sensor_materials.brassnumber0.45
sensor_materials.aluminiumnumber0.4
sensor_materials.coppernumber0.35

wires

the field wiring by signal: the controller input, cable, route and length

keytypeunitvaluewhat it is
wires.x_minobjectone signal's wire: the controller input, the cable, its route and length, and the cable chains it bends in (flex)
wires.x_min.inputstring"X_LIMIT"
wires.x_min.cablestring"W09"
wires.x_min.routestring"固定,横梁后侧"
wires.x_min.length_mmnumbermm728.0
wires.x_min.flexstring""
wires.x_maxobject
wires.x_max.inputstring"X_LIMIT_MAX"
wires.x_max.cablestring"W10"
wires.x_max.routestring"固定,横梁后侧"
wires.x_max.length_mmnumbermm488.0
wires.x_max.flexstring""
wires.y_minobject
wires.y_min.inputstring"Y_LIMIT"
wires.y_min.cablestring"W12"
wires.y_min.routestring"固定,底板下方"
wires.y_min.length_mmnumbermm167.0
wires.y_min.flexstring""
wires.y_maxobject
wires.y_max.inputstring"Y_LIMIT_MAX"
wires.y_max.cablestring"W11"
wires.y_max.routestring"固定,底板下方"
wires.y_max.length_mmnumbermm212.0
wires.y_max.flexstring""
wires.z_switchobject
wires.z_switch.inputstring"Z_LIMIT"
wires.z_switch.cablestring"W08"
wires.z_switch.routestring"Z 随动线束 + X 拖链,与主轴线分开绑扎"
wires.z_switch.length_mmnumbermm1493.0
wires.z_switch.flexstring"XZ"
wires.setterobject
wires.setter.inputstring"PROBE"
wires.setter.cablestring"W13"
wires.setter.routestring"Y 拖链"
wires.setter.length_mmnumbermm1274.0
wires.setter.flexstring"Y"
wires.almobject
wires.alm.inputstring"MOTOR_FAULT"
wires.alm.cablestring""
wires.alm.routestring"电控箱内:三台驱动器 ALM 与变频器故障继电器串联"
wires.alm.length_mmnumbermm0.0
wires.alm.flexstring""
wires.estopobject
wires.estop.inputstring"E-STOP"
wires.estop.cablestring""
wires.estop.routestring"电控箱:急停 SB0 第二组常闭(SB0-2)"
wires.estop.length_mmnumbermm0.0
wires.estop.flexstring""
wires.estop_km1object
wires.estop_km1.inputstring""
wires.estop_km1.cablestring""
wires.estop_km1.routestring"电控箱:急停 SB0 第一组常闭(SB0-1),在 KM1 线圈的自锁回路里"
wires.estop_km1.length_mmnumbermm0.0
wires.estop_km1.flexstring""
wires.rs485object
wires.rs485.inputstring"RS485"
wires.rs485.cablestring""
wires.rs485.routestring"电控箱内:控制板 RS485 A/B → 变频器 RS+/RS-,屏蔽双绞线"
wires.rs485.length_mmnumbermm0.0
wires.rs485.flexstring""
wires.vfd_relayobject
wires.vfd_relay.inputstring"MOTOR_FAULT"
wires.vfd_relay.cablestring""
wires.vfd_relay.routestring"电控箱内:变频器故障继电器的常闭触点 TB–TC,串在 ALM 链里(发现 107)"
wires.vfd_relay.length_mmnumbermm0.0
wires.vfd_relay.flexstring""

faults

wiring fault models (glitches, intermittent contacts)

keytypeunitvaluewhat it is
faults.glitch_usnumberµs50.0injected 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.intermittentobjectan 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_mnumberper m5.0
faults.intermittent.msarray (2)[0.2, 3.0]

drives

the feed drives: ball screws, closed-loop steppers, their power (KM1), the L1/L2 models

keytypeunitvaluewhat it is
drives.modelstring"L1"
drives.notestring"rigid axis driven by a closed-loop stepper: magnetic spr…
drives.lead_mmnumbermm4.0
drives.motorobjectthe stepper motor: holding torque, rotor inertia, steps, detent torque, phase resistance and inductance, torque constant, rated current, iron loss
drives.motor.typestring"NEMA23 closed-loop hybrid stepper, 23HS22-2804D-E1000 cl…
drives.motor.holding_nmnumberN·m1.26
drives.motor.rotor_inertia_kgm2numberkg·m²3e-05
drives.motor.full_steps_per_revnumberper revolution200
drives.motor.detent_nmnumberN·m0.05
drives.motor.power_up_jumpbooleantruethe 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_ohmnumberΩ0.9L3 (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_mhnumbermH2.9
drives.motor.torque_constant_nm_anumberN·m/A0.286
drives.motor.rated_current_anumberA2.8
drives.motor.iron_loss_nm_per_krpmnumberN·m per 1000 rpm0.0377the 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_kgm2numberkg·m²2.6e-06
drives.pullout_48v_rpm_nmarray (9)rpm/(N·m)
drives.driveobjectthe 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.typestring"CL57T class closed-loop drive, 48 V"
drives.drive.loopstring"closed"
drives.drive.encoder_counts_per_revnumberper revolution4000
drives.drive.holding_currentnumber0.5
drives.drive.damping_rationumber0.5
drives.drive.smoothing_msnumberms0.0
drives.drive.following_error_limit_countsnumber400
drives.drive.alarm_resetstring"power"
drives.drive.open_loop_below_rpmnumberrpm0
drives.drive.current_loop_hznumberHz2000.0then 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_ufnumberµF470.0
drives.drive.overvoltage_vnumberV60.0
drives.drive.l3_sub_stepsnumber20
drives.drive.max_phase_advance_degnumber°0.0
drives.almobjectthe alarm chain: the drives' ALM outputs and the spindle drive's fault relay in series to the controller's motor-fault input
drives.alm.wiredbooleantrue
drives.alm.vfd_relaybooleantrue
drives.alm.chainstring"the three ALM outputs and the VFD's fault relay (its mul…
drives.powerobjectthe drives' supply: the 48 V supply behind the contactor KM1, its timing, the supply's hold-up and rise, the drives' boot
drives.power.sourcestring"PSU1 48 V behind KM1 (drives, VFD); the 24 V supply befo…
drives.power.km1string"24 V DC coil, latched by the START button SB1 through it…
drives.power.km1_latchedbooleantrue
drives.power.km1_drop_msnumberms15
drives.power.km1_pickup_msnumberms25
drives.power.psu_holdup_msnumberms40
drives.power.psu_rise_msnumberms150
drives.power.drive_boot_msnumberms800
drives.step_snumbers0.0001
drives.l2objectL2 (--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_axialnumber0.03
drives.l2.sub_stepsnumber5
drives.l2.current_lag_msnumberms0.2
drives.l2.servo_damping_rationumber0.7
drives.l2.smoothing_msnumberms1.0
drives.l2.contact_restitutionnumber0.0
drives.l2.impact_speed_mm_snumbermm/s5.0
drives.l2.massesnumber3three 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_3number20
drives.l2.zeta_couplingnumber0.05
drives.l2.frictionstring"karnopp"
drives.l2.stribeck_rationumber1.25
drives.l2.stribeck_v_mm_snumbermm/s2.0
drives.l2.viscous_n_s_mmnumberN·s/mm0.02
drives.l2.lugre_sigma0_n_umnumberN/µm10.0
drives.axesarray (3)per axis (X, Y, Z): screw, inertias, masses, friction, the L2 elastic model
drives.axes[].idstring"X"
drives.axes[].screw_length_mmnumbermm327.0
drives.axes[].screw_inertia_kgm2numberkg·m²3.347015168018846e-06
drives.axes[].rotating_inertia_kgm2numberkg·m²3.594701516801885e-05
drives.axes[].moving_mass_kgnumberkg13.87
drives.axes[].equivalent_mass_kgnumberkg102.56570477707619
drives.axes[].gravity_nnumberN0.0
drives.axes[].friction_nnumberN57.06814860384689
drives.axes[].l2objectthe 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_kgnumberkg88.69570477707619
drives.axes[].l2.table_mass_kgnumberkg13.87
drives.axes[].l2.k_axial_n_umarray (2)N/µm
drives.axes[].l2.friction_motor_nnumberN47.12388980384689
drives.axes[].l2.friction_table_nnumberN9.9442588
drives.axes[].l2.motor_mass_kgnumberkg77.22965443852422three masses: the rotor with half the coupling, the screw with the other half, the table
drives.axes[].l2.screw_mass_kgnumberkg11.46605033855195
drives.axes[].l2.coupling_n_umnumberN/µm1189.2873303312676
drives.axes[].l2.torsion_gj_nmm2numberN·mm²64770810.92360646the 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_mmnumbermm61.593853491210936
drives.axes[].l2.k_rest_n_umarray (2)N/µmthe axial chain without the nut (shaft, BK, mount), by the nut's distance from the BK
drives.axes[].l2.nut_hertz_n_um15numberN/µm^1.531.87940238298543
drives.axes[].l2.frameobjectthe frame under the axis' fixed bearing as one mode along the axis: stiffness, mass, damping
drives.axes[].l2.frame.k_n_umnumberN/µm33.2
drives.axes[].l2.frame.m_kgnumberkg17.66
drives.axes[].l2.frame.zetanumber0.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.

keytypeunitwhat it is
drives.axes[].l2.coupling_play_umnumberµ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.

keytypeunitwhat it is
accuracy.enabledboolean
accuracy.notestring
accuracy.unitsstring
accuracy.signstring
accuracy.axesobject
accuracy.axes.Xobject
accuracy.axes.X.lead_umarray (45)µm
accuracy.axes.X.periodic_umnumberµm
accuracy.axes.X.periodic_mmnumbermm
accuracy.axes.X.periodic_phasenumber
accuracy.axes.X.straight_umobjectµm
accuracy.axes.X.straight_um.Yarray (45)
accuracy.axes.X.straight_um.Zarray (45)
accuracy.axes.X.angle_uradobjectµrad
accuracy.axes.X.angle_urad.Aarray (45)
accuracy.axes.X.angle_urad.Barray (45)
accuracy.axes.X.angle_urad.Carray (45)
accuracy.axes.X.backlash_umnumberµm
accuracy.axes.X.gravity_loadedboolean
accuracy.axes.Yobject
accuracy.axes.Y.lead_umarray (35)µm
accuracy.axes.Y.periodic_umnumberµm
accuracy.axes.Y.periodic_mmnumbermm
accuracy.axes.Y.periodic_phasenumber
accuracy.axes.Y.straight_umobjectµm
accuracy.axes.Y.straight_um.Xarray (35)
accuracy.axes.Y.straight_um.Zarray (35)
accuracy.axes.Y.angle_uradobjectµrad
accuracy.axes.Y.angle_urad.Aarray (35)
accuracy.axes.Y.angle_urad.Barray (35)
accuracy.axes.Y.angle_urad.Carray (35)
accuracy.axes.Y.backlash_umnumberµm
accuracy.axes.Y.gravity_loadedboolean
accuracy.axes.Zobject
accuracy.axes.Z.lead_umarray (21)µm
accuracy.axes.Z.periodic_umnumberµm
accuracy.axes.Z.periodic_mmnumbermm
accuracy.axes.Z.periodic_phasenumber
accuracy.axes.Z.straight_umobjectµm
accuracy.axes.Z.straight_um.Xarray (21)
accuracy.axes.Z.straight_um.Yarray (21)
accuracy.axes.Z.angle_uradobjectµrad
accuracy.axes.Z.angle_urad.Aarray (21)
accuracy.axes.Z.angle_urad.Barray (21)
accuracy.axes.Z.angle_urad.Carray (21)
accuracy.axes.Z.backlash_umnumberµm
accuracy.axes.Z.gravity_loadedboolean
accuracy.square_uradobjectµrad
accuracy.square_urad.xynumber
accuracy.square_urad.xznumber
accuracy.square_urad.yznumber
accuracy.abbeobjectAbbe 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_z0number
accuracy.abbe.Xobject
accuracy.abbe.X.ynumber
accuracy.abbe.X.znumber
accuracy.abbe.Zobject
accuracy.abbe.Z.ynumber
accuracy.abbe.Z.dznumber
accuracy.abbe.Yobject
accuracy.abbe.Y.xnumber
accuracy.abbe.Y.ynumber
accuracy.abbe.Y.znumber
accuracy.thermalobject
accuracy.thermal.alpha_um_m_knumberµm/(m·K)
accuracy.thermal.screw_dt_karray (3)K
accuracy.thermal.bk_atarray (3)
accuracy.thermal.spindle_growth_umnumberµm
accuracy.thermal.dynamicobjectfirst-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.enabledboolean
accuracy.thermal.dynamic.screw_k_per_wnumberK/W
accuracy.thermal.dynamic.screw_tau_snumbers
accuracy.thermal.dynamic.spindle_um_per_wnumberµm/W
accuracy.thermal.dynamic.spindle_tau_snumbers
accuracy.thermal.dynamic.spindle_bearing_w_at_24000numberW
accuracy.thermal.dynamic.spindle_copper_w_ratednumberW
accuracy.thermal.frameobject
accuracy.thermal.frame.alpha_um_m_knumberµm/(m·K)
accuracy.thermal.frame.dt_knumberK
accuracy.thermal.frame.tool_to_table_um_knumberµm/K
accuracy.thermal.frame.capacity_j_knumberJ/K
accuracy.thermal.frame.g_w_knumberW/K
accuracy.thermal.frame.motors_wnumberW
accuracy.thermal.frame.spindle_sharenumber
accuracy.thermal.ambient_dt_knumberKthe room above the reference (20 C): the frame follows it (at once without the dynamics)
accuracy.thermal.partobjectthe 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_sharenumber
accuracy.thermal.part.g_good_w_knumberW/K
accuracy.thermal.part.g_poor_w_knumberW/K
accuracy.sourcestring

spindle

the spindle drive: the Huanyang VFD (HY protocol, PD parameters), the motor, the pump

keytypeunitvaluewhat it is
spindle.vfdobjectthe 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.modelstring"Huanyang HY01D523B (HY series)"
spindle.vfd.rated_power_wnumberW1500
spindle.vfd.rated_current_anumberA7.0
spindle.vfd.supplystring"1 x 220 V through KM1 (build.py ELECTRICAL)"
spindle.vfd.portstring"RS-485 to RS+/RS-/DCM (wiring.py PIN_MAP 主轴)"
spindle.vfd.protocolstring"HY: address, function, length, data, CRC-16 (Huanyang v1)"
spindle.vfd.reply_latency_msnumberms5.0
spindle.vfd.min_gap_msnumberms5.0
spindle.vfd.boot_snumbers1.5
spindle.vfd.bus_capacitance_ufnumberµF680.0
spindle.vfd.lu_vnumberV200.0DC 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_vnumberV100.0
spindle.vfd.control_wnumberW15.0
spindle.vfd.oc_factornumber2.0
spindle.vfd.overload_factornumber1.5
spindle.vfd.overload_snumbers60.0
spindle.vfd.dc_bus_vnumberV311.0
spindle.vfd.factoryobjectthe drive's PD parameters as they leave the factory (its manual)
spindle.vfd.factory.PD000number0
spindle.vfd.factory.PD001number0
spindle.vfd.factory.PD002number0
spindle.vfd.factory.PD004number50.0
spindle.vfd.factory.PD005number50.0
spindle.vfd.factory.PD006number2.5
spindle.vfd.factory.PD007number0.5
spindle.vfd.factory.PD008number220.0
spindle.vfd.factory.PD009number15.0
spindle.vfd.factory.PD010number8.0
spindle.vfd.factory.PD011number0.0
spindle.vfd.factory.PD014number10.0
spindle.vfd.factory.PD015number10.0
spindle.vfd.factory.PD026number0
spindle.vfd.factory.PD119number150
spindle.vfd.factory.PD141number220.0
spindle.vfd.factory.PD142number7.0
spindle.vfd.factory.PD143number4
spindle.vfd.factory.PD144number1440
spindle.vfd.factory.PD163number0
spindle.vfd.factory.PD164number1
spindle.vfd.factory.PD165number0
spindle.vfd.factory.PD118number1the 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.PD120number150
spindle.vfd.factory.PD121number5.0
spindle.vfd.factory.PD123number0
spindle.vfd.factory.PD124number150
spindle.vfd.factory.PD125number0.1
spindle.vfd.factory.PD147number0
spindle.vfd.factory.PD041number8PD041 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.paramsobjectthe PD parameters commissioning sets (the design's table wiring.VFD_PARAMS)
spindle.vfd.params.PD001number2
spindle.vfd.params.PD002number2
spindle.vfd.params.PD004number400.0
spindle.vfd.params.PD005number400.0
spindle.vfd.params.PD006number20.0
spindle.vfd.params.PD007number0.5
spindle.vfd.params.PD008number220.0
spindle.vfd.params.PD009number16.0
spindle.vfd.params.PD010number4.0
spindle.vfd.params.PD011number100.0
spindle.vfd.params.PD014number6.0
spindle.vfd.params.PD015number6.0
spindle.vfd.params.PD141number220.0
spindle.vfd.params.PD142number5.0
spindle.vfd.params.PD143number2
spindle.vfd.params.PD144number3000
spindle.vfd.params.PD163number1
spindle.vfd.params.PD164number2
spindle.vfd.params.PD165number3
spindle.motorobjectthe spindle motor, an induction motor: rating, poles, slip, breakdown torque, no-load current, inertia, friction
spindle.motor.modelstring"GDZ65-800"
spindle.motor.rated_power_wnumberW800.0
spindle.motor.rated_voltage_vnumberV220.0
spindle.motor.rated_current_anumberA5.0
spindle.motor.rated_freq_hznumberHz400.0
spindle.motor.polesnumber2
spindle.motor.rated_rpmnumberrpm24000.0
spindle.motor.rated_slipnumber0.04
spindle.motor.breakdown_torque_rationumber2.0
spindle.motor.no_load_current_anumberA2.0
spindle.motor.inertia_kgm2numberkg·m²8e-05
spindle.motor.friction_nmnumberN·m0.005
spindle.motor.viscous_nmsnumberN·m·s1e-05
spindle.coolant_pumpstring"on relay K2 (COOLANT flood), supplied through KM1 (wirin…
spindle.encoderobjectan incremental encoder on the spindle (G33, G76): lines a revolution and an index pulse once a revolution
spindle.encoder.pprnumber0lines 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

keytypeunitvaluewhat it is
supply.psu24string"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_msnumberms80.0
supply.psu24_rise_msnumberms100.0

tool_setter

the tool length sensor: where it stands (machine X, Y), its top (machine Z)

keytypeunitvaluewhat it is
tool_setter.xnumber25.0
tool_setter.ynumber150.0
tool_setter.top_znumber-42.0the 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.overtravelnumber3.0
tool_setter.contactstring"NC"
tool_setter.diameternumber30.0
tool_setter.pretravel_mmnumbermm0.2
tool_setter.repeat_sigma_mmnumbermm0.001
tool_setter.reset_hyst_mmnumbermm0.01
tool_setter.bouncesnumber2
tool_setter.bounce_msnumberms0.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)

keytypeunitvaluewhat it is
touch_probe.modelstring"ideal"
touch_probe.stylus_travel_mmnumbermm2.0A 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.geometryobjectthe 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_mmnumbermm1.5the stylus' diameter over the ball (thinner than the ball: the ball stands for it)
touch_probe.geometry.body_d_mmnumbermm20.0the body's diameter (0: no body)
touch_probe.geometry.body_from_mmnumbermm15.0where the body starts, above the ball's lowest point (the stylus' length below it)
touch_probe.styliarray (3)the styli by ball size (1.1, e09's Ø2 H7 features: a Ø2 ball does not fit) - each its own stem and where the body starts above the ball's lowest point; a probe tool takes the nearest ball's (within 25 %), else geometry's. Typical M2 ruby styli, an assumption until the user's are entered
touch_probe.styli[].ball_d_mmnumbermm2.0
touch_probe.styli[].stylus_d_mmnumbermm1.5
touch_probe.styli[].body_from_mmnumbermm15.0
touch_probe.typicalobjectthe 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_mmnumbermm0.005
touch_probe.typical.pretravel_xy_mmnumbermm0.015
touch_probe.typical.lobing_xy_mmnumbermm0.005
touch_probe.typical.lobing_countnumber3
touch_probe.typical.lobing_phase_degnumber°0.0
touch_probe.typical.repeatability_sigma_mmnumbermm0.001
touch_probe.typical.release_hysteresis_mmnumbermm0.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

keytypeunitvaluewhat it is
sound.framestring"model mm, Z up, at the GLB pose (viewer.glb_pose); moves…
sound.sourcesobjectthe machine's sources of sound, by name
sound.sources.x_motorobjectone source of sound: where it is (model mm at the GLB pose) and the motion group it rides on
sound.sources.x_motor.atarray (3)[254.0, 160.0, 250.0]
sound.sources.x_motor.movesstring"frame"
sound.sources.y_motorobject
sound.sources.y_motor.atarray (3)[0.0, 245.0, 22.0]
sound.sources.y_motor.movesstring"frame"
sound.sources.z_motorobject
sound.sources.z_motor.atarray (3)[0.0, 91.0, 465.0]
sound.sources.z_motor.movesstring"X"
sound.sources.spindleobject
sound.sources.spindle.atarray (3)[0.0, 0.0, 206.5]
sound.sources.spindle.movesstring"Z"
sound.sources.tool_tipobject
sound.sources.tool_tip.atarray (3)[0.0, 0.0, 59.0]
sound.sources.tool_tip.movesstring"Z"
sound.sources.boxobject
sound.sources.box.atarray (3)[430.0, 50.0, 140.0]
sound.sources.box.movesstring"frame"
sound.sources.setterobject
sound.sources.setter.atarray (3)[-75.0, 75.0, 97.0]
sound.sources.setter.movesstring"Y"
sound.sources.pumpobject
sound.sources.pump.atarray (3)[-335.0, 0.0, 40.0]
sound.sources.pump.movesstring"frame"
sound.listenerobjectwhere the listener stands and what it faces (model mm)
sound.listener.atarray (3)[0.0, -695.0, 559.0]
sound.listener.looks_atarray (3)[0.0, 0.0, 99.0]
sound.radiationobjectthe 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_nnumberPa/N0.005the 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_xnumber0.35
sound.radiation.structure_ynumber0.35
sound.radiation.toolnumber0.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)

keytypeunitvaluewhat it is
collision.tableobjectthe table's proxy: its size, its origin in machine XY, the reference tool tip's machine Z on it
collision.table.sizearray (2)[300.0, 220.0]
collision.table.origin_machine_xyarray (2)[100.0, 75.0]
collision.table.ref_tip_on_table_znumber-80.0
collision.spindlearray (6)
collision.spindle[].idstring"tool"
collision.spindle[].rnumber3.0
collision.spindle[].harray (2)[0.0, 15.5]
collision.table_itemsarray (7)
collision.table_items[].idstring"setter_flange"
collision.table_items[].shapestring"box"
collision.table_items[].minarray (3)[-107.0, 66.0, 0.0]
collision.table_items[].maxarray (3)[-43.0, 84.0, 5.0]
collision.groupsarray (3)
collision.groups[].idstring"z_slide"
collision.groups[].movesstring"XZ"
collision.groups[].minarray (3)[-73.5, 45.0, 95.0]
collision.groups[].maxarray (3)[73.5, 65.0, 255.0]
collision.near_miss_mmnumbermm1.0a 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

keytypeunitvaluewhat it is
cutting.materialstring"6061-T6 (assumed, research note C 1.5)"
cutting.ktc_n_mm2numberN/mm²750.0
cutting.krc_n_mm2numberN/mm²250.0
cutting.kac_n_mm2numberN/mm²150.0
cutting.kte_n_mmnumberN/mm5.0
cutting.kre_n_mmnumberN/mm5.0
cutting.kae_n_mmnumberN/mm2.0
cutting.kc_plunge_j_mm3numberJ/mm³2.4
cutting.tool_defaultstring"flat 6 n2"
cutting.stock_res_mmnumbermm0.02
cutting.chunk_mmnumbermm0.5the 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_msnumberms20.0
cutting.force_stepstring"chunk"
cutting.merge_tol_umnumberµm0.1
cutting.pyramidbooleantrue
cutting.sweep_reachbooleantrue
cutting.variationbooleantruethe 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.wearobjectthe tools' wear book: kept and reported only (the cut stays a sharp tool's); the wear band's curve, the edge's clearance angle, a small tool's criterion
cutting.wear.trackbooleantruethe tools' wear book (1.1, twin/core/src/wear.h; handover/virtual-cnc-tools/wear_design.md): track - kept and reported only, the cut a sharp tool's; the wear band's curve (run in to run_in[1] VB_c by u = run_in[0], late_slope times as steep past its life), the edge's clearance angle (VB tan alpha: how far it goes back); a small tool's criterion at most vb_c_d x D, not under vb_c_min_mm (micro-milling studies: VB 12 um ends a 0.5 mm tool's life, 37.5 um a 1 mm one's - about 3 % of D; wear_life_data.md section 2)
cutting.wear.alpha_degnumber°10.0
cutting.wear.run_inarray (2)[0.05, 0.3]
cutting.wear.late_slopenumber3.0
cutting.wear.vb_c_dnumber0.03
cutting.wear.vb_c_min_mmnumbermm0.01
cutting.tool_geometryobjectthe 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_degnumber°30.0
cutting.tool_geometry.rake_degnumber°10.5
cutting.tool_strengthobjectthe 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_mpanumberMPa4000.0
cutting.tool_strength.allowablenumber0.35
cutting.tool_strength.core_dnumber0.7
cutting.force_modelstring"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.runoutobjectthe 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_umnumberµm10.0
cutting.runout.phase_degnull°null
cutting.runout.envelopebooleantrue
cutting.edgeobjectthe cutting edge: its radius, and the minimum chip as a share of it - a thinner chip only ploughs
cutting.edge.radius_umnumberµm2.0
cutting.edge.h_min_rationumber0.3
cutting.materialsarray (17)the workpiece materials the setup offers, with their cutting data
cutting.materials[].keystring"6061-T6"
cutting.materials[].namestring"Aluminum alloy 6061-T6"
cutting.materials[].groupstring"VDI 22 / ISO N"
cutting.materials[].density_g_cm3numberg/cm³2.7
cutting.materials[].ktc_n_mm2numberN/mm²750.0
cutting.materials[].krc_n_mm2numberN/mm²250.0
cutting.materials[].kac_n_mm2numberN/mm²150.0
cutting.materials[].kte_n_mmnumberN/mm5.0
cutting.materials[].kre_n_mmnumberN/mm5.0
cutting.materials[].kae_n_mmnumberN/mm2.0
cutting.materials[].kc_plunge_j_mm3numberJ/mm³2.4
cutting.materials[].vc_m_minarray (2)m/min[152, 335]
cutting.materials[].alpha_um_m_knumberµm/(m·K)23.6
cutting.materials[].c_j_kg_knumberJ/(kg·K)896
cutting.materials[].colorstring"#b9bdc3"
cutting.materials[].sourcestring"aluminium sharp-tool set (note C 1.5)"
cutting.materials[].notestring"measured sharp-carbide set (note C 1.5); Kienzle 800/0.2…
cutting.materials[].obliqueobjectorthogonal 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_mpaarray (4)MPa[205.928, 204.038, 0.016, -0.056]
cutting.materials[].oblique.phi_n_degarray (4)°[13.866, 62.929, 0.005, 0.259]
cutting.materials[].oblique.beta_a_degarray (4)°[20.835, -4.901, -0.007, 0.291]
cutting.materials[].oblique.h_ref_mmnumbermm0.02
cutting.materials[].oblique.vc_ref_m_minnumberm/min452.4
cutting.materials[].oblique.sourcestring"M. Ozsoy, MATECA 6(3) 263-271 (2025), Table 1 (orthogona…
cutting.materials[].lifeobjecta carbide end mill's life in it for the wear book (wear.h): Taylor's pair and exponent, the flank wear criterion, judged by length or by VB; estimates where the source says est
cutting.materials[].life.taylor_nnumberN0.4
cutting.materials[].life.vc_ref_m_minnumberm/min300.0
cutting.materials[].life.t_ref_minnumber60.0
cutting.materials[].life.vb_c_mmnumbermm0.3
cutting.materials[].life.basisstring"length"
cutting.materials[].life.sourcestring"est: carbide start speeds 244-366 m/min, life set by BUE…
cutting.complianceobjectthe 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.notestring"static compliance at the tool tip, force on the tool: to…
cutting.compliance.tool_e_n_mm2numberN/mm²600000.0
cutting.compliance.flute_corenumber0.8
cutting.compliance.flute_length_dnumber2.5
cutting.compliance.tool_density_kg_m3number14500.0the 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_areanumber0.65
cutting.compliance.joint_um_per_100nnumberµm per 100 N10.0
cutting.compliance.frame_um_per_100narray (3)µm per 100 N
cutting.compliance.frame_portal_um_per_100narray (3)µm per 100 N[2.3495, 0.0, 0.0]
cutting.compliance.drive_um_per_100nobjectµm per 100 Neach axis' drive, axially, by the nut's distance from the fixed bearing
cutting.compliance.drive_um_per_100n.Xarray (2)
cutting.compliance.drive_um_per_100n.Yarray (2)
cutting.compliance.drive_um_per_100n.Zarray (2)
cutting.compliance.sourcestring"research note C 3.1-3.3; frame: out/fea/fea_result.json …
cutting.dynamicsobjectthe 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.notestring"tool-point FRF, per direction x (feed axes X, Y): struct…
cutting.dynamics.structure_fn_hzarray (2)Hz[161.0, 196.0]
cutting.dynamics.tool_fn_hznumberHz1500.0
cutting.dynamics.zetaarray (3)[0.03, 0.03, 0.03]
cutting.dynamics.rpm_rangearray (2)rpm[6000.0, 24000.0]
cutting.dynamics.sourcestring"research note C 4.1, 4.4 (ZOA; the holder mode's frequen…
cutting.dynamics.input_shapingobjectthe kernel's input shaping (K1.10, kernel/docs/08-input-shaping.md): what the structure modes ask of it
cutting.dynamics.input_shaping.notestring"not needed at the commissioned accelerations ($120-$122 …
cutting.dynamics.input_shaping.commissionedobjectthe input shaping settings as commissioned
cutting.dynamics.input_shaping.commissioned.$1000number0
cutting.dynamics.input_shaping.commissioned.$1001number0
cutting.dynamics.input_shaping.commissioned.$1002number0
cutting.dynamics.input_shaping.raised_accelerationobjectthe input shaping settings for raised accelerations: the modes they suppress
cutting.dynamics.input_shaping.raised_acceleration.$1000number2
cutting.dynamics.input_shaping.raised_acceleration.$1010number161.0
cutting.dynamics.input_shaping.raised_acceleration.$1020number0.05
cutting.dynamics.input_shaping.raised_acceleration.$1001number2
cutting.dynamics.input_shaping.raised_acceleration.$1011number196.0
cutting.dynamics.input_shaping.raised_acceleration.$1021number0.05
cutting.dynamics.input_shaping.sourcestring"kernel line K1.10 (0bd7ffe): tests/shaper_test.py residu…

workholding

the fixtures: the tapped grid, vise, parallels, strap clamps, tape, V-blocks, friction

keytypeunitvaluewhat it is
workholding.gridobjectthe table's tapped grid (model.py: M6 x 12 in columns GRID_XS either side, 9 rows from y -100)
workholding.grid.threadstring"M6"
workholding.grid.xarray (8)[-125.0, -100.0, -75.0, -50.0, 50.0, 75.0, 100.0, 125.0]
workholding.grid.yarray (9)[-100.0, -75.0, -50.0, -25.0, 0.0, 25.0, 50.0, 75.0, 100.0]
workholding.viseobjecta 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.namestring"75 mm self-centering precision vise (V75100X class) + 10…
workholding.vise.self_centringbooleantrue
workholding.vise.jaw_widthnumber75.0
workholding.vise.jaw_heightnumber21.15
workholding.vise.jaw_thicknessnumber12.0
workholding.vise.step_heightnumber2.5
workholding.vise.min_openingnumber3.25
workholding.vise.max_openingnumber77.0
workholding.vise.base_heightnumber35.0
workholding.vise.body_widthnumber75.0
workholding.vise.body_lengthnumber100.0
workholding.vise.plate_thicknessnumber10.0
workholding.vise.plate_lengthnumber130.0
workholding.vise.plate_widthnumber110.0
workholding.vise.clamp_force_nnumberN7400.0
workholding.vise_lowobjectthe low-profile vise on the grid (a set-up's "vise": "low"): jaw tops low enough for a short probe to get over the blank with Z at its top
workholding.vise_low.namestring"Low-profile vise, 75 mm jaws, 128 mm opening (Inception …
workholding.vise_low.self_centringbooleanfalse
workholding.vise_low.jaw_widthnumber75.0
workholding.vise_low.jaw_heightnumber15.0
workholding.vise_low.jaw_thicknessnumber15.0
workholding.vise_low.step_heightnumber3.0
workholding.vise_low.min_openingnumber0.0
workholding.vise_low.max_openingnumber128.0
workholding.vise_low.base_heightnumber5.0
workholding.vise_low.body_widthnumber75.0
workholding.vise_low.body_lengthnumber210.0
workholding.vise_low.plate_thicknessnumber0.0
workholding.vise_low.plate_lengthnumber0.0
workholding.vise_low.plate_widthnumber0.0
workholding.vise_low.clamp_force_nnumberN5000.0
workholding.parallelsobjecta 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.thicknessnumber3.18
workholding.parallels.min_heightnumber12.7
workholding.parallels.stepnumber3.175
workholding.parallels.max_heightnumber41.3
workholding.parallels.lengthnumber152.4
workholding.clampobjectM6 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_lengthnumber64.0
workholding.clamp.strap_widthnumber25.0
workholding.clamp.strap_thicknessnumber13.0
workholding.clamp.nose_on_partnumber8.0
workholding.clamp.heel_lengthnumber14.0
workholding.clamp.reach_minnumber7.0
workholding.clamp.reach_maxnumber35.0
workholding.clamp.stud_diameternumber6.0
workholding.clamp.washer_diameternumber12.0
workholding.clamp.nut_heightnumber7.0
workholding.clamp.bolt_preload_nnumberN4450.0
workholding.tapeobject3M 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.thicknessnumber1.0
workholding.tape.shear_mpanumberMPa0.48
workholding.tape.effective_sharenumber0.5
workholding.vblockobjecta 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.lengthnumber38.1
workholding.vblock.widthnumber50.8
workholding.vblock.heightnumber38.1
workholding.vblock.v_widthnumber28.0
workholding.vblock.clamp_force_nnumberN2000.0
workholding.frictionobjectfriction coefficients - the part on the table, in the jaws, under a strap - and the safety factor of the slip check
workholding.friction.part_on_tablenumber0.3physics, not design values (note H 2.7): the part slips when the cut beats these
workholding.friction.jaw_on_partnumber0.35
workholding.friction.strap_on_partnumber0.35
workholding.friction.safety_factornumber3.0

total_mass_kg

keytypeunitvaluewhat it is
total_mass_kgnumberkg65.73

controller

the controller: firmware, input filtering, boot time, the $-settings, the pin map

keytypeunitvaluewhat it is
controller.firmwarestring"Twinwright controller firmware (the kernel, 1.0) with it…
controller.board_profilestring"Teensy 4.1 + T41U5XBB: 24 MHz step timer, USB-CDC"
controller.boardobjectthe 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.idstring"teensy41_t41u5xbb"
controller.board.textstring"Teensy 4.1 (i.MX RT1062, Cortex-M7 600 MHz) on a Brookwo…
controller.board.my_machine_boardstring"BOARD_T41U5XBB"
controller.board.f_step_timer_hznumberHz24000000the step timer's clock (hal.f_step_timer); the twin's virtual clock runs at it
controller.board.timer_period_extranumber1
controller.board.timer_max_cyclesnumber1048575
controller.board.wake_up_msnumberms2.0
controller.board.step_pulse_latency_usnumberµs0.2
controller.board.step_toff_min_usnumberµs2.0
controller.board.pulse_timer_hznumberHz150000000
controller.board.signalsarray (4)["estop", "feed_hold", "cycle_start", "motor_fault"]
controller.board.debounce_msnumberms40control inputs are acted on this long after their edge, if still on (0: at once)
controller.board.debouncedarray (4)["reset", "feed_hold", "cycle_start", "safety_door"]
controller.board.link_defaultstring"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.linksobjectthe 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_cdcobjectthe USB CDC link: frames, packets, buffers, polling, the host's latencies and jitter
controller.board.links.usb_cdc.frame_usnumberµs125.0
controller.board.links.usb_cdc.packetnumber512
controller.board.links.usb_cdc.rx_capacitynumber4096
controller.board.links.usb_cdc.poll_usnumberµs50.0
controller.board.links.usb_cdc.poll_bytesnumber20
controller.board.links.usb_cdc.tx_buffernumber6124
controller.board.links.usb_cdc.tx_flush_usnumberµs75.0
controller.board.links.usb_cdc.host_out_latency_usnumberµs250.0
controller.board.links.usb_cdc.host_in_latency_usnumberµs500.0
controller.board.links.usb_cdc.jitter_usnumberµs250.0
controller.board.links.uartobjectthe 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.baudnumber115200.0
controller.board.links.uart.adapterstring"FT232R-class USB-serial adapter"
controller.board.links.uart.adapter_packetnumber62
controller.board.links.uart.adapter_timer_msnumberms16.0the adapter's latency timer: a part-filled packet waits this long
controller.board.links.uart.host_out_latency_usnumberµs1000.0
controller.board.links.uart.host_in_latency_usnumberµs1000.0
controller.board.links.uart.jitter_usnumberµs500.0
controller.board.links.telnetobjectthe network (Telnet) link: packets, buffers, polling, latencies and jitter
controller.board.links.telnet.frame_usnumberµs0.0
controller.board.links.telnet.packetnumber1460
controller.board.links.telnet.rx_capacitynumber2920
controller.board.links.telnet.poll_usnumberµs1000.0
controller.board.links.telnet.poll_bytesnumber1460
controller.board.links.telnet.tx_buffernumber1024
controller.board.links.telnet.tx_flush_usnumberµs1000.0
controller.board.links.telnet.host_out_latency_usnumberµs200.0
controller.board.links.telnet.host_in_latency_usnumberµs200.0
controller.board.links.telnet.jitter_usnumberµs300.0
controller.board.fg_cost_usobjectµsthe foreground's CPU time per unit of work (a line parsed, a block planned, a step segment prepared), us
controller.board.fg_cost_us.linenumber15.0The 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_blocknumber5.0
controller.board.fg_cost_us.segmentnumber3.0
controller.board.identityobjectWhat 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.driverstring"iMXRT1062"
controller.board.identity.mcu_mhznumberMHz600
controller.board.identity.driver_versionstring"260616"
controller.board.identity.driver_optionsstring"USB.2"
controller.board.identity.boardstring"T41U5XBB"
controller.board.identity.twin_markerstring"MC-1 twin"
controller.firmware_optionsobjectwhat the controller's firmware is built with: its build options, signals, probe, plugins, storage, axes, the driver's options
controller.firmware_options.my_machine_hobjectthe build options as the firmware's my_machine.h names them
controller.firmware_options.my_machine_h.BOARD_T41U5XBBnumber1
controller.firmware_options.my_machine_h.USB_SERIAL_CDCnumber2
controller.firmware_options.my_machine_h.SPINDLE0_ENABLEstring"SPINDLE_HUANYANG1"
controller.firmware_options.my_machine_h.MODBUS_ENABLEnumber1
controller.firmware_options.my_machine_h.ESTOP_ENABLEnumber1
controller.firmware_options.my_machine_h.MOTOR_FAULT_ENABLEnumber1
controller.firmware_options.my_machine_h.MPG_ENABLEnumber0
controller.firmware_options.signalsarray (4)["estop", "feed_hold", "cycle_start", "motor_fault"]
controller.firmware_options.probebooleantrue
controller.firmware_options.toolsetterbooleanfalse
controller.firmware_options.pluginsarray (2)["MODBUS", "HUANYANG VFD"]
controller.firmware_options.nvsstring"flash"
controller.firmware_options.axesnumber3
controller.firmware_options.driverobjectthe board driver's options: debounce, reboot, clock, planner blocks, receive buffer
controller.firmware_options.driver.software_debouncebooleantruethe 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.rebootbooleantrue
controller.firmware_options.driver.rtcbooleantrue
controller.firmware_options.driver.planner_blocksnumber100
controller.firmware_options.driver.rx_buffernumber1024
controller.panelobjectthe control box's buttons and the controller inputs they are on
controller.panel.cycle_startobjectthe cycle start button (SB2): how it reaches the controller, its input and pin, its contact
controller.panel.cycle_start.viastring"pin"
controller.panel.cycle_start.inputstring"CYCLE_START"
controller.panel.cycle_start.teensy_pinnumber17
controller.panel.cycle_start.buttonstring"循环启动按钮 SB2(绿色,1 常开),电控箱门"
controller.panel.cycle_start.contactstring"NO"
controller.panel.feed_holdobjectthe feed hold button (SB3): how it reaches the controller, its input and pin, its contact
controller.panel.feed_hold.viastring"pin"
controller.panel.feed_hold.inputstring"FEED_HOLD"
controller.panel.feed_hold.teensy_pinnumber16
controller.panel.feed_hold.buttonstring"进给保持按钮 SB3(黄色,1 常开),电控箱门"
controller.panel.feed_hold.contactstring"NO"
controller.input_filter_usnumberµs20.0the 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_msnumberms50.0
controller.settingsobjectthe $-settings (setting number -> value), also in mc1_settings.nc
controller.settings.$3number5
controller.settings.$100number800
controller.settings.$101number800
controller.settings.$102number800
controller.settings.$110number3000.0
controller.settings.$111number3000.0
controller.settings.$112number1500.0
controller.settings.$120number300.0
controller.settings.$121number300.0
controller.settings.$122number200.0
controller.settings.$130number202.0
controller.settings.$131number152.0
controller.settings.$132number82.0
controller.settings.$10number15871
controller.settings.$11number0.002
controller.settings.$12number0.002
controller.settings.$0number5.0
controller.settings.$29number5.0
controller.settings.$1number255
controller.settings.$37number7
controller.settings.$5number7
controller.settings.$6number1
controller.settings.$22number541
controller.settings.$20number1
controller.settings.$21number1
controller.settings.$23number0
controller.settings.$44number4
controller.settings.$45number3
controller.settings.$46number0
controller.settings.$180number50
controller.settings.$181number50
controller.settings.$182number50
controller.settings.$190number1200
controller.settings.$191number1200
controller.settings.$192number600
controller.settings.$26number250
controller.settings.$27number2.0
controller.settings.$43number1
controller.settings.$65number32
controller.settings.$341number3
controller.settings.$342number50
controller.settings.$343number25
controller.settings.$344number200
controller.settings.$346number0
controller.settings.$30number24000
controller.settings.$31number6000
controller.settings.$340number5
controller.settings.$374number3
controller.settings.$375number50
controller.settings.$394number15
controller.settings.$460number1
controller.settings_filestring"twin/machine/mc1_settings.nc"
controller.pin_maparray (16)
controller.design_settings_tablearray (28)

viewer

the 3D views: the GLB model and its node groups, pose conventions, cable chains

keytypeunitvaluewhat it is
viewer.glbstring"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.groupsobjectthe 3D model's motion groups: which part moves with which axis
viewer.groups.framestring"fixed_frame"
viewer.groups.Ystring"Y_table"
viewer.groups.Xstring"X_carriage"
viewer.groups.Zstring"Z_slide"
viewer.groups.dynstring"cable_chains"
viewer.glb_posestring"model mm, Z up; exported at x_c = y_t = z_up = 0 where x…
viewer.table_top_znumber59.0
viewer.tool_tipstring"spindle axis at model y = 0; tool tip = (x_c, 0, table_t…
viewer.chainsobjectthe cable chains' geometry for the 3D view
viewer.chains.xobjectthe X cable chain: link size, pitch, bend radius, length, where it is fixed, how it moves
viewer.chains.x.hnumber22.0
viewer.chains.x.wnumber42.0
viewer.chains.x.pitchnumber20.0
viewer.chains.x.Rnumber38.0
viewer.chains.x.Lnumber400.0
viewer.chains.x.fixednumber150.0
viewer.chains.x.ynumber204.5
viewer.chains.x.znumber340.0
viewer.chains.x.move_dxnumber40.0
viewer.chains.x.liftnumber1.0
viewer.chains.x.fillnumber0.85
viewer.chains.x.loop_signnumber-1
viewer.chains.yobjectthe Y cable chain: link size, pitch, bend radius, length, where it is fixed, how it moves
viewer.chains.y.hnumber15.0
viewer.chains.y.wnumber22.0
viewer.chains.y.pitchnumber15.0
viewer.chains.y.Rnumber20.0
viewer.chains.y.Lnumber360.0
viewer.chains.y.fixednumber150.0
viewer.chains.y.xnumber-169.0
viewer.chains.y.znumber0.0
viewer.chains.y.move_dynumber0.0
viewer.chains.y.liftnumber1.0
viewer.chains.y.fillnumber0.85
viewer.chains.y.loop_signnumber-1
viewer.routesobjectthe cables' routes for the 3D view, as points (model mm)
viewer.routes.x_motorarray (5)
viewer.routes.y_motorarray (6)
viewer.routes.y_sensor_1array (4)
viewer.routes.y_sensor_2array (4)
viewer.routes.x_sensor_Larray (7)
viewer.routes.x_sensor_Rarray (7)
viewer.routes.x_chain_in_zmotorarray (4)
viewer.routes.x_chain_outarray (7)
viewer.routes.y_chain_in_setterarray (5)
viewer.routes.y_chain_outarray (6)
viewer.route_groupsobjectthe routes that ride on a cable chain, and which
viewer.route_groups.x_chain_in_zmotorstring"x"
viewer.route_groups.y_chain_in_setterstring"y"
viewer.cable_diaobjecteach route's cable diameter (mm)
viewer.cable_dia.x_motornumber9.0
viewer.cable_dia.y_motornumber9.0
viewer.cable_dia.y_sensor_1number4.0
viewer.cable_dia.y_sensor_2number4.0
viewer.cable_dia.x_sensor_Lnumber4.0
viewer.cable_dia.x_sensor_Rnumber4.0
viewer.cable_dia.x_chain_in_zmotornumber9.0
viewer.cable_dia.x_chain_outnumber18.0
viewer.cable_dia.y_chain_in_setternumber4.0
viewer.cable_dia.y_chain_outnumber4.0
viewer.service_loopobjectthe Z cables' service loop at three heights of Z, as points (model mm)
viewer.service_loop.0.0array (7)
viewer.service_loop.40.0array (7)
viewer.service_loop.80.0array (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)

keytypeunitvaluewhat it is
provenance.axes[].travelobject
provenance.axes[].travel.sourcestring"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.notestring"params.TRAVEL_X/Y/Z"where exactly, and what to measure
provenance.axes[].travel.uncertaintystring"exact"how far off the values may be, in words ("+-20 %", "exact")
provenance.axes[].travel.refsarray (1)["params.py"]references: research notes, datasheets, source files
provenance.axes[].travel.valuesstring"71d1a906ec58"a digest of the values the pattern covers: when they change, the history gets an item
provenance.axes[].travel.historyarray (1)the entry's changes, dated (source, note, uncertainty, values)
provenance.axes[].travel.history[].datestring"2026-09-28"
provenance.axes[].travel.history[].changestring"recorded"
provenance.axes[].steps_per_mmobject
provenance.axes[].steps_per_mm.sourcestring"calc"
provenance.axes[].steps_per_mm.notestring"200 steps x 16 microsteps / params.SCREW_LEAD"
provenance.axes[].steps_per_mm.uncertaintystring"exact"
provenance.axes[].steps_per_mm.refsarray (1)["params.py"]
provenance.axes[].steps_per_mm.valuesstring"81ce7c8ef0bb"
provenance.axes[].steps_per_mm.historyarray (1)
provenance.axes[].steps_per_mm.history[].datestring"2026-09-28"
provenance.axes[].steps_per_mm.history[].changestring"recorded"
provenance.axes[].switch.min/maxobject
provenance.axes[].switch.min/max.sourcestring"cad"
provenance.axes[].switch.min/max.notestring"travel end -/+ params.TRIG_OVER for the CAD's idealised …
provenance.axes[].switch.min/max.uncertaintystring"about 1 mm until measured"
provenance.axes[].switch.min/max.refsarray (1)["params.py"]
provenance.axes[].switch.min/max.valuesstring"73e033708dfd"
provenance.axes[].switch.min/max.historyarray (1)
provenance.axes[].switch.min/max.history[].datestring"2026-09-28"
provenance.axes[].switch.min/max.history[].changestring"recorded"
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mmobject
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.sourcestring"cad"
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.notestring"params.PROX_SN, PROX_GAP, SENSE_R"
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.uncertaintystring"sn +-10 % (catalogue)"
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.refsarray (1)["params.py"]
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.valuesstring"3e413230868f"
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.historyarray (1)
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.history[].datestring"2026-09-28"
provenance.axes[].switch.sn_mm/gap_mm/gap_design_mm/spot_r_cad_mm.history[].changestring"recorded"
provenance.axes[].switch.lambda_mm/w_mmobject
provenance.axes[].switch.lambda_mm/w_mm.sourcestring"assumption"
provenance.axes[].switch.lambda_mm/w_mm.notestring"research F 1.3 lateral model (gives the switch point 1.1…
provenance.axes[].switch.lambda_mm/w_mm.uncertaintystring"unknown"
provenance.axes[].switch.lambda_mm/w_mm.refsarray (1)["research F 1.3"]
provenance.axes[].switch.lambda_mm/w_mm.valuesstring"2d0da42b785a"
provenance.axes[].switch.lambda_mm/w_mm.historyarray (1)
provenance.axes[].switch.lambda_mm/w_mm.history[].datestring"2026-09-28"
provenance.axes[].switch.lambda_mm/w_mm.history[].changestring"recorded"
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mmobject
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.sourcestring"literature"
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.notestring"research F 7 defaults for an LJ8A3-class sensor, unverif…
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.uncertaintystring"unverified"
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.refsarray (1)["research F 7"]
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.valuesstring"a26c40540fa2"
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.historyarray (1)
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.history[].datestring"2026-09-28"
provenance.axes[].switch.hyst_mm/response_ms/jitter_ms/repeat_sigma_mm.history[].changestring"recorded"
provenance.axes[].switch.temp_c/temp_coeff_per_kobject
provenance.axes[].switch.temp_c/temp_coeff_per_k.sourcestring"literature"
provenance.axes[].switch.temp_c/temp_coeff_per_k.notestring"catalogue temperature drift of inductive sensors, unveri…
provenance.axes[].switch.temp_c/temp_coeff_per_k.uncertaintystring"unverified"
provenance.axes[].switch.temp_c/temp_coeff_per_k.refsarray (1)["research F 1.3"]
provenance.axes[].switch.temp_c/temp_coeff_per_k.valuesstring"5ce8539eea1c"
provenance.axes[].switch.temp_c/temp_coeff_per_k.historyarray (1)
provenance.axes[].switch.temp_c/temp_coeff_per_k.history[].datestring"2026-09-28"
provenance.axes[].switch.temp_c/temp_coeff_per_k.history[].changestring"recorded"
provenance.axes[].switch.ready_msobject
provenance.axes[].switch.ready_ms.sourcestring"assumption"
provenance.axes[].switch.ready_ms.notestring"power-on delay of the sensor (outputs off meanwhile)"
provenance.axes[].switch.ready_ms.uncertaintystring"20-50 ms"
provenance.axes[].switch.ready_ms.refsarray (1)["research F 7"]
provenance.axes[].switch.ready_ms.valuesstring"de157f28a540"
provenance.axes[].switch.ready_ms.historyarray (1)
provenance.axes[].switch.ready_ms.history[].datestring"2026-09-28"
provenance.axes[].switch.ready_ms.history[].changestring"recorded"
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_srobject
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.sourcestring"design"
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.notestring"wiring.py sensors and inputs; target material from model…
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.uncertaintystring"exact"
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.refsarray (2)["wiring.py", "model.py"]
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.valuesstring"48d77bcc7164"
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.historyarray (1)
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.history[].datestring"2026-09-28"
provenance.axes[].switch.contact/inputs/type/anchor/target/unit_sr.history[].changestring"recorded"
provenance.axes[].hard_stopobject
provenance.axes[].hard_stop.sourcestring"cad"
provenance.axes[].hard_stop.notestring"travel end -/+ the first contact per end measured off th…
provenance.axes[].hard_stop.uncertaintystring"+-0.5 mm"
provenance.axes[].hard_stop.refsarray (2)["out/report.json", "params.py"]
provenance.axes[].hard_stop.valuesstring"836c5c9e9766"
provenance.axes[].hard_stop.historyarray (2)
provenance.axes[].hard_stop.history[].datestring"2026-09-28"
provenance.axes[].hard_stop.history[].changestring"recorded"
provenance.axes[].moving_mass_kgobject
provenance.axes[].moving_mass_kg.sourcestring"cad"
provenance.axes[].moving_mass_kg.notestring"out/report.json mass.moving_mass_kg"
provenance.axes[].moving_mass_kg.uncertaintystring"+-10 %"
provenance.axes[].moving_mass_kg.refsarray (1)["out/report.json"]
provenance.axes[].moving_mass_kg.valuesstring"478ee7f65867"
provenance.axes[].moving_mass_kg.historyarray (2)
provenance.axes[].moving_mass_kg.history[].datestring"2026-09-28"
provenance.axes[].moving_mass_kg.history[].changestring"recorded"
provenance.axes[].id/moves/home_dirobject
provenance.axes[].id/moves/home_dir.sourcestring"design"
provenance.axes[].id/moves/home_dir.notestring"axis layout and homing direction (the design review)"
provenance.axes[].id/moves/home_dir.uncertaintystring"exact"
provenance.axes[].id/moves/home_dir.refsarray (2)["params.py", "mc1_settings.nc"]
provenance.axes[].id/moves/home_dir.valuesstring"687fb780b2ec"
provenance.axes[].id/moves/home_dir.historyarray (1)
provenance.axes[].id/moves/home_dir.history[].datestring"2026-09-28"
provenance.axes[].id/moves/home_dir.history[].changestring"recorded"
provenance.axes[].dir_sign/directionobject
provenance.axes[].dir_sign/direction.sourcestring"calc"
provenance.axes[].dir_sign/direction.notestring"the way DIR low moves each axis: the motor's end of the …
provenance.axes[].dir_sign/direction.uncertaintystring"the polarity: unknown until the first jog"
provenance.axes[].dir_sign/direction.refsarray (2)["params.py", "model.py"]
provenance.axes[].dir_sign/direction.valuesstring"773df4d972c0"
provenance.axes[].dir_sign/direction.historyarray (1)
provenance.axes[].dir_sign/direction.history[].datestring"2026-09-28"
provenance.axes[].dir_sign/direction.history[].changestring"recorded"
provenance.sensor_materialsobject
provenance.sensor_materials.sourcestring"literature"
provenance.sensor_materials.notestring"research F 1.3 catalogue guideline factors (stainless 0.…
provenance.sensor_materials.uncertaintystring"+-0.1"
provenance.sensor_materials.refsarray (1)["research F 1.3"]
provenance.sensor_materials.valuesstring"fc616da34b6d"
provenance.sensor_materials.historyarray (1)
provenance.sensor_materials.history[].datestring"2026-09-28"
provenance.sensor_materials.history[].changestring"recorded"
provenance.wiresobject
provenance.wires.sourcestring"design"
provenance.wires.notestring"wiring.py PIN_MAP and cable schedule (out/cables.csv); f…
provenance.wires.uncertaintystring"exact"
provenance.wires.refsarray (2)["wiring.py", "out/cables.csv"]
provenance.wires.valuesstring"a2b05605dcc7"
provenance.wires.historyarray (2)
provenance.wires.history[].datestring"2026-09-28"
provenance.wires.history[].changestring"recorded"
provenance.faultsobjectinjected 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.sourcestring"assumption"
provenance.faults.notestring"glitch width, intermittent dropout rate and length"
provenance.faults.uncertaintystring"unknown"
provenance.faults.refsarray (0)
provenance.faults.valuesstring"8d45b99a8ac0"
provenance.faults.historyarray (1)
provenance.faults.history[].datestring"2026-09-28"
provenance.faults.history[].changestring"recorded"
provenance.controller.input_filter_usobject
provenance.controller.input_filter_us.sourcestring"assumption"
provenance.controller.input_filter_us.notestring"optocoupler response (research F 1.4: tens of us)"
provenance.controller.input_filter_us.uncertaintystring"10-100 us"
provenance.controller.input_filter_us.refsarray (1)["research F 1.4"]
provenance.controller.input_filter_us.valuesstring"79b22021026e"
provenance.controller.input_filter_us.historyarray (1)
provenance.controller.input_filter_us.history[].datestring"2026-09-28"
provenance.controller.input_filter_us.history[].changestring"recorded"
provenance.controller.boot_msobject
provenance.controller.boot_ms.sourcestring"assumption"
provenance.controller.boot_ms.notestring"supervisor reset release, clock start-up"
provenance.controller.boot_ms.uncertaintystring"+-50 %"
provenance.controller.boot_ms.refsarray (0)
provenance.controller.boot_ms.valuesstring"4bbc30ef8aba"
provenance.controller.boot_ms.historyarray (1)
provenance.controller.boot_ms.history[].datestring"2026-09-28"
provenance.controller.boot_ms.history[].changestring"recorded"
provenance.controller.boardobject
provenance.controller.board.sourcestring"design"
provenance.controller.board.notestring"firmware/my_machine.h (BOARD_T41U5XBB, USB_SERIAL_CDC 2)…
provenance.controller.board.uncertaintystring"exact for that firmware"
provenance.controller.board.refsarray (2)["firmware/my_machine.h", "iMXRT1062 driver.c (Teensy 4.1)"]
provenance.controller.board.valuesstring"01bf47495868"
provenance.controller.board.historyarray (2)
provenance.controller.board.history[].datestring"2026-09-28"
provenance.controller.board.history[].changestring"recorded"
provenance.controller.board.linksobject
provenance.controller.board.links.sourcestring"assumption"
provenance.controller.board.links.notestring"the host side of each link: USB CDC polling, an FT232R-c…
provenance.controller.board.links.uncertaintystring"latencies +-100 %"
provenance.controller.board.links.refsarray (2)["FTDI AN232B-04", "usb_serial_pjrc.c"]
provenance.controller.board.links.valuesstring"36489eabc285"
provenance.controller.board.links.historyarray (1)
provenance.controller.board.links.history[].datestring"2026-09-28"
provenance.controller.board.links.history[].changestring"recorded"
provenance.controller.board.identityobject
provenance.controller.board.identity.sourcestring"assumption"
provenance.controller.board.identity.notestring"the board's $I driver lines as the iMXRT1062 driver and …
provenance.controller.board.identity.uncertaintystring"unverified"
provenance.controller.board.identity.refsarray (2)["iMXRT1062 driver.c (Teensy 4.1)", "firmware/T41U5XBB_ma…
provenance.controller.board.identity.valuesstring"eac6a6731f5f"
provenance.controller.board.identity.historyarray (1)
provenance.controller.board.identity.history[].datestring"2026-09-30"
provenance.controller.board.identity.history[].changestring"recorded"
provenance.controller.board.fg_cost_usobject
provenance.controller.board.fg_cost_us.sourcestring"assumption"
provenance.controller.board.fg_cost_us.notestring"the firmware's foreground work per line parsed, block pl…
provenance.controller.board.fg_cost_us.uncertaintystring"+-50 %"
provenance.controller.board.fg_cost_us.refsarray (0)
provenance.controller.board.fg_cost_us.valuesstring"61da7f8c49ef"
provenance.controller.board.fg_cost_us.historyarray (2)
provenance.controller.board.fg_cost_us.history[].datestring"2026-09-28"
provenance.controller.board.fg_cost_us.history[].changestring"recorded"
provenance.controller.settingsobject
provenance.controller.settings.sourcestring"design"
provenance.controller.settings.notestring"see mc1_settings.nc comments"
provenance.controller.settings.uncertaintystring"exact"
provenance.controller.settings.refsarray (1)["mc1_settings.nc"]
provenance.controller.settings.valuesstring"e88a29749de0"
provenance.controller.settings.historyarray (5)
provenance.controller.settings.history[].datestring"2026-09-28"
provenance.controller.settings.history[].changestring"recorded"
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_fileobject
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.sourcestring"design"
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.notestring"firmware/my_machine.h, wiring.py"
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.uncertaintystring"exact"
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.refsarray (2)["firmware/my_machine.h", "wiring.py"]
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.valuesstring"0be081af796b"
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.historyarray (6)
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.history[].datestring"2026-09-28"
provenance.controller.firmware/board_profile/pin_map/design_settings_table/settings_file.history[].changestring"recorded"
provenance.controller.firmware_optionsobject
provenance.controller.firmware_options.sourcestring"design"
provenance.controller.firmware_options.notestring"firmware/my_machine.h's defines, the board map's inputs;…
provenance.controller.firmware_options.uncertaintystring"exact for that firmware"
provenance.controller.firmware_options.refsarray (2)["firmware/my_machine.h", "firmware/T41U5XBB_map.h"]
provenance.controller.firmware_options.valuesstring"363047a0637b"
provenance.controller.firmware_options.historyarray (3)
provenance.controller.firmware_options.history[].datestring"2026-09-28"
provenance.controller.firmware_options.history[].changestring"recorded"
provenance.controller.firmware_options.driverobject
provenance.controller.firmware_options.driver.sourcestring"assumption"
provenance.controller.firmware_options.driver.notestring"the iMXRT1062 driver's capabilities as read from its sou…
provenance.controller.firmware_options.driver.uncertaintystring"unverified"
provenance.controller.firmware_options.driver.refsarray (1)["iMXRT1062 driver.c (Teensy 4.1)"]
provenance.controller.firmware_options.driver.valuesstring"59b20ae6a742"
provenance.controller.firmware_options.driver.historyarray (1)
provenance.controller.firmware_options.driver.history[].datestring"2026-09-28"
provenance.controller.firmware_options.driver.history[].changestring"recorded"
provenance.controller.board.signalsobject
provenance.controller.board.signals.sourcestring"design"
provenance.controller.board.signals.notestring"the control inputs the firmware compiles (firmware_optio…
provenance.controller.board.signals.uncertaintystring"exact"
provenance.controller.board.signals.refsarray (2)["firmware/my_machine.h", "firmware/T41U5XBB_map.h"]
provenance.controller.board.signals.valuesstring"f3df84706378"
provenance.controller.board.signals.historyarray (1)
provenance.controller.board.signals.history[].datestring"2026-09-28"
provenance.controller.board.signals.history[].changestring"recorded"
provenance.controller.panelobject
provenance.controller.panel.sourcestring"design"
provenance.controller.panel.notestring"wiring.py PIN_MAP (the CYCLE_START, FEED_HOLD rows: SB2,…
provenance.controller.panel.uncertaintystring"exact"
provenance.controller.panel.refsarray (2)["wiring.py", "firmware/T41U5XBB_map.h"]
provenance.controller.panel.valuesstring"90f20b87d770"
provenance.controller.panel.historyarray (1)
provenance.controller.panel.history[].datestring"2026-10-04"
provenance.controller.panel.history[].changestring"recorded"
provenance.supplyobject
provenance.supply.sourcestring"design"
provenance.supply.notestring"wiring.py topology (24 V before KM1); hold-up and rise a…
provenance.supply.uncertaintystring"timings +-50 %"
provenance.supply.refsarray (1)["wiring.py"]
provenance.supply.valuesstring"1ba0e74d799c"
provenance.supply.historyarray (1)
provenance.supply.history[].datestring"2026-09-28"
provenance.supply.history[].changestring"recorded"
provenance.power_on_posobject
provenance.power_on_pos.sourcestring"assumption"
provenance.power_on_pos.notestring"where the axes stand when the machine is switched on"
provenance.power_on_pos.uncertaintystring"anywhere in travel"
provenance.power_on_pos.refsarray (0)
provenance.power_on_pos.valuesstring"c1d7b9e4c251"
provenance.power_on_pos.historyarray (1)
provenance.power_on_pos.history[].datestring"2026-09-28"
provenance.power_on_pos.history[].changestring"recorded"
provenance.drives.motorobject
provenance.drives.motor.sourcestring"datasheet"
provenance.drives.motor.notestring"research D 2.5 (StepperOnline 23HS22-2804D-E1000 datashe…
provenance.drives.motor.uncertaintystring"+-10 %"
provenance.drives.motor.refsarray (2)["research D 2.5", "23HS22-2804D-E1000 datasheet"]
provenance.drives.motor.valuesstring"63894f881246"
provenance.drives.motor.historyarray (1)
provenance.drives.motor.history[].datestring"2026-09-28"
provenance.drives.motor.history[].changestring"recorded"
provenance.drives.motor.detent_nmobject
provenance.drives.motor.detent_nm.sourcestring"assumption"
provenance.drives.motor.detent_nm.notestring"D 8: 0.03-0.07 N m; measure on the unpowered motor"
provenance.drives.motor.detent_nm.uncertaintystring"0.03-0.07 N m"
provenance.drives.motor.detent_nm.refsarray (1)["research D 8"]
provenance.drives.motor.detent_nm.valuesstring"887b77e9f037"
provenance.drives.motor.detent_nm.historyarray (1)
provenance.drives.motor.detent_nm.history[].datestring"2026-09-28"
provenance.drives.motor.detent_nm.history[].changestring"recorded"
provenance.drives.motor.torque_constant_nm_aobject
provenance.drives.motor.torque_constant_nm_a.sourcestring"calc"
provenance.drives.motor.torque_constant_nm_a.notestring"holding torque over the rated current"
provenance.drives.motor.torque_constant_nm_a.uncertaintystring"+-10 %"
provenance.drives.motor.torque_constant_nm_a.refsarray (0)
provenance.drives.motor.torque_constant_nm_a.valuesstring"085fa9dbd665"
provenance.drives.motor.torque_constant_nm_a.historyarray (1)
provenance.drives.motor.torque_constant_nm_a.history[].datestring"2026-09-28"
provenance.drives.motor.torque_constant_nm_a.history[].changestring"recorded"
provenance.drives.motor.iron_loss_nm_per_krpmobject
provenance.drives.motor.iron_loss_nm_per_krpm.sourcestring"calc"
provenance.drives.motor.iron_loss_nm_per_krpm.notestring"fitted so the L3 dyno meets the pull-out curve (worst 0.…
provenance.drives.motor.iron_loss_nm_per_krpm.uncertaintystring"+-30 %"
provenance.drives.motor.iron_loss_nm_per_krpm.refsarray (1)["research D 2.2"]
provenance.drives.motor.iron_loss_nm_per_krpm.valuesstring"0c9c62efc7d0"
provenance.drives.motor.iron_loss_nm_per_krpm.historyarray (1)
provenance.drives.motor.iron_loss_nm_per_krpm.history[].datestring"2026-09-28"
provenance.drives.motor.iron_loss_nm_per_krpm.history[].changestring"recorded"
provenance.drives.motor.power_up_jumpobject
provenance.drives.motor.power_up_jump.sourcestring"assumption"
provenance.drives.motor.power_up_jump.notestring"the rotor snaps to the nearest 4-full-step phase origin …
provenance.drives.motor.power_up_jump.uncertaintystring"+-2 full steps"
provenance.drives.motor.power_up_jump.refsarray (1)["research D 8"]
provenance.drives.motor.power_up_jump.valuesstring"30c0028e178f"
provenance.drives.motor.power_up_jump.historyarray (1)
provenance.drives.motor.power_up_jump.history[].datestring"2026-09-28"
provenance.drives.motor.power_up_jump.history[].changestring"recorded"
provenance.drives.pullout_48v_rpm_nmobject
provenance.drives.pullout_48v_rpm_nm.sourcestring"calc"
provenance.drives.pullout_48v_rpm_nm.notestring"research D 2.2: dq fit of 24/36 V vendor curves extrapol…
provenance.drives.pullout_48v_rpm_nm.uncertaintystring"+-20 %"
provenance.drives.pullout_48v_rpm_nm.refsarray (1)["research D 2.2"]
provenance.drives.pullout_48v_rpm_nm.valuesstring"efeb1f50c7a0"
provenance.drives.pullout_48v_rpm_nm.historyarray (1)
provenance.drives.pullout_48v_rpm_nm.history[].datestring"2026-09-28"
provenance.drives.pullout_48v_rpm_nm.history[].changestring"recorded"
provenance.drives.lead_mm/coupling_inertia_kgm2object
provenance.drives.lead_mm/coupling_inertia_kgm2.sourcestring"datasheet"
provenance.drives.lead_mm/coupling_inertia_kgm2.notestring"SFU1204 screw lead; coupling from its catalogue"
provenance.drives.lead_mm/coupling_inertia_kgm2.uncertaintystring"exact / +-10 %"
provenance.drives.lead_mm/coupling_inertia_kgm2.refsarray (1)["params.py"]
provenance.drives.lead_mm/coupling_inertia_kgm2.valuesstring"4537839a8fc4"
provenance.drives.lead_mm/coupling_inertia_kgm2.historyarray (1)
provenance.drives.lead_mm/coupling_inertia_kgm2.history[].datestring"2026-09-28"
provenance.drives.lead_mm/coupling_inertia_kgm2.history[].changestring"recorded"
provenance.drives.model/note/step_sobject
provenance.drives.model/note/step_s.sourcestring"model"
provenance.drives.model/note/step_s.notestring"the drive model's level and its time step"
provenance.drives.model/note/step_s.uncertaintystring""
provenance.drives.model/note/step_s.refsarray (0)
provenance.drives.model/note/step_s.valuesstring"b9de623b88cf"
provenance.drives.model/note/step_s.historyarray (1)
provenance.drives.model/note/step_s.history[].datestring"2026-09-28"
provenance.drives.model/note/step_s.history[].changestring"recorded"
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_nobject
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.sourcestring"calc"
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.notestring"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.uncertaintystring"+-5 %"
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.refsarray (2)["params.py", "out/report.json"]
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.valuesstring"8c494a04976c"
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.historyarray (2)
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.history[].datestring"2026-09-28"
provenance.drives.axes[].id/screw_length_mm/screw_inertia_kgm2/rotating_inertia_kgm2/moving_mass_kg/gravity_n.history[].changestring"recorded"
provenance.drives.axes[].equivalent_mass_kgobject
provenance.drives.axes[].equivalent_mass_kg.sourcestring"calc"
provenance.drives.axes[].equivalent_mass_kg.notestring"(rotor + screw + coupling) / (lead / 2 pi)^2 + moving mass"
provenance.drives.axes[].equivalent_mass_kg.uncertaintystring"+-5 %"
provenance.drives.axes[].equivalent_mass_kg.refsarray (0)
provenance.drives.axes[].equivalent_mass_kg.valuesstring"ff0c2f1f9bd5"
provenance.drives.axes[].equivalent_mass_kg.historyarray (2)
provenance.drives.axes[].equivalent_mass_kg.history[].datestring"2026-09-28"
provenance.drives.axes[].equivalent_mass_kg.history[].changestring"recorded"
provenance.drives.axes[].friction_nobject
provenance.drives.axes[].friction_n.sourcestring"assumption"
provenance.drives.axes[].friction_n.notestring"nut + BK drag 0.03 N m (research M 5.1: 0.025-0.04 N m, …
provenance.drives.axes[].friction_n.uncertaintystring"+-50 %"
provenance.drives.axes[].friction_n.refsarray (3)["research D 3.5", "research D 4", "research M 5.1"]
provenance.drives.axes[].friction_n.valuesstring"9ecda1bc4a65"
provenance.drives.axes[].friction_n.historyarray (3)
provenance.drives.axes[].friction_n.history[].datestring"2026-09-28"
provenance.drives.axes[].friction_n.history[].changestring"recorded"
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kgobject
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.sourcestring"calc"
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.notestring"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.uncertaintystring"+-5 %"
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.refsarray (0)
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.valuesstring"e91b02c7c7c5"
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.historyarray (2)
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.history[].datestring"2026-09-28"
provenance.drives.axes[].l2.rotating_mass_kg/table_mass_kg/motor_mass_kg/screw_mass_kg.history[].changestring"recorded"
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_umobject
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.sourcestring"calc"
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.notestring"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.uncertaintystring"+-20 %"
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.refsarray (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.valuesstring"2bb88bca5104"
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.historyarray (2)
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.history[].datestring"2026-09-28"
provenance.drives.axes[].l2.k_axial_n_um/torsion_gj_nmm2/torsion_extra_mm/k_rest_n_um.history[].changestring"recorded"
provenance.drives.axes[].l2.coupling_n_umobject
provenance.drives.axes[].l2.coupling_n_um.sourcestring"datasheet"
provenance.drives.axes[].l2.coupling_n_um.notestring"KTR ROTEX GS12 92 ShA dynamic torsional stiffness (482 N…
provenance.drives.axes[].l2.coupling_n_um.uncertaintystring"+-20 %"
provenance.drives.axes[].l2.coupling_n_um.refsarray (1)["KTR ROTEX GS catalogue"]
provenance.drives.axes[].l2.coupling_n_um.valuesstring"8a4b82bba26f"
provenance.drives.axes[].l2.coupling_n_um.historyarray (1)
provenance.drives.axes[].l2.coupling_n_um.history[].datestring"2026-09-28"
provenance.drives.axes[].l2.coupling_n_um.history[].changestring"recorded"
provenance.drives.axes[].l2.nut_hertz_n_um15object
provenance.drives.axes[].l2.nut_hertz_n_um15.sourcestring"literature"
provenance.drives.axes[].l2.nut_hertz_n_um15.notestring"c of F = c d^1.5 fitted to the catalogue nut stiffness a…
provenance.drives.axes[].l2.nut_hertz_n_um15.uncertaintystring"+-20 %"
provenance.drives.axes[].l2.nut_hertz_n_um15.refsarray (2)["HIWIN ball screw catalogue", "research D 3.1"]
provenance.drives.axes[].l2.nut_hertz_n_um15.valuesstring"eeef94d18e8e"
provenance.drives.axes[].l2.nut_hertz_n_um15.historyarray (1)
provenance.drives.axes[].l2.nut_hertz_n_um15.history[].datestring"2026-09-28"
provenance.drives.axes[].l2.nut_hertz_n_um15.history[].changestring"recorded"
provenance.drives.axes[].l2.frameobject
provenance.drives.axes[].l2.frame.sourcestring"calc"
provenance.drives.axes[].l2.frame.notestring"the X drive's portal (research note M 2.4): the modal FE…
provenance.drives.axes[].l2.frame.uncertaintystring"frequency +-20-40 %, damping x2-5 (note M)"
provenance.drives.axes[].l2.frame.refsarray (3)["out/fea/modal_result.json", "research M 2.2", "research…
provenance.drives.axes[].l2.frame.valuesstring"89419ae93b52"
provenance.drives.axes[].l2.frame.historyarray (2)
provenance.drives.axes[].l2.frame.history[].datestring"2026-10-01"
provenance.drives.axes[].l2.frame.history[].changestring"recorded"
provenance.drives.axes[].l2.friction_motor_n/friction_table_nobject
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.sourcestring"assumption"
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.notestring"the friction split between the motor side (BK, nut) and …
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.uncertaintystring"+-50 %"
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.refsarray (1)["research D 3.5"]
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.valuesstring"6633b308b6a7"
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.historyarray (3)
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.history[].datestring"2026-09-28"
provenance.drives.axes[].l2.friction_motor_n/friction_table_n.history[].changestring"recorded"
provenance.drives.driveobject
provenance.drives.drive.sourcestring"assumption"
provenance.drives.drive.notestring"CL57T-class values; loop gains, smoothing and the follow…
provenance.drives.drive.uncertaintystring"unknown until read out"
provenance.drives.drive.refsarray (1)["research D 2.3"]
provenance.drives.drive.valuesstring"128369079092"
provenance.drives.drive.historyarray (1)
provenance.drives.drive.history[].datestring"2026-09-28"
provenance.drives.drive.history[].changestring"recorded"
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_degobject
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.sourcestring"assumption"
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.notestring"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.uncertaintystring"unknown"
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.refsarray (0)
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.valuesstring"d967789c1e2b"
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.historyarray (1)
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.history[].datestring"2026-09-28"
provenance.drives.drive.open_loop_below_rpm/current_loop_hz/bus_capacitance_uf/overvoltage_v/max_phase_advance_deg.history[].changestring"recorded"
provenance.drives.drive.l3_sub_stepsobject
provenance.drives.drive.l3_sub_steps.sourcestring"model"
provenance.drives.drive.l3_sub_steps.notestring"the L3 electrical model's time step"
provenance.drives.drive.l3_sub_steps.uncertaintystring""
provenance.drives.drive.l3_sub_steps.refsarray (0)
provenance.drives.drive.l3_sub_steps.valuesstring"9ae026b5ae69"
provenance.drives.drive.l3_sub_steps.historyarray (1)
provenance.drives.drive.l3_sub_steps.history[].datestring"2026-09-28"
provenance.drives.drive.l3_sub_steps.history[].changestring"recorded"
provenance.drives.almobject
provenance.drives.alm.sourcestring"design"
provenance.drives.alm.notestring"wiring.py ALM chain"
provenance.drives.alm.uncertaintystring"exact"
provenance.drives.alm.refsarray (1)["wiring.py"]
provenance.drives.alm.valuesstring"b13146056e48"
provenance.drives.alm.historyarray (2)
provenance.drives.alm.history[].datestring"2026-09-28"
provenance.drives.alm.history[].changestring"recorded"
provenance.drives.powerobject
provenance.drives.power.sourcestring"design"
provenance.drives.power.notestring"wiring.py KM1/PSU1 topology; all timings assumed"
provenance.drives.power.uncertaintystring"timings +-50 %"
provenance.drives.power.refsarray (1)["wiring.py"]
provenance.drives.power.valuesstring"bf089e12beff"
provenance.drives.power.historyarray (1)
provenance.drives.power.history[].datestring"2026-09-28"
provenance.drives.power.history[].changestring"recorded"
provenance.drives.l2object
provenance.drives.l2.sourcestring"model"
provenance.drives.l2.notestring"the flexible transmission's settings: mass count, sub-st…
provenance.drives.l2.uncertaintystring""
provenance.drives.l2.refsarray (0)
provenance.drives.l2.valuesstring"9e959770a320"
provenance.drives.l2.historyarray (1)
provenance.drives.l2.history[].datestring"2026-09-28"
provenance.drives.l2.history[].changestring"recorded"
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_sobject
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.sourcestring"assumption"
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.notestring"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.uncertaintystring"+-50 %"
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.refsarray (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.valuesstring"46b2210b6c28"
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.historyarray (1)
provenance.drives.l2.zeta_axial/zeta_coupling/servo_damping_ratio/current_lag_ms/smoothing_ms/contact_restitution/impact_speed_mm_s.history[].datestring"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[].changestring"recorded"
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_umobject
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.sourcestring"literature"
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.notestring"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.uncertaintystring"+-50 %"
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.refsarray (1)["research D 4"]
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.valuesstring"f5bc18522f71"
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.historyarray (1)
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.history[].datestring"2026-09-28"
provenance.drives.l2.stribeck_ratio/stribeck_v_mm_s/viscous_n_s_mm/lugre_sigma0_n_um.history[].changestring"recorded"
provenance.cutting.materials.alpha_um_m_k/c_j_kg_kobject
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.sourcestring"literature"
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.notestring"handbook thermal expansion and specific heat near 20 C (…
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.uncertaintystring"+-10 % (plastics, wood: +-50 %)"
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.refsarray (0)
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.valuesstring"4f53cda18c2b"
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.historyarray (1)
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.history[].datestring"2026-10-01"
provenance.cutting.materials.alpha_um_m_k/c_j_kg_k.history[].changestring"recorded"
provenance.spindle.vfd.paramsobject
provenance.spindle.vfd.params.sourcestring"design"
provenance.spindle.vfd.params.notestring"wiring.py VFD_PARAMS (the commissioning list)"
provenance.spindle.vfd.params.uncertaintystring"exact"
provenance.spindle.vfd.params.refsarray (1)["wiring.py"]
provenance.spindle.vfd.params.valuesstring"5a5b96a140b8"
provenance.spindle.vfd.params.historyarray (1)
provenance.spindle.vfd.params.history[].datestring"2026-09-28"
provenance.spindle.vfd.params.history[].changestring"recorded"
provenance.spindle.vfd.factoryobject
provenance.spindle.vfd.factory.sourcestring"datasheet"
provenance.spindle.vfd.factory.notestring"HY series manual (2010-06-27) factory settings as the tw…
provenance.spindle.vfd.factory.uncertaintystring"unverified"
provenance.spindle.vfd.factory.refsarray (1)["HY series manual 2010-06-27"]
provenance.spindle.vfd.factory.valuesstring"fd967f578df3"
provenance.spindle.vfd.factory.historyarray (2)
provenance.spindle.vfd.factory.history[].datestring"2026-09-28"
provenance.spindle.vfd.factory.history[].changestring"recorded"
provenance.spindle.vfd.protocolobject
provenance.spindle.vfd.protocol.sourcestring"datasheet"
provenance.spindle.vfd.protocol.notestring"HY manual 2010-06-27 communication chapter; reply length…
provenance.spindle.vfd.protocol.uncertaintystring"exact"
provenance.spindle.vfd.protocol.refsarray (3)["HY series manual 2010-06-27", "LinuxCNC hy_comm.c", "hu…
provenance.spindle.vfd.protocol.valuesstring"e777a31a51cb"
provenance.spindle.vfd.protocol.historyarray (2)
provenance.spindle.vfd.protocol.history[].datestring"2026-09-28"
provenance.spindle.vfd.protocol.history[].changestring"recorded"
provenance.spindle.vfd.reply_latency_ms/min_gap_msobject
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.sourcestring"assumption"
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.notestring"min_gap from the spindle plugin's note that HY units do …
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.uncertaintystring"+-50 %"
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.refsarray (1)["huanyang.c (Huanyang v1 spindle plugin)"]
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.valuesstring"8affe8eea550"
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.historyarray (2)
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.history[].datestring"2026-09-28"
provenance.spindle.vfd.reply_latency_ms/min_gap_ms.history[].changestring"recorded"
provenance.spindle.vfd.boot_s/oc_factor/overload_*object
provenance.spindle.vfd.boot_s/oc_factor/overload_*.sourcestring"assumption"
provenance.spindle.vfd.boot_s/oc_factor/overload_*.notestring"typical small-VFD values"
provenance.spindle.vfd.boot_s/oc_factor/overload_*.uncertaintystring"+-50 %"
provenance.spindle.vfd.boot_s/oc_factor/overload_*.refsarray (0)
provenance.spindle.vfd.boot_s/oc_factor/overload_*.valuesstring"c4b9f0a05cf3"
provenance.spindle.vfd.boot_s/oc_factor/overload_*.historyarray (1)
provenance.spindle.vfd.boot_s/oc_factor/overload_*.history[].datestring"2026-09-28"
provenance.spindle.vfd.boot_s/oc_factor/overload_*.history[].changestring"recorded"
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_vobject
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.sourcestring"assumption"
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.notestring"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.uncertaintystring"+-30 %"
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.refsarray (0)
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.valuesstring"56d18f3625cb"
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.historyarray (1)
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.history[].datestring"2026-09-28"
provenance.spindle.vfd.bus_capacitance_uf/lu_v/control_off_v/control_w/dc_bus_v.history[].changestring"recorded"
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/portobject
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.sourcestring"datasheet"
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.notestring"the VFD's nameplate and wiring.py"
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.uncertaintystring"exact"
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.refsarray (1)["wiring.py"]
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.valuesstring"61fe0177629e"
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.historyarray (1)
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.history[].datestring"2026-09-28"
provenance.spindle.vfd.model/rated_power_w/rated_current_a/supply/port.history[].changestring"recorded"
provenance.spindle.motor.model/rated_*/polesobject
provenance.spindle.motor.model/rated_*/poles.sourcestring"datasheet"
provenance.spindle.motor.model/rated_*/poles.notestring"model.py spindle BOM line (nameplate), checked against V…
provenance.spindle.motor.model/rated_*/poles.uncertaintystring"exact"
provenance.spindle.motor.model/rated_*/poles.refsarray (1)["model.py"]
provenance.spindle.motor.model/rated_*/poles.valuesstring"f9ddafd9857f"
provenance.spindle.motor.model/rated_*/poles.historyarray (1)
provenance.spindle.motor.model/rated_*/poles.history[].datestring"2026-09-28"
provenance.spindle.motor.model/rated_*/poles.history[].changestring"recorded"
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_aobject
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.sourcestring"assumption"
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.notestring"for a 2-pole 400 Hz spindle motor; measure (idle current…
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.uncertaintystring"+-30 %"
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.refsarray (0)
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.valuesstring"5d17fb96313c"
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.historyarray (1)
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.history[].datestring"2026-09-28"
provenance.spindle.motor.rated_slip/breakdown_torque_ratio/no_load_current_a.history[].changestring"recorded"
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nmsobject
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.sourcestring"assumption"
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.notestring"rotor ~ 0.75 kg, 35 mm; bearings and windage ~ 80 W at 2…
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.uncertaintystring"+-50 %"
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.refsarray (0)
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.valuesstring"b24f41347221"
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.historyarray (1)
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.history[].datestring"2026-09-28"
provenance.spindle.motor.inertia_kgm2/friction_nm/viscous_nms.history[].changestring"recorded"
provenance.spindle.coolant_pumpobject
provenance.spindle.coolant_pump.sourcestring"design"
provenance.spindle.coolant_pump.notestring"wiring.py relay K2"
provenance.spindle.coolant_pump.uncertaintystring"exact"
provenance.spindle.coolant_pump.refsarray (1)["wiring.py"]
provenance.spindle.coolant_pump.valuesstring"0b6b02069eb0"
provenance.spindle.coolant_pump.historyarray (1)
provenance.spindle.coolant_pump.history[].datestring"2026-09-28"
provenance.spindle.coolant_pump.history[].changestring"recorded"
provenance.spindle.encoderobject
provenance.spindle.encoder.sourcestring"design"
provenance.spindle.encoder.notestring"the MC-1 has no spindle encoder (none in model.py's BOM …
provenance.spindle.encoder.uncertaintystring"exact"
provenance.spindle.encoder.refsarray (2)["model.py", "wiring.py"]
provenance.spindle.encoder.valuesstring"ecfe50f9ac79"
provenance.spindle.encoder.historyarray (1)
provenance.spindle.encoder.history[].datestring"2026-10-04"
provenance.spindle.encoder.history[].changestring"recorded"
provenance.tool_setterobject
provenance.tool_setter.sourcestring"cad"
provenance.tool_setter.notestring"params.SETTER_XY/SETTER_H/SETTER_D"
provenance.tool_setter.uncertaintystring"exact"
provenance.tool_setter.refsarray (1)["params.py"]
provenance.tool_setter.valuesstring"10225e2b0c3e"
provenance.tool_setter.historyarray (1)
provenance.tool_setter.history[].datestring"2026-09-28"
provenance.tool_setter.history[].changestring"recorded"
provenance.tool_setter.overtravel/contactobject
provenance.tool_setter.overtravel/contact.sourcestring"assumption"
provenance.tool_setter.overtravel/contact.notestring"the setter's plunger travel and switch"
provenance.tool_setter.overtravel/contact.uncertaintystring"+-50 %"
provenance.tool_setter.overtravel/contact.refsarray (0)
provenance.tool_setter.overtravel/contact.valuesstring"e08cb500a33e"
provenance.tool_setter.overtravel/contact.historyarray (1)
provenance.tool_setter.overtravel/contact.history[].datestring"2026-09-28"
provenance.tool_setter.overtravel/contact.history[].changestring"recorded"
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_msobject
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.sourcestring"assumption"
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.notestring"a mechanical setter's pre-travel, repeatability, reset h…
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.uncertaintystring"+-50 %"
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.refsarray (0)
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.valuesstring"ece4cb842299"
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.historyarray (1)
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.history[].datestring"2026-09-28"
provenance.tool_setter.pretravel_mm/repeat_sigma_mm/reset_hyst_mm/bounces/bounce_ms.history[].changestring"recorded"
provenance.touch_probe.modelobject
provenance.touch_probe.model.sourcestring"design"
provenance.touch_probe.model.notestring"the twin's touch probe by default: ideal - it switches a…
provenance.touch_probe.model.uncertaintystring"exact"
provenance.touch_probe.model.refsarray (1)["twin/docs/06-virtual-machine.md"]
provenance.touch_probe.model.valuesstring"aed14a680982"
provenance.touch_probe.model.historyarray (1)
provenance.touch_probe.model.history[].datestring"2026-10-05"
provenance.touch_probe.model.history[].changestring"recorded"
provenance.touch_probe.stylus_travel_mmobject
provenance.touch_probe.stylus_travel_mm.sourcestring"assumption"
provenance.touch_probe.stylus_travel_mm.notestring"how far a probe's stylus gives way before it breaks"
provenance.touch_probe.stylus_travel_mm.uncertaintystring"+-50 %"
provenance.touch_probe.stylus_travel_mm.refsarray (0)
provenance.touch_probe.stylus_travel_mm.valuesstring"64e791156692"
provenance.touch_probe.stylus_travel_mm.historyarray (1)
provenance.touch_probe.stylus_travel_mm.history[].datestring"2026-10-05"
provenance.touch_probe.stylus_travel_mm.history[].changestring"recorded"
provenance.touch_probe.geometryobject
provenance.touch_probe.geometry.sourcestring"assumption"
provenance.touch_probe.geometry.notestring"the probe's shape for the collision zone: its stylus ove…
provenance.touch_probe.geometry.uncertaintystring"+-50 %"
provenance.touch_probe.geometry.refsarray (0)
provenance.touch_probe.geometry.valuesstring"7ebb1187c0cf"
provenance.touch_probe.geometry.historyarray (1)
provenance.touch_probe.geometry.history[].datestring"2026-10-07"
provenance.touch_probe.geometry.history[].changestring"recorded"
provenance.touch_probe.styliobject
provenance.touch_probe.styli.sourcestring"assumption"
provenance.touch_probe.styli.notestring"the styli by ball size (1.1): each ball's stem and where…
provenance.touch_probe.styli.uncertaintystring"+-50 %"
provenance.touch_probe.styli.refsarray (0)
provenance.touch_probe.styli.valuesstring"c67e58a03589"
provenance.touch_probe.styli.historyarray (1)
provenance.touch_probe.styli.history[].datestring"2026-10-10"
provenance.touch_probe.styli.history[].changestring"recorded"
provenance.touch_probe.typicalobject
provenance.touch_probe.typical.sourcestring"assumption"
provenance.touch_probe.typical.notestring"a hobby-class kinematic touch-trigger probe (the MC-1's …
provenance.touch_probe.typical.uncertaintystring"+-100 %"
provenance.touch_probe.typical.refsarray (1)["twin/docs/research/O_real_machine_sync.md"]
provenance.touch_probe.typical.valuesstring"eb49d5d4bdc5"
provenance.touch_probe.typical.historyarray (1)
provenance.touch_probe.typical.history[].datestring"2026-10-05"
provenance.touch_probe.typical.history[].changestring"recorded"
provenance.sound.sourcesobject
provenance.sound.sources.sourcestring"cad"
provenance.sound.sources.notestring"params.py: the motors' body and encoder behind their LAY…
provenance.sound.sources.uncertaintystring"+-30 mm"
provenance.sound.sources.refsarray (1)["params.py"]
provenance.sound.sources.valuesstring"d285ce7e5940"
provenance.sound.sources.historyarray (2)
provenance.sound.sources.history[].datestring"2026-10-02"
provenance.sound.sources.history[].changestring"recorded"
provenance.sound.sources.pumpobject
provenance.sound.sources.pump.sourcestring"assumption"
provenance.sound.sources.pump.notestring"the coolant tank and pump are not in the design: on the …
provenance.sound.sources.pump.uncertaintystring"anywhere beside the machine"
provenance.sound.sources.pump.refsarray (0)
provenance.sound.sources.pump.valuesstring"426f248647bc"
provenance.sound.sources.pump.historyarray (1)
provenance.sound.sources.pump.history[].datestring"2026-10-02"
provenance.sound.sources.pump.history[].changestring"recorded"
provenance.sound.listenerobject
provenance.sound.listener.sourcestring"assumption"
provenance.sound.listener.notestring"a standing operator half a metre in front of the base, e…
provenance.sound.listener.uncertaintystring"+-0.3 m"
provenance.sound.listener.refsarray (0)
provenance.sound.listener.valuesstring"a89116f00a83"
provenance.sound.listener.historyarray (1)
provenance.sound.listener.history[].datestring"2026-10-02"
provenance.sound.listener.history[].changestring"recorded"
provenance.sound.radiationobject
provenance.sound.radiation.sourcestring"assumption"
provenance.sound.radiation.notestring"research note N 2.4: the cutting force through the machi…
provenance.sound.radiation.uncertaintystring"+-10 dB"
provenance.sound.radiation.refsarray (1)["research N 2.4"]
provenance.sound.radiation.valuesstring"37e223dacb01"
provenance.sound.radiation.historyarray (1)
provenance.sound.radiation.history[].datestring"2026-10-02"
provenance.sound.radiation.history[].changestring"recorded"
provenance.collisionobject
provenance.collision.sourcestring"cad"
provenance.collision.notestring"stdparts.py spindle()/tool_setter() evaluated with stand…
provenance.collision.uncertaintystring"+-0.5 mm"
provenance.collision.refsarray (2)["stdparts.py", "params.py"]
provenance.collision.valuesstring"f946c8fd4f7e"
provenance.collision.historyarray (1)
provenance.collision.history[].datestring"2026-09-28"
provenance.collision.history[].changestring"recorded"
provenance.collision.groupsobject
provenance.collision.groups.sourcestring"cad"
provenance.collision.groups.notestring"boxes around the Z slide, the X carriage and the beam fr…
provenance.collision.groups.uncertaintystring"+-2 mm"
provenance.collision.groups.refsarray (1)["params.py"]
provenance.collision.groups.valuesstring"9aabca6ecc98"
provenance.collision.groups.historyarray (1)
provenance.collision.groups.history[].datestring"2026-09-28"
provenance.collision.groups.history[].changestring"recorded"
provenance.collision.near_miss_mmobject
provenance.collision.near_miss_mm.sourcestring"design"
provenance.collision.near_miss_mm.notestring"the safety distance warned about"
provenance.collision.near_miss_mm.uncertaintystring"exact"
provenance.collision.near_miss_mm.refsarray (0)
provenance.collision.near_miss_mm.valuesstring"1dff6251b5a5"
provenance.collision.near_miss_mm.historyarray (1)
provenance.collision.near_miss_mm.history[].datestring"2026-09-28"
provenance.collision.near_miss_mm.history[].changestring"recorded"
provenance.cutting.materialsobject
provenance.cutting.materials.sourcestring"literature"
provenance.cutting.materials.notestring"research note H 3.1: aluminium alloys the measured set o…
provenance.cutting.materials.uncertaintystring"+-20 % (placeholders: unknown)"
provenance.cutting.materials.refsarray (2)["research H 3.1", "research C 1.5"]
provenance.cutting.materials.valuesstring"e456ee942dd5"
provenance.cutting.materials.historyarray (5)
provenance.cutting.materials.history[].datestring"2026-09-28"
provenance.cutting.materials.history[].changestring"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_mm3object
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.sourcestring"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.notestring"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.uncertaintystring"+-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.refsarray (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.valuesstring"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.historyarray (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[].datestring"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[].changestring"recorded"
provenance.cutting.tool_default/tool_geometryobject
provenance.cutting.tool_default/tool_geometry.sourcestring"literature"
provenance.cutting.tool_default/tool_geometry.notestring"a typical 2-flute carbide end mill"
provenance.cutting.tool_default/tool_geometry.uncertaintystring""
provenance.cutting.tool_default/tool_geometry.refsarray (1)["research H 3.1"]
provenance.cutting.tool_default/tool_geometry.valuesstring"c5b73e4d95ee"
provenance.cutting.tool_default/tool_geometry.historyarray (1)
provenance.cutting.tool_default/tool_geometry.history[].datestring"2026-09-28"
provenance.cutting.tool_default/tool_geometry.history[].changestring"recorded"
provenance.cutting.tool_strengthobject
provenance.cutting.tool_strength.sourcestring"assumption"
provenance.cutting.tool_strength.notestring"research note L 4.4: carbide rod's transverse rupture st…
provenance.cutting.tool_strength.uncertaintystring"+-30 %"
provenance.cutting.tool_strength.refsarray (1)["research L 4.4"]
provenance.cutting.tool_strength.valuesstring"6fe0b6b19a43"
provenance.cutting.tool_strength.historyarray (1)
provenance.cutting.tool_strength.history[].datestring"2026-09-30"
provenance.cutting.tool_strength.history[].changestring"recorded"
provenance.cutting.force_modelobject
provenance.cutting.force_model.sourcestring"model"
provenance.cutting.force_model.notestring"the tooth-level force kernel (V0 P1, research note L 3.1…
provenance.cutting.force_model.uncertaintystring""
provenance.cutting.force_model.refsarray (1)["research L 3.1"]
provenance.cutting.force_model.valuesstring"e2d39d8fb75b"
provenance.cutting.force_model.historyarray (1)
provenance.cutting.force_model.history[].datestring"2026-10-01"
provenance.cutting.force_model.history[].changestring"recorded"
provenance.cutting.runoutobject
provenance.cutting.runout.sourcestring"assumption"
provenance.cutting.runout.notestring"research note L 3.3: an ER11 collet and the spindle at t…
provenance.cutting.runout.uncertaintystring"5-15 um"
provenance.cutting.runout.refsarray (1)["research L 3.3"]
provenance.cutting.runout.valuesstring"be7feab42ad4"
provenance.cutting.runout.historyarray (2)
provenance.cutting.runout.history[].datestring"2026-10-01"
provenance.cutting.runout.history[].changestring"recorded"
provenance.cutting.edgeobject
provenance.cutting.edge.sourcestring"literature"
provenance.cutting.edge.notestring"research note L 3.2: a new micro-grain carbide edge 1-3 …
provenance.cutting.edge.uncertaintystring"+-50 %"
provenance.cutting.edge.refsarray (1)["research L 3.2"]
provenance.cutting.edge.valuesstring"22f50f57eb94"
provenance.cutting.edge.historyarray (1)
provenance.cutting.edge.history[].datestring"2026-10-01"
provenance.cutting.edge.history[].changestring"recorded"
provenance.cutting.wearobject
provenance.cutting.wear.sourcestring"literature"
provenance.cutting.wear.notestring"the tools' wear book (1.1, wear.h; kept and reported onl…
provenance.cutting.wear.uncertaintystring"+-50 %"
provenance.cutting.wear.refsarray (1)["wear_life_data.md section 2"]
provenance.cutting.wear.valuesstring"300e453ff41d"
provenance.cutting.wear.historyarray (1)
provenance.cutting.wear.history[].datestring"2026-10-13"
provenance.cutting.wear.history[].changestring"recorded"
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reachobject
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.sourcestring"model"
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.notestring"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.uncertaintystring""
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.refsarray (0)
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.valuesstring"befd22532a22"
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.historyarray (1)
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.history[].datestring"2026-10-07"
provenance.cutting.stock_res_mm/chunk_mm/chunk_ms/force_step/merge_tol_um/pyramid/sweep_reach.history[].changestring"recorded"
provenance.cutting.variationobject
provenance.cutting.variation.sourcestring"model"
provenance.cutting.variation.notestring"tooth-to-tooth variation of the cutting coefficients on …
provenance.cutting.variation.uncertaintystring""
provenance.cutting.variation.refsarray (0)
provenance.cutting.variation.valuesstring"d461f9d7f2b0"
provenance.cutting.variation.historyarray (1)
provenance.cutting.variation.history[].datestring"2026-09-28"
provenance.cutting.variation.history[].changestring"recorded"
provenance.cutting.complianceobject
provenance.cutting.compliance.sourcestring"calc"
provenance.cutting.compliance.notestring"the tool as a beam (E, core, flute length) with joint, f…
provenance.cutting.compliance.uncertaintystring"+-30 %"
provenance.cutting.compliance.refsarray (3)["out/report.json", "out/fea/modal_result.json", "researc…
provenance.cutting.compliance.valuesstring"785e2a3fa895"
provenance.cutting.compliance.historyarray (4)
provenance.cutting.compliance.history[].datestring"2026-09-28"
provenance.cutting.compliance.history[].changestring"recorded"
provenance.cutting.dynamicsobject
provenance.cutting.dynamics.sourcestring"assumption"
provenance.cutting.dynamics.notestring"the structure's, the holder's and the tool's own bending…
provenance.cutting.dynamics.uncertaintystring"+-30 % (frequencies; damping 1-5 %)"
provenance.cutting.dynamics.refsarray (1)["research H 5"]
provenance.cutting.dynamics.valuesstring"cb09add86dfb"
provenance.cutting.dynamics.historyarray (5)
provenance.cutting.dynamics.history[].datestring"2026-09-28"
provenance.cutting.dynamics.history[].changestring"recorded"
provenance.workholdingobject
provenance.workholding.sourcestring"literature"
provenance.workholding.notestring"research note H 2: V75100X-class vise on a subplate, Te-…
provenance.workholding.uncertaintystring"+-30 %"
provenance.workholding.refsarray (2)["research H 2", "params.py"]
provenance.workholding.valuesstring"1cbcc1296116"
provenance.workholding.historyarray (2)
provenance.workholding.history[].datestring"2026-09-28"
provenance.workholding.history[].changestring"recorded"
provenance.workholding.vise_lowobject
provenance.workholding.vise_low.sourcestring"literature"
provenance.workholding.vise_low.notestring"mech's low-profile vise for the MC-1's Z (micro_cnc-mech…
provenance.workholding.vise_low.uncertaintystring"+-30 % (force), heights +-2 mm"
provenance.workholding.vise_low.refsarray (1)["micro_cnc-mech README"]
provenance.workholding.vise_low.valuesstring"f0389d3fc573"
provenance.workholding.vise_low.historyarray (1)
provenance.workholding.vise_low.history[].datestring"2026-10-12"
provenance.workholding.vise_low.history[].changestring"recorded"
provenance.total_mass_kgobject
provenance.total_mass_kg.sourcestring"cad"
provenance.total_mass_kg.notestring"out/report.json"
provenance.total_mass_kg.uncertaintystring"+-10 %"
provenance.total_mass_kg.refsarray (1)["out/report.json"]
provenance.total_mass_kg.valuesstring"5d5430514b79"
provenance.total_mass_kg.historyarray (2)
provenance.total_mass_kg.history[].datestring"2026-09-28"
provenance.total_mass_kg.history[].changestring"recorded"
provenance.viewerobjectEverything 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.sourcestring"cad"
provenance.viewer.notestring"out/report.json web (chains.py, wiring.py ROUTES/service…
provenance.viewer.uncertaintystring""
provenance.viewer.refsarray (1)["out/report.json"]
provenance.viewer.valuesstring"176741b6fa14"
provenance.viewer.historyarray (2)
provenance.viewer.history[].datestring"2026-09-28"
provenance.viewer.history[].changestring"recorded"
provenance.schema/generated/units/name/coordinatesobject
provenance.schema/generated/units/name/coordinates.sourcestring"design"
provenance.schema/generated/units/name/coordinates.notestring"the archive itself"
provenance.schema/generated/units/name/coordinates.uncertaintystring""
provenance.schema/generated/units/name/coordinates.refsarray (0)
provenance.schema/generated/units/name/coordinates.valuesstring"6e4b172b64a3"
provenance.schema/generated/units/name/coordinates.historyarray (12)
provenance.schema/generated/units/name/coordinates.history[].datestring"2026-09-28"
provenance.schema/generated/units/name/coordinates.history[].changestring"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.

keytypeunitwhat it is
provenance.accuracyobject
provenance.accuracy.sourcestringthe 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.notestringwhere exactly, and what to measure
provenance.accuracy.uncertaintystringhow far off the values may be, in words ("+-20 %", "exact")
provenance.accuracy.refsarray (3)references: research notes, datasheets, source files
provenance.accuracy.valuesstringa digest of the values the pattern covers: when they change, the history gets an item
provenance.accuracy.historyarray (2)the entry's changes, dated (source, note, uncertainty, values)
provenance.accuracy.history[].datestring
provenance.accuracy.history[].changestring
provenance.accuracy.thermal.frameobject
provenance.accuracy.thermal.frame.sourcestring
provenance.accuracy.thermal.frame.notestring
provenance.accuracy.thermal.frame.uncertaintystring
provenance.accuracy.thermal.frame.refsarray (2)
provenance.accuracy.thermal.frame.valuesstring
provenance.accuracy.thermal.frame.historyarray (1)
provenance.accuracy.thermal.frame.history[].datestring
provenance.accuracy.thermal.frame.history[].changestring
provenance.accuracy.thermal.ambient_dt_kobject
provenance.accuracy.thermal.ambient_dt_k.sourcestring
provenance.accuracy.thermal.ambient_dt_k.notestring
provenance.accuracy.thermal.ambient_dt_k.uncertaintystring
provenance.accuracy.thermal.ambient_dt_k.refsarray (0)
provenance.accuracy.thermal.ambient_dt_k.valuesstring
provenance.accuracy.thermal.ambient_dt_k.historyarray (1)
provenance.accuracy.thermal.ambient_dt_k.history[].datestring
provenance.accuracy.thermal.ambient_dt_k.history[].changestring
provenance.accuracy.thermal.partobject
provenance.accuracy.thermal.part.sourcestring
provenance.accuracy.thermal.part.notestring
provenance.accuracy.thermal.part.uncertaintystring
provenance.accuracy.thermal.part.refsarray (1)
provenance.accuracy.thermal.part.valuesstring
provenance.accuracy.thermal.part.historyarray (1)
provenance.accuracy.thermal.part.history[].datestring
provenance.accuracy.thermal.part.history[].changestring
provenance.accuracy.thermal.dynamicobject
provenance.accuracy.thermal.dynamic.sourcestring
provenance.accuracy.thermal.dynamic.notestring
provenance.accuracy.thermal.dynamic.uncertaintystring
provenance.accuracy.thermal.dynamic.refsarray (1)
provenance.accuracy.thermal.dynamic.valuesstring
provenance.accuracy.thermal.dynamic.historyarray (1)
provenance.accuracy.thermal.dynamic.history[].datestring
provenance.accuracy.thermal.dynamic.history[].changestring

provenance.drives.axes[].l2.coupling_play_um

Where the coupling's play comes from; the record's values are not published.

keytypeunitwhat it is
provenance.drives.axes[].l2.coupling_play_umobject
provenance.drives.axes[].l2.coupling_play_um.sourcestringthe 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.notestringwhere exactly, and what to measure
provenance.drives.axes[].l2.coupling_play_um.uncertaintystringhow far off the values may be, in words ("+-20 %", "exact")
provenance.drives.axes[].l2.coupling_play_um.refsarray (0)references: research notes, datasheets, source files
provenance.drives.axes[].l2.coupling_play_um.valuesstringa digest of the values the pattern covers: when they change, the history gets an item
provenance.drives.axes[].l2.coupling_play_um.historyarray (1)the entry's changes, dated (source, note, uncertainty, values)
provenance.drives.axes[].l2.coupling_play_um.history[].datestring
provenance.drives.axes[].l2.coupling_play_um.history[].changestring

1820 keys.