Skip to main content
U.S. flag

An official website of the United States government

Official websites use .gov
A .gov website belongs to an official government organization in the United States.

Secure .gov websites use HTTPS
A lock ( ) or https:// means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.

Process Controllers (Temperature, Pressure, etc.)


Process controllers are a class of NICE devices encompassing anything which controls a continuously varying quantity like temperature, or pressure using a feedback loop. One process controller may control multiple quantities simultaneously and may allow many quantities to be monitored. NICE presents all process controllers the same way, regardless of the type of quantity they are controlling. All process controllers have:

  • 1 or more sensors - A sensor monitors the state of a single quantity such as a temperature.
  • 0 or more control loops - A control loop “drives” a sensor to a given value and has a:
    • Setpoint - The value it is trying to drive a quantity towards.
    • Associated sensor - The sensor corresponding to the quantity being controlled.
    • Control parameters - Several properties describing how the control process is overseen by NICE. These are stored in nodes and discussed later.

Note: The process controller device class does NOT include devices, which control "steady" quantities, such as power supplies. This is because these devices generally achieve a desired set point quickly, with little variation. Additionally, power supplies essentially operate with 2 setpoints (current and voltage), which are sought simultaneously, until one is achieved.

Basic Interaction

To change the value of the sensor being controlled by control loop, you need to move the corresponding setpoint. This is typically done by 1st setting the primaryControlLoop node (if not already configured) and then running a command like:

>> move temp 500K

(If the unit is omitted then the user unit is used -- like any node).

This will set the setpoint of the Nth control loop (whatever index you configured in primaryControlLoop) and then wait for the temperature to stabilize (see "Wait Parameters" below for a full description).


If you want to set the setpoint on the controller, but don't want to wait, then directly move the setpoint you are interested in:

>> move temp.setPoint_1 500K

You can read the primary sensor with the command:

>> read temp

Or a specific sensor with:

>> read temp.sensor_<X>


Sensors values are accessed via nodes. These nodes do not have fixed names, because different types of controllers refer to them differently and it is useful to have NICE’s name correspond to the physical controller. For example, one brand of controller, refers to sensors a “A”, “B”, “C”, etc. while another brand may refer to them as “External” and “Internal”.

These nodes will be named:

  • <device>.sensor_<name> - the sensor’s reading
  • <device>.sensor_<name>_description – a configurable description
  • <device>.sensor_<name>_relevantSlotIndices – an array value which can describe which samples a sensor is relevant to

These sensors are regularly queried, by NICE at a configurable period: <device>.backgroundPollPeriod.

Control Loops

Tight control of sensor values in managed in a control loop by the process controller hardware. NICE provides access to each of the N control loops through the following nodes:

  • controlLoopSensor_N – The sensor the that the control loop will attempt control, within the process controller.
  • setpoint_N – The sensor reading the control loop is trying to achieve.
  • controlLoopState_N – The state of the control loop (BUSY or IDLE).

Wait Parameters

There are several settings which affect when NICE considers a change of setpoint to be complete. This will affect how long a move command sits in the queue or how long NICE waits, before a count starts, inside a trajectory.

  • Stability - When a setpoint is moved, NICE first attempts to achieve "stability". NICE considers a sensor to be stable when its reading has continuously been within a small range (tolerance) of the setpoint for period of time (toleranceBandTime). If this process takes too long, NICE will give up and issue a warning message.
    • tolerance_N – How close the sensor needs to be to the setpoint
    • toleranceBandTime_N – How long the sensor needs to be continuously, within tolerance
    • timeout_N - How long to wait before giving up.
  • holdTime_N - When stability is achieved, or fails due to a timeout, NICE enters a holdTime period. This gives the sample an opportunity to equilibrate.

Note: If a setpoint is moved within tolerance, of the control sensor’s current reading, then NICE will assume that stability has already been achieved and immediately proceed to the hold time period. NICE will still write the new setpoint to the process controller hardware.

Note: If timeout is set to 0, then NICE will give up on achieving stability and move directly to the hold time period without issuing a warning.


Created March 21, 2019, Updated March 6, 2023