---
title: Beckhoff TwinCAT3 Ethernet Symbolic
slug: litmusedge/quickstart-guide/industrial-systems-connection-guide/beckhoff/beckhoff-twincat3-ethernet-symbolic
description: Review the following information for setting up and configuring the Beckhoff TwinCAT3 Ethernet driver. 
docTags: 
createdAt: 2022-05-26T20:56:06.000Z
---

Review the following information for setting up and configuring the Beckhoff TwinCAT3 Ethernet Symbolic driver.

:::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** | [Beckhoff TwinCAT 3](https://www.beckhoff.com/en-ca/products/automation/twincat/tc1xxx-twincat-3-base/tc1200.html) |

The driver connects to the PLC as an ADS client over AMS/TCP. It reads and writes PLC variables, batching requests with ADS sum commands, and can browse the PLC symbol table, including arrays and structure members. You address tags by their PLC symbol path. See the *Free tags* section.

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

If the device is configured for Ethernet access, find its network parameters. Otherwise, follow the steps below.

The PLC accepts connections only from systems in its route table. Add a route for Litmus Edge before you connect the device. The PLC rejects a connection whose **LocalAmsId** does not match a route.

:::hint{type="info"}
**Note:** The Beckhoff PLC is also a PC with its own operating system, and you can set up its IP address in the same way as a PC.
:::

**To add a route on the PLC:**

1. Note down the following information and refer to it as needed.
   **Device**: TwinCAT 3 Beckhoff PLC
   **Communication I/F**: Ethernet
2. Launch a new project in TcXaeShell.
3. Click **Routes** to add the target Litmus Edge that connects to the PLC.

   ![](https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/HaponcqXFtWYQjLP27IRQ_twincat-01-update.png)
4. Click **Add...** and configure the following parameters:
   **Route Name (Target)**: Enter a name for the route.
   **AmsNetId**: Enter the AMS NetId for the route. If the PLC is running as a soft connection, and Litmus Edge and the panel PC are on the same network, the *AmsNetId* and *Address Info* values are the same, with `.1.1` at the end.
   **Transport Type**: Review and confirm the transport type for the route.
   **Address Info**: Enter the IP address of the target Litmus Edge in the network.
   **Target Route**: Select **Static**.

   ![](https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/-7FWVIf21WcYjwoyXpa0o_twincat-02-01.png)
5. Click the **Restart TwinCAT** icon. Then, click the **Login** icon to start the PLC runtime.

   ![](https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/HNFglQwMydR6a1sq3g0P6_twincat-03.png)

# 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**           | Beckhoff                                                                                                                                                                                                                                          |
| **Driver**         | Beckhoff TwinCAT3 Ethernet Symbolic                                                                                                                                                                                                               |
| **NetworkAddress** | The IP address of the PLC you defined in Step 1. Default value `192.168.0.1`                                                                                                                                                                      |
| **NetworkPort**    | The TCP port of the PLC. This must match the port configured on the PLC. Default value `48898`                                                                                                                                                    |
| **AdsPort**        | The ADS port of the PLC runtime: `851` for PLC runtime 1. Use `852`, `853`, or `854` for runtimes 2 to 4. Default value `851`                                                                                                                     |
| **LocalAmsId**     | The AMS NetId of the Litmus Edge device: `[Litmus Edge IP address].1.1`<br />For example, if the Litmus Edge IP address is `192.168.0.152`, enter `192.168.0.152.1.1`.<br />This value must match a route on the PLC. Default value `0.0.0.0.1.1` |

The following parameters are under **Advanced Parameters**.

| Parameter          | Value                                                                                                                                                                                                                                      |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **AmsId**          | The AMS NetId of the PLC, as six dotted octets, for example `172.16.17.10.1.1`. If you leave it empty, Litmus Edge uses the PLC's IP address with `.1.1` at the end. This is correct only when the PLC's AMS NetId matches its IP address. |
| **MaxRequestSize** | The maximum number of bytes retrieved in one request. Enter a value from `128` to `65536`. Default value `4096`                                                                                                                            |
| **ReadTimeout**    | How long the driver waits for a response, in milliseconds. Enter a value from `1000` to `60000`. Default value `5000`                                                                                                                      |

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. You can also [Browse and Add Tags from a Device](docId\:nZ8iGcvClQufkAB0i3s2a) for this device. Browsing reads the PLC symbol table, including arrays and structure members.

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 PLC symbol path of the variable, exactly as it is defined in the PLC. Symbol paths are case-sensitive. For example:

- `MAIN.counter`
- `GVL.arr[3]`
- `MAIN.fb.member`

You can also enter an absolute address in the form `[<indexGroup>:<indexOffset>]`. Both values are decimal, and the colon is required. For example:

- `[16448:389583]`, where 16448 is Index group and 389583 is Index offset

The device doesn't show a *Connected/disconnected* status accurately until you create a tag with a correct symbol path. Driver supports browsing. So it is recommended to browse and add tags to avoid syntax errors

## Available value types

- `BOOL`
- `SINT`
- `BYTE`
- `INT`
- `WORD`
- `DINT`
- `DWORD`
- `LINT`
- `LWORD`
- `REAL`
- `LREAL`
- `STRING`
- `WSTRING`
- `TIME`
- `LTIME`
- `DATE`
- `DATEANDTIME`
- `TIMEOFDAY`

## Tag parameters

- **Name**: Enter the PLC symbol path of the variable, exactly as it is defined in the PLC. See the *Free tags* section.
- **Value Type**: Select a data type from the drop-down list.
- **PollingInterval**: Enter how often the tag polls for data, in seconds. Enter `0` to disable polling. Default value `1`
- **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).
:::

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

- **Communication mode**: Select **Polling** or **Subscribe**. Default value **Polling**.
