0035. A motor's cable entry ends its tray beside the machine¶
- Status: Accepted
- Date: 2026-10-30
Context¶
cheme layout build ran each motor's branch tray to 0.6 m above the terminal box and dropped
it onto the machine, so the branch's last horizontal run lay over the machine's footprint. The
lifting study's crane lane covers that footprint (the item's width across the direction of
travel plus lane_margin_m each side, above its top plus lift_clearance_m). It left out
only the branch's last vertical run, so the horizontal run blocked the lane. In the ammonia-1
run (process-library#304, cheme 1.0.1) this blocked the lanes of the compressors K-101, K-102,
K-103 and K-701, and gate lifting-study failed (core#73). A project had no way to say where a
motor's cable comes in, so the route could not be steered off the machine.
Options considered: a field on the motor entry of the electrical list; a field on the equipment placement (where the terminal box sits); leaving the tray as it was and not counting a motor's own tray in the lane. The electrical list is where a motor's cabling is declared, and an exemption would hide fixed steel over the machine from the lifting study.
Decision¶
- The
electricalkind (electrical/electrical-list.yaml) gives a motor an optionalcable_entry: eitherside(north,south,east,westof the driven item's plan footprint, the placed item's axis-aligned box in site axes) withoffset_malong it from its middle andclearance_mout from it, orpoint[x, y].elevation_mis optional. The schema refuses neither or both ofsideandpoint, andoffset_morclearance_mwith apoint. - With it, the build ends the motor's branch at that point, at
elevation_m(default 0.6 m above the terminal box, as without it). The branch keepsbranch_elevation_mto above the point and drops to it as tray. The rest of the way to the terminal box is a cable drop, not tray. The cable'sroute_lengthincludes it as the orthogonal distance. The defaultclearance_mis the layout criteria'slane_margin_m, plus half the tray's width, plus the tray rules'spacing_m. - The model's tray entry records the terminal box as
drop_to(optional; only on such a branch). For a tray withdrop_to, the lifting lane andclash-traycount every run. The exemption for the last drop onto the item applies only to a branch without one. - An entry the placed item makes impossible (a point inside the footprint, an offset beyond
half the side) is
cheme.electrical-cable-entry, an error on the entry's line in the electrical list (build, validate, layout report). The build gives that motor no cable (cable-missing) and does not end its tray over the machine. - Without
cable_entrythe build is byte-identical to before.
Consequences¶
- Positive: a project can keep a crane lane over a machine clear of its own motor tray. The lifting study still names any tray that stands in the lane, including one beside the machine.
- Positive: the cable schedule counts the drop, so its lengths do not shrink.
- Negative: two new optional fields (
motors[].cable_entryin the electrical list,trays[].drop_toin the model). Older readers that forbid unknown keys seedrop_toonly in models built with an entry. - Known limitations: the default clearance keeps the tray end outside a lane that runs along
the chosen side or ends at it. A lane that runs diagonally to the footprint is wider, and an entry between the
pad and the machine is inside the lane. The router chooses the branch's way from the rack to
the entry, and that way can still cross the lane higher up.
cheme layout liftingreports both cases. The cable drop has no geometry in the model.
Evidence¶
- core#73; this PR.
src/chemeascode/domains/control/schemas.py(CableEntry),domains/spatial/trays.py(entry_problem,entry_point,cable_entry_findings),domains/spatial/engineering_rules.py(_lane),domains/spatial/schemas.py(ModelTray.drop_to).tests/test_electrical_trays.py(test_a_cable_entry_ends_the_motor_tray_beside_the_machine,test_an_impossible_cable_entry_is_an_error_on_its_line).docs/framework/electrical.md(Motor cable entry), skillselectrical-cablingandstructures-access.