|
This part of the manual describes linuxcncMulti, a fork of LinuxCNC
with several independent, parallel running NC channels (Siemens 840D /
Fanuc multi-path style). Everything described in this part is an
addition to LinuxCNC: a configuration without |
What a channel is
A channel is a complete NC program execution unit with its own
-
G-code interpreter and task state machine (
milltask -channel N, one process per channel), -
trajectory planner in the real-time motion controller (one
tpmodplanner per channel inside the singlemotmod), -
set of machine axes (joints) assigned in the INI file,
-
operating mode (manual, MDI, auto), machine on/off state, override, tool table / tool management, work offsets, parameter file,
-
NML command, status and error buffers (
emcCommand_N,emcStatus_N,emcError_N), HAL pins (motion.N.,axis.N.L.,halui.N.,iocontrol.N.) and GUI.
Channels run their programs at the same time on the same machine. They
synchronize each other through wait marks evaluated in the real-time
controller, exchange axes at run time (GET, GETD, RELEASE) and
can start each other’s programs (INIT, START). The classic use is a
turning centre with two spindles and several tool carriers, see the
simulation configs/sim/multichannel/index_g200 (three channels: two
turrets and a B-axis milling head, see [cha:mchmi]). The single-channel
5-axis machining centre configs/sim/multichannel/dmu60 (swivel rotary
table, impeller machining with every path optimisation enabled) shows the
planner side, see the path planner chapter.
Comparison with stock LinuxCNC
| Topic | LinuxCNC | linuxcncMulti (new) |
|---|---|---|
NC programs |
one program at a time |
one program per channel, running in parallel |
Trajectory planners |
one |
one per channel; joints are assigned to channels in the INI ( |
Task / interpreter |
one |
one |
NML buffers |
|
the same names for channel 0 plus |
Axis names in G-code |
|
machine axis names: an axis letter that exists in several channels becomes |
Synchronization |
- |
wait marks |
Axis exchange |
- |
|
Program chaining |
- |
|
Master spindle |
one spindle for CSS / feed per revolution |
|
Machine on/off |
machine-wide |
channel 0 switches the machine, a channel >= 1 switches only its own joints ( |
Tool management |
tool table, optional database program |
per channel; |
Synchronized actions |
- |
Siemens-style |
Kinematic transformations |
|
per channel |
Power-on program |
|
plus |
GUI |
AXIS, gmoccapy, … per machine |
the same GUIs per channel ( |
Python |
|
|
Where to read on
-
[cha:multichannel-config] - INI keys, HAL pins, the launch script, machine axis names.
-
[cha:multichannel-gcode] - the G-code extensions: axis words, wait marks, axis exchange, program chaining, tool management statements, named parameters.
-
[cha:synchronized-actions] - synchronized actions.
-
[cha:kinematic-transformations] - TRAORI, TRANSMIT, TRACYL and the tool coordinate system.
-
[cha:mchmi] - the multi-channel operator interface and the machine control panel.
-
The design notes (in German) live in
docs/multichannel/of the source tree:architecture.md,synchronaktionen.md,transformationen.md.
Quick start
cd configs/sim/multichannel/index_g200 linuxcnc index_g200.ini
The linuxcnc script starts one task per channel, halui and halui.N,
mctooldb per channel and mchmi. Switch the machine on with the EIN key
of the control panel (it reaches every channel through HAL), reference
with REF POINT / Alle, then start the shaft example from channel 0:
welle_kanal1.ngc loads and starts the programs of the other two
channels with INIT/START and waits for them with the marks.
Tests of every feature are under tests/multichannel/ and
tests/ui-smoke/mchmi-*; they run in the CI and document the expected
behaviour in detail.