Start Here: Why Ignition Shows No Device for the Tormach
You open the Ignition Gateway, go to add a device connection, and scroll the driver list. Nothing says Tormach. Nothing says PathPilot. You try a Modbus TCP device pointed at the controller IP, and it never connects.
That is not a misconfiguration. Ignition does not ship a native PathPilot driver. The PathPilot controller has never shipped with a documented, out-of-the-box SCADA protocol. Ignition is compatible with a PCNC 440 only after you put a protocol on the machine side that Ignition can read.
You have three ways to do that:
- MTConnect. Run an MTConnect agent and adapter for the controller, then use Ignition's MTConnect module.
- A custom Python bridge on the controller. Read machine state from the control and publish it over Modbus TCP, MQTT, or OPC UA.
- External I/O. Wire machine signals into a network I/O block that Ignition polls. This path does not touch PathPilot at all.
Middleware such as KEPServerEX only helps if it has a driver that matches something the controller actually speaks. Settle the controller side first. Buying a driver before you know what the controller exposes is the check that wastes the most time.
| Symptom in Ignition | Likely cause | Next check |
|---|---|---|
| No Tormach/PathPilot driver in the device list | No native driver exists | Check 1: identify the control |
| Modbus TCP device stuck connecting | No Modbus server running on the controller | Check 2: native protocols |
| MTConnect module reports no data | No agent/adapter running for the control | Check 2, then Check 3 |
| Tags update, then freeze during cutting | Bridge script crashed or starved of CPU | Pitfalls section |
| Bridge disappears after a control update | Update replaced the files on the controller | Pitfalls section |
Check 1: Identify the Control Software and Version
Reading: Open the About/version screen on the controller and record the PathPilot version. Also confirm what hardware the control runs on.
- The machine runs PathPilot. PathPilot is a Linux-based control derived from the open-source LinuxCNC project. That lineage matters, because LinuxCNC has a Python status interface. Go to Check 2.
- The machine is an older Tormach retrofit running Mach3 on Windows. You are on a different platform with different integration options. Stop here and scope that separately.
Record the exact version. PathPilot has changed a lot across releases. Shell access, custom Python, and Modbus support all vary between versions, so every later branch depends on this number.
Check 2: Test for a Protocol the Control Already Serves
Reading: From a laptop on the same subnet, scan the controller IP for open TCP ports. Check the PathPilot documentation for your version for any data-output or Modbus feature.
- Modbus is listed, but only for sensors. Earlier PathPilot Modbus support was used to connect sensors to the control. In that role the control acts as a Modbus master polling devices. Ignition's Modbus driver is also a client. Two clients cannot poll each other, and that explains the stuck connection. Treat this as "no usable protocol" and go to Check 3.
- An open port that answers a Modbus TCP read, or a documented server mode. Add a Modbus TCP device in Ignition, map the documented registers, and skip to verification.
- Nothing open, nothing documented. This is the usual result. Go to Check 3.
Do not install the MTConnect module yet. The module is only a consumer. It needs an agent on the network that serves the machine's data, and a stock PathPilot control does not run one.
Check 3: Confirm You Can Run Python on the Controller
Reading: On your PathPilot version, check whether you can reach a terminal and whether custom Python functions or scripts are still supported.
The mechanism works like this. LinuxCNC exposes machine state through a Python status interface and through HAL pins. Those include task and interpreter state, the loaded program, current line, positions, spindle state, and error messages. A script on the controller can poll that interface and push the values out over any protocol you choose. Look up the exact field names in the LinuxCNC developer documentation that matches your control's base.
- Python and network access are available. Build the bridge in the next section.
-
The controller is locked down, or you cannot risk modifying it. Use external I/O instead:
- Wire a spindle-current transducer into an analog input on a Modbus TCP I/O block.
- Wire the stack light or a spare machine output into digital inputs on the same block.
- Poll the block from Ignition.
Build the Python Bridge and Connect Ignition
- Define the tag contract first. A useful minimum for a PCNC 440 is: controller mode, program running/paused/idle, loaded program name, current line, spindle on/off and commanded speed, feed override, active error text, and a heartbeat counter.
-
Pick the outbound protocol.
- MQTT suits an IoT-style architecture, using the MQTT modules in Ignition.
- Modbus TCP server on the controller works with Ignition's built-in Modbus driver. Pack strings into registers.
- An MTConnect adapter plus agent works with the MTConnect module and gives you a standard CNC data model.
- Write the polling loop at a low rate. One update per second is enough for SCADA and analytics. Keep the loop outside the real-time motion path.
- Run it as a service so it restarts on boot and after a crash. Log to a file.
- Configure the Ignition side. Add the device connection or MQTT/MTConnect source, then create tags against the contract. Enable history on state and spindle tags for utilization reports.
Verify:
- Watch the heartbeat tag in Ignition increment steadily. A frozen heartbeat means the bridge is dead, not that the machine is idle.
- Cycle start a short program. Confirm the state tag goes idle → running → idle and that the line number advances.
- Trigger a harmless error, such as a soft-limit jog. Confirm the error text reaches Ignition.
- Run a real part with the bridge active. Check that toolpath motion and screen response are unchanged.
Pitfalls That Recur on PathPilot Integrations
- Updates wipe your work. A PathPilot update can replace the OS image or application files. Keep the bridge script and its service definition in version control and re-deploy after every update. Recheck Check 3 after each update too.
- Loading the controller. The same box runs motion control. Heavy polling, databases, or dashboards on the controller cost you machine performance. Run only the lightweight publisher there and do everything else on the Ignition gateway.
- Chasing a driver first. KEPServerEX or a third-party module does nothing until the controller speaks a matching protocol. Finish the checks before buying anything.
- Treating stale data as idle. Without a heartbeat, a crashed bridge looks exactly like a parked machine. Alarm on heartbeat age in Ignition.
- Network exposure. Put the controller on an isolated machine VLAN. Allow only the gateway to reach the bridge port.
FAQ
How do I connect Ignition to a Tormach PCNC 440?
Add a protocol on the controller side first. That means an MTConnect agent/adapter, a Python bridge publishing over MQTT or Modbus TCP, or external I/O wired to a Modbus TCP block. Then point the matching Ignition driver or module at it. Ignition has no native PathPilot driver.
How do I know if PathPilot supports Modbus for SCADA?
Check the Modbus documentation for your PathPilot version and test the controller IP with a Modbus TCP read from a laptop. Where PathPilot supported Modbus, it was used for sensors feeding the control. That makes the control a master, which Ignition's Modbus client cannot poll.
How do I get CNC status into Ignition without modifying PathPilot?
Wire a spindle-current transducer and the stack light signals into a Modbus TCP I/O block and poll it from Ignition. You get run, idle, alarm, and utilization data, but not program names or line numbers.
Does the Ignition MTConnect module work with PathPilot?
Only if an MTConnect agent and adapter are serving the controller's data. The module is a consumer, and a stock PathPilot control does not run an agent. If your PathPilot version will not allow a custom adapter, or the controller's data interfaces are undocumented for your release, stop and ask Tormach support which interfaces they support. Take Ignition driver and module questions to Inductive Automation support.