Congratulations on the project, the PLC + LinuxCNC integration looks really nice and the machine layout seems very well thought out and organized.
Looking at the machine layout (heat press laminator, 4-axis CNC cutter, pallet transport, and the overhead projector), I was curious about the main application: is it aimed at processing sheet/panel materials in general (plastics/polymers, MDF, composites, laminates), or is it focused on a more specific material or process?
In my case, I’m working on a different kind of machine, more focused on laser cleaning and painting, with a modular gantry-style structure (about 2 m modules, extendable up to ~16 m on X, with ~2000 mm usable Z and ~300 mm Y). So it was really interesting to see how you handled the integration and the production flow in your system.
Regarding the integration approach: I started by trying to validate the same PLC-as-master / LinuxCNC-as-motion-controller model using mb2hal / Modbus directly, just to keep things simple and close to the field. In practice, I ran into some interoperability issues with the specific setup I have (mainly around protocol framing and what the HMI/PLC side actually exposes as “Modbus TCP”).
In the end, I validated the architecture using a Python bridge as well, but instead of Modbus TCP I used OPC UA as the integration layer between the HMI/SCADA side and LinuxCNC. With Python (using an OPC UA client library) talking to a running LinuxCNC instance, I can exchange status, commands, and recipe parameters in a very similar way to what you described: the operator never interacts with LinuxCNC directly, everything is driven from the HMI/PLC side, and LinuxCNC stays focused purely on motion.
Conceptually, the control model ends up being very close to yours: PLC/HMI remains the master, LinuxCNC is the motion controller, and the Python bridge handles the handshake, heartbeat, status propagation, and command flow between the two worlds. The main difference is just the transport layer (OPC UA instead of Modbus TCP) due to the constraints of my current hardware/software stack.
By the way, for systems like yours, do you usually integrate them with a SCADA layer, or do you prefer to keep it as PLC + HMI + LinuxCNC only? And if you do integrate SCADA, have you ever used or evaluated any open-source solutions?
Thanks again for sharing the real-world experience — it’s very valuable to see these hybrid architectures working reliably in production for years.