# Beckhoff ADS

[TwinCAT] 是由 Beckhoff Automation 开发的一种控制技术。它是一种基于软件的控制系统，用于自动化和控制应用。TwinCAT 能够运行在多种平台上并支持多种编程语言。

通用配置步骤见[添加南向驱动](../south-devices.md)与[组与点位](../../groups-tags/groups-tags.md)。

EMQX Neuron Beckhoff ADS 驱动使用户可以通过 TCP/IP 连接到 Beckhoff TwinCAT PLC。

## 添加驱动

在 **数据采集 → 南向设备** 页点击 **添加设备**，驱动类型选择 **Beckhoff ADS**。

## 连接参数

点击驱动卡片进入**设备配置**页填写：

| 字段             | 说明                                         |
| ---------------- | -------------------------------------------- |
| 设备 IP 地址     | 远程设备 IP。                                |
| 设备端口         | 远程设备 TCP 端口（默认 48898）。            |
| 源 AdsAmsNetId   | 运行 EMQX Neuron 的设备的 AMS Net ID。            |
| 源 AdsPortNr     | 运行 EMQX Neuron 的设备的 AMS Port （默认 851）。 |
| 目标 AdsAmsNetId | 目标 PLC 的 AMS Net ID。                     |
| 目标 AdsPortNr   | 目标 PLC 的 AMS Port（默认 851）。           |

请注意，为了让 EMQX Neuron 能与 TwinCAT PLC 正常通信，需要在目标 TwinCAT 软件中添加和设置对应的 ADS 路由。

其中涉及的关键 ADS 概念如下：

| 概念               | 说明                                                         |
| ------------------ | ------------------------------------------------------------ |
| ADS 协议           | [ADS] (Automation Device Specification) 是 TwinCAT 的通讯协议。<br />它使得 TwinCAT 系统能够通过媒介独立的串行或网络连接，实现数据的交换和控制。<br />ADS 旨在为 TwinCAT 系统中控制器与用户界面之间的通信提供标准接口。 |
| AMS Net ID         | [AMS Net ID] 是 TwinCAT 网络中本地计算机的地址。它由6个字节组成，用点分十进制表示（例如： “1.2.3.4.5.6”） 。<br />为避免通信冲突，AMS Net ID 在 TwinCAT 网络中必须是唯一的。<br />默认情况下，TwinCAT 通过在系统的 IP 地址后附加 “.1.1” 来生成 AMS Net ID 。<br />例如，在 IP 地址为 “172.17.213.60” 的系统中， 默认生成的 AMS Net ID 将为 “172.17.213.60.1.1” 。**注意**：实际场景不一定会使用默认生成的方式，这时请在 TwinCAT 软件中查看 AMS Net ID。 |
| AMS port           | TwinCAT 网络中的 ADS 设备由 AMS Net ID 和 [AMS port] 标识。<br />每个 TwinCAT 系统通常为特定的目的使用特定的 AMS Port 。<br />例如，Port 801 用于系统通信，Port 851 用于事件通知。 |
| Index group/offset | ADS [index group 和 index offset] 是 TwinCAT ADS 系统服务中用于设备或程序之间进行数据交换的规范。<br />所有的读取和写入操作都通过 index group 和 index offset 在 PLC 上进行。<br />Index offset 是16位的，index offset 是32位的。<br />Index group 用于指定正在访问的数据的类别或类型，而 index offset 指定该类别或类型中的特定数据元素。 |

## 点位配置

以下为本驱动支持的数据类型与地址格式。

### 数据类型

* BOOL
* INT8
* UINT8
* INT16
* UINT16
* INT32
* UINT32
* INT64
* UINT64
* FLOAT
* DOUBLE
* STRING

### 地址格式

对 ADS 驱动来说，一个点位地址由 INDEX_GROUP 和 INDEX_OFFSET 两个部分组成，分别表示 index group 和 index offset 。

> INDEX_GROUP,INDEX_OFFSET

`INDEX_GROUP` 和 `INDEX_OFFSET` 可以分别使用十进制或十六进制指定。

### 地址示例

| 地址            | 数据类型           | 说明                        |
| --------------- | ------------------ | --------------------------------------------------------- |
| 0x4040,0x7d01c  | bool               | index_group 0x4040, index_offset 0x7d01c                  |
| 16448,51029     | uint8              | index_group 0x4040, index_offset 0x7d01d                  |
| 0x4040,512896.5 | string             | index_group 0x4040, index_offset 0x7d380, 字符串长度为 5  |

## 应用场景

您可通过 EMQX Neuron 通过 ADS 协议采集倍福 PLC 上不同地址区域的数据，具体步骤，见[采集 PLC 数据（Beckhoff ADS 协议）](./plc-ads/ads.md)。

[TwinCAT]: https://www.beckhoff.com/en-us/products/automation/twincat/
[ADS]: https://infosys.beckhoff.com/english.php?content=../content/1033/tcadscommon/12440276875.html
[AMS Net ID]: https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_userinterface/3813966475.html
[AMS port]: https://infosys.beckhoff.com/english.php?content=../content/1033/tcplclib_tc2_system/31064331.html
[index group 和 index offset]: https://infosys.beckhoff.com/english.php?content=../content/1033/tcadscommon/12495372427.html
