---
title: AB ControlLogix Unsolicited
slug: litmusedge/quickstart-guideindustrial-systems-connection-guideallen-bradleyab-controllogix-unsolicited
description: Review the following information for setting up and configuring the AB ControlLogix Unsolicited driver.
docTags: 
createdAt: 2026-10-14T17:33:48.838Z
---

Review the following information for setting up and configuring the AB ControlLogix Unsolicited driver. The driver receives data that a ControlLogix or CompactLogix PLC sends to Litmus Edge over EtherNet/IP (CIP).

Unlike most drivers, this driver does not poll the PLC. It listens on a TCP port and accepts connections from the PLC. The PLC sends data with CIP Data Table Write `MSG` instructions. Each tag returns the last value that the PLC sent for that tag name.

:::hint{type="info"}
**Note:** This driver is experimental. Some features might not work as expected.
:::

# Litmus Edge compatible series

| Compatibility parameter      | Compatible items                                                                                                                                                                                                                                                                                                                                                                                |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Driver type**              | Ethernet                                                                                                                                                                                                                                                                                                                                                                                        |
| **Validated devices/series** | [ControlLogix](https://www.rockwellautomation.com/en-us/products/hardware/allen-bradley/programmable-controllers/large-controllers/controllogix.html) and [CompactLogix](https://www.rockwellautomation.com/en-us/products/hardware/allen-bradley/programmable-controllers/small-controllers/compactlogix-family.html) controllers that support the CIP Data Table Read/Write `MSG` instruction |

To set up and configure this device in Litmus Edge (LE), do the following:

- Step 1: Set up and configure the PLC device
- Step 2: Set up the PLC device in Litmus Edge DeviceHub
- Step 3: Configure the list of registers

# Step 1: Set up and configure the PLC device

Make sure the PLC can reach the LE device over the network, and record the IP address of the LE network interface that the PLC connects to.

In the PLC program, configure a `MSG` instruction for each value that you want to send to LE:

- **Message type:** CIP Data Table Write
- **Destination element:** The tag name that you enter for the tag in LE. Tag names are case-sensitive.
- **Path:** The IP address of LE. The driver listens on port `44818` by default.

The PLC sends a value each time the `MSG` instruction runs. To send values regularly, trigger the instruction from a timer in the PLC program.

# Step 2: Set up the PLC device in Litmus Edge DeviceHub

Configure the following parameters when you [Connect a Device](docId\:pF5pwEP7Ata1NC7c0yQu_) with this driver. Update default values to the specific setup of your device.

| Parameter            | Value                                                                                                                                |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **Type**             | Allen-Bradley                                                                                                                        |
| **Driver**           | AB ControlLogix Unsolicited                                                                                                          |
| **NetworkInterface** | The LE network interface (IP address) that the driver listens on. Default value `0.0.0.0`, which listens on all interfaces           |
| **NetworkPort**      | The local TCP port that the driver listens on for connections from the PLC. Enter a value from `0` to `65535`. Default value `44818` |

The following parameter is under **Advanced Parameters**.

| Parameter       | Value                                                                                                                                                                                                                                    |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ReadTimeout** | How long a PLC connection can stay silent, in milliseconds. If the PLC sends nothing for this long, the driver drops the connection and sets the connection's tags to down. Enter a value from `1000` to `999999`. Default value `10000` |

For the **Meta Data**, **Status Register**, and **Optional Settings** options, see [Connect a Device](docId\:pF5pwEP7Ata1NC7c0yQu_).

# Step 3: Configure the list of registers

When you [Add a Tag](docId:89nruY50cZN0cPLIOmVdl) to the connected device, see the following sections. This driver does not support browsing tags.

See the following additional resources if necessary:

- [Organize Device and Tag Data by Using Metadata](docId\:gSM6iJPWjd0cCxWq2Qre2)
- [Tag Formula Variables](docId\:Xj0OqYONxM2BEhMwqkDWC)

## Free tags

This driver doesn't have a list of register names in the DeviceHub *Add Tag* form. In the **Name** field, enter the CIP tag name that the PLC sends, exactly as the `MSG` instruction defines it. Tag names are case-sensitive.

The tag updates each time the PLC sends a value for that tag name. The device doesn't show a *Connected* status until the PLC connects and sends data for a configured tag.

## Available value types

- `bool`
- `sint`
- `int`
- `dint`
- `real`
- `lint`

## Tag parameters

- **Name**: Enter the CIP tag name that the PLC sends. See the *Free tags* section.
- **Value Type**: Select a data type from the drop-down list.
- **ClientIP** (Optional): Enter the IP address of a PLC. If you enter an address, only values sent from that PLC update the tag, and the tag goes down when that PLC disconnects. Use this setting when several PLCs send the same tag name and you want a separate tag for each PLC.
- **Tag Name**: Enter a name for the tag.
- **Description** (Optional): Enter a description for the tag.
- **Tag Formula**: Enter a formula for the tag to process the generated data. You can use two variables: `value` (current tag value) and `timestamp` (current tag UNIX time in milliseconds). The following math functions are available:
  - sin
  - cos
  - sqrt
  - tan
  - power: power(`x`) performs the operation `10^x`.
  - log: log(`x`) is the natural logarithm (the logarithm is in base `e`).
  - exp: exp(`x`) performs the operation `e^x`.
- **Only Publish on Change of Value**: Select the checkbox to publish NATS messages only when the *value* parameter changes. *Change of Value* only applies to boolean, numeric (such as int or float), and simple string data types. It does not apply to complex types, such as JSON or array. Poll-once topics are not affected by *Change of Value* settings, and still receive a single message.
- **Meta Data**: Define key-value pairs to add to the device output payload.

:::hint{type="info"}
**Note:** If you use special characters in metadata key names, the special characters are replaced with underscore characters in the payload. This can cause two key names to be combined into one. For example, configuring the key names a\*\*b and a&\&b creates only one key name (a\_\_b).
:::

