---
name: "io"
section: "1"
platform: "linux"
package: "linuxcnc-uspace"
version: "1:2.9.4-2+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/io"
---

# io(1)

interacts with HAL or G-code in non-realtime

## NAME

iocontrol - interacts with HAL or G-code in non-realtime

## SYNOPSIS

**\[EMCIO\]**\
 **EMCIO = io**

## DESCRIPTION

I/O control handles I/O tasks like coolant, toolchange, E-stop and lube. The signals are turned on and off in non-realtime with G-code or in the case of E-stop in HAL.

The following pins are created by the non-realtime IO controller, usually found in $LINUXCNC\_HOME/bin/io

iocontrol is a non-realtime process - if you have strict timing requirements or simply need more I/O, consider using the realtime synchronized I/O provided by [**motion**(9)](/motion/9.md) instead.

The INI file is searched for in the directory from which halcmd was run, unless an absolute path is specified.

## PINS

- **iocontrol.0.coolant-flood**

  **(Bit, Out) TRUE when flood coolant is requested.**

- **iocontrol.0.coolant-mist**

  **(Bit, Out) TRUE when mist coolant is requested.**

- **iocontrol.0.emc-enable-in**

  **(Bit, In) Should be driven FALSE when an external E-stop condition exists.**

- **iocontrol.0.lube**

  **(Bit, Out) TRUE when lube is requested.  This pin gets driven True when** **the controller comes out of E-stop, and when the "Lube On" command gets** **sent to the controller.  It gets driven False when the controller goes** **into E-stop, and when the "Lube Off" command gets sent to the controller.**

- **iocontrol.0.lube\_level**

  **(Bit, In) Should be driven FALSE when lubrication tank is empty.**

- **iocontrol.0.tool-change**

  **(Bit, Out) TRUE when a tool change is requested.**

- **iocontrol.0.tool-changed**

  **(Bit, In) Should be driven TRUE when a tool change is completed.**

- **iocontrol.0.tool-number**

  **(s32, Out) Current tool number.**

- **iocontrol.0.tool-prep-number**

  **(s32, Out) The number of the next tool, from the RS274NGC T-word.**

- **iocontrol.0.tool-prep-pocket**

  **(s32, Out) This is the pocket number (location in the tool storage** **mechanism) of the tool requested by the most recent T-word.**

- **iocontrol.0.tool-prepare**

  **(Bit, Out) TRUE when a T***n* tool prepare is requested.

- **iocontrol.0.tool-prepared**

  **(Bit, In) Should be driven TRUE when a tool prepare is completed.**

- **iocontrol.0.user-enable-out**

  **(Bit, Out) FALSE when an internal E-stop condition exists.**

- **iocontrol.0.user-request-enable**

  **(Bit, Out) TRUE when the user has requested that E-stop be cleared.**

- **iocontrol.0.tool-prep-index**

  **(s32, Out) IO's internal array index of the prepped tool requested** **by the most recent T-word.  0 if no tool is prepped.  On Random** **toolchanger machines this is the tool's pocket number (ie, the same as the** **tool-prep-pocket pin), on Non-random toolchanger machines this is** **a small integer corresponding to the tool's location in the internal** **representation of the tool table.  This parameter returns to 0 after a** **successful tool change (M6).**

## SEE ALSO

[**io**(1)](/io/1.md) [**iov2**(1)](/iov2/1.md) [**motion**(9)](/motion/9.md)

## REPORTING BUGS

Report bugs at  ⟨https://github.com/LinuxCNC/linuxcnc/issues⟩

## AUTHOR

Derived from a work by Fred Proctor & Will Shackleford.

## COPYRIGHT

Copyright © 2004 the LinuxCNC project.\
 This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
