# Siemens S7 ISO TCP

西门子 S7 ISO TCP 是西门子公司推出的一种协议，主要用于与西门子 S7 系列 PLC 进行通信。此协议基于 TCP/IP 协议栈，使用 ISO-TSAP 协议来处理连接和数据传输，可以实现对 PLC 进行读写操作，包括读取和写入位、字、双字、定时器、计数器等数据类型。

Neuron 实现的 S7 ISOTCP 分为两个插件，其中 Siemens S7 ISOTCP 插件主要用于连接西门子 S200、S200smart、S1200、S1500 型号的 PLC，Siemens S7 ISOTCP for 300/400 插件主要用于连接西门子 S300、S400 型号并且扩展了以太网模块的 PLC。

## 添加插件

在 **配置 -> 南向设备**，点击**添加设备**来创建设备节点，输入插件名称，插件类型选择 **Siemens S7 ISOTCP** 或 **Siemens S7 ISOTCP for 300/400** 启用插件。

| 插件                          | 说明                                           |
| ----------------------------- | ---------------------------------------------- |
| Siemens S7 ISOTCP             | 适用于西门子 S200、S200smart、S1200、S1500 PLC |
| Siemens S7 ISOTCP for 300/400 | 适用于西门子 S300、S400 PLC                    |

## 设备配置

点击插件卡片或插件列，进入**设备配置**页。配置 Neuron 与设备建立连接所需的参数，下表为插件相关配置项。

| 字段                  | 说明                                               |
| --------------------- | -------------------------------------------------- |
| **PLC IP 地址**       | 目标 PLC 的 IPv4 地址                              |
| **PLC 端口**          | 目标 PLC 的端口，默认为 102                        |
| **PDU 大小**          | PDU 大小，默认 960                                 |
| **PLC 型号**          | 选择 PLC 型号，可选 S7-200 或 S7-300/400/1200/1500 |
| **连接类型**          | 连接到 PLC 的类型，可选值：PG、OP、PC              |
| **CPU 机架号 (rack)** | PLC 机架号，默认为 0                               |
| **CPU 槽号 (slot)**   | PLC 插槽号，默认为 1                               |
| **T1**     		  | 写请求并发数                                       |
| **T2**              | 请求发送后等待时间                                   |
| **T3**              | 读请求并发数                                        |

:::tip
当使用 Siemens S7 ISOTCP 插件连接S7 1200/1500 PLC 时，应进行如下设置：

* `优化块访问`必须被关闭。
* `访问级别`必须是**完全**，**连接机制**必须允许 GET/PUT。

具体操作步骤参考 [Siemens S7-1200/1500 PLC 设置](./plc/siemens-s7-1200-1500.md)。 
:::

## 设置组和点位

完成插件的添加和配置后，要建立设备与 Neuron 之间的通信，首先为南向驱动程序添加组和点位。

完成设备配置后，在**南向设备**页，点击设备卡片/设备列进入**组列表**页。点击**创建**来创建组，设定组名称以及采集间隔。完成组的创建后，点击组名称进入**点位列表**页，添加需要采集的设备点位，包括点位地址，点位属性，数据类型等。

公共配置项部分可参考[连接南向设备](../south-devices.md)，本页将介绍支持的数据类型和地址格式部分。

### 数据类型

* INT8
* UINT8
* INT16
* UINT16
* INT32
* UINT32
* FLOAT
* DOUBLE
* BIT
* STRING
* ARRAY_CHAR

### 地址格式

> AREA ADDRESS\[.BIT][.LEN][STR_TYPE]

#### AREA ADDRESS

| 区域 | 数据类型                                                     | 属性  | 备注       | PLC 区域                |
| ---- | ------------------------------------------------------------ | ----- | ---------- | ----------------------- |
| I    | int8/uint8/int16/uint16/bit/int32/uint32/float               | 读    | 输入       | 输入 I、E               |
| O/Q  | int8/uint8/int16/uint16/bit/int32/uint32/float               | 读/写 | 输出       | 输出 Q、A               |
| F/M  | int8/uint8/int16/uint16/bit/int32/uint32/float               | 读/写 | 标志       | 标志内存 M              |
| T    | int32/uint32/float                                           | 读/写 | 计时器     | 计时器 T                |
| C    | int16/uint16                                                 | 读/写 | 计数器     | 计数器 C                |
| DB   | int8/uint8/int16/uint16/bit/int32/uint32/float/double/string | 读/写 | 全局数据块 | 变量内存 V，全局数据块1 |

:::tip
对于全局数据块 DB，在 PLC 侧诸如 DBX，DBW，DBB 之类的地址，直接转化为 DBW 即可，不需要做字节换算，如 DBX1.0 -> DBW1.0。
:::

#### .BIT

选填，指某一地址的某一位，范围 0 - 7。

#### .LEN

当数据类型为 string 类型时，是必填项，表示字符串长度。

#### STR_TYPE

选填，表示字符串类型, 默认为单字节字符，选项值为 'D'，表示双字节字符。

### 地址示例

| 地址          | 数据类型   | 说明                                            |
| ------------- | ---------- | ----------------------------------------------- |
| I0            | int16      | I 区域，地址为 0                                |
| I1            | uint16     | I 区域，地址为 1                                |
| O2            | int16      | O 区域，地址为 2                                |
| Q2            | int16      | Q 区域，地址为 2                                |
| O3            | uint16     | O 区域，地址为 3                                |
| F4            | int16      | F 区域，地址为 4                                |
| F5            | int16      | F 区域，地址为 5                                |
| M6            | int16      | M 区域，地址为 6                                |
| T6            | int32      | T 区域，地址为 6                                |
| T7            | int32      | T 区域，地址为 7                                |
| C8            | uint16     | C 区域，地址为 8                                |
| C9            | uint16     | C 区域，地址为 9                                |
| DB10.DBW10    | int16      | 10 数据块中，起始数据字为 10                    |
| DB12.DBW10    | uint16     | 12 数据块中，起始数据字为 10                    |
| DB10.DBW10    | float      | 10 数据块中，起始数据字为 10                    |
| DB11.DBW10    | double     | 11 数据块中，起始数据字为 10                    |
| I0.0          | bit        | I 区域，地址为0，第 0 位                        |
| I0.1          | bit        | I 区域，地址为0，第 1 位                        |
| O1.0          | bit        | O 区域，地址为1，第 0 位                        |
| O1.2          | bit        | O 区域，地址为1，第 2 位                        |
| F2.1          | bit        | F 区域，地址为2，第 1 位                        |
| F2.2          | bit        | F 区域，地址为2，第 2 位                        |
| DB1.DBW10.0   | bit        | 1 数据块中，起始数据字为 10，第 0 位            |
| DB2.DBW1.7    | bit        | 2 数据块中，起始数据字为 1，第 7 位             |
| DB1.DBW12.20  | string     | 1 数据块中，起始数据字为 12，字符串长度为 20    |
| DB1.DBW12.20D | wstring    | 1 数据块中，起始数据字为 12，字符串长度为 20，双字节字符    |
| DB1.DBW100.20 | ARRAY_CHAR | 1 数据块中，起始数据字为 100，字符数组长度为 20 |

ARRAY_CHAR 展示和写入形式为字符串。

## 应用场景

您可通过 Neuron S7 ISOTCP 插件连接西门子 S7-1200 PLC，具体操作步骤，见 [Siemens 1200 PLC 连接示例](./example/s71200/s71200.md)

## 数据监控

完成点位的配置后，您可点击 **监控** -> **数据监控**查看设备信息以及反控设备，具体可参考[数据监控](../../../admin/monitoring.md)。
