# Siemens S7-1200 连接示例

Siemens S7-1200（简称 S7-1200）是一款紧凑型、模块化的 PLC，可完成简单逻辑控制、高级逻辑控制、HMI 和网络通信等任务的控制器。

本节将演示如何通过 Neuron OPC UA 插件连接 S7-1200。

## 连接 OPC UA Server（用户名/密码）

1. 在 TIA V16 编程软件中选择目标 PLC，右键打开 **属性** -> **常规** -> **OPC UA**。

2. 打开 **访问服务器** 的 **激活 OPC UA 服务器** 选项。

  ![s71200-1](./assets/s71200-1.jpg)

  

3. 在 **服务器上可用的安全策略** 列表中勾选需要的安全策略，如果安全需求不是特别高，可以只勾选 **无安全设置**，这样读写请求的速度会快一些。

4. 在 **可信客户端** 部分勾选 **运行过程中自动接受客户端证书**。

5. 在 **访客认证** 部分关闭 **启用访客认证**。

6. 在 **用户名和密码认证** 部分勾选 **启用用户名和密码认证**。

7. 在 **用户管理** 列表中添加用户名和密码。

8. 下载程序到 PLC。

## 添加程序块

1. 在 TIA V16 编程软件中选择目标 PLC，打开 **程序块** -> **添加新块**，添加名为 OPC UA Block 的 **全局DB** 块，在 OPC UA Block 中为每一个类型添加一个数据点，设置 **名称** 与**数据类型** 的类型应相同。

2. 勾选所有数据的点的 **从 HMI/OPC UA/Web API 可访问** 和 **从 HMI/OPC UA/Web API 可写** 选项。

  ![s71200-2](./assets/s71200-2.jpg)

  

3. 下载程序到 PLC。

## 添加服务器接口

1. 在 TIA V16 编程软件中选择目标 PLC， 打开 **OPC UA 通信** -> **服务器接口** -> **新增服务器接口**，添加名为 ServerInterfaces_1 的接口，拖动右侧 **OPC UA 元素** -> **项目数据** -> **程序块** 中的 OPC UA Block 到左侧的 **OPC UA 服务器接口** -> **Browse name** -> **ServerInterfaces_1** 下。

  ![s71200-3](./assets/s71200-3.jpg)

  

2. 下载程序到 PLC。

## 配置 Neuron

1. 通过 UaExpert 软件查看 PLC 测点信息，参考 [UaExpert](./uaexpert.md)。

    ![s71200-4](./assets/s71200-4.jpg)

2. Neuron 新增南向 OPC UA 设备，打开 **设备配置**，填写目标 PLC 的 **端点 URL**，用户名/密码，无需添加证书/密钥。

3. 可以修改**更新模式**为 Subscribe 或 Read&Subscribe，以 OPC UA 订阅方式获取数据。

4. 根据测点信息添加 **Groups** 和 **Tags**。

    ::: tip
    Siemens S7-1200 的 **NODEID** 是数字形式的，需要根据实际的数值设置 Neuron 的地址。
    :::

    数据类型对应关系:

    | PLC 数据类型 | OPCUA 数据类型 | Neuron 数据类型 |
    | ------------ | -------------- | --------------- |
    | AOM_IDENT    | UInt32         | UINT32          |
    | Bool         | Boolean        | BOOL            |
    | Byte         | Byte           | UINT8           |
    | CONN_ANY     | UInt16         | UINT16          |
    | CONN_OUC     | UInt16         | UINT16          |
    | CONN_PRG     | UInt16         | UINT16          |
    | Char         | Byte           | UINT8           |
    | DB_ANY       | UInt16         | UINT16          |
    | DB_DYN       | UInt16         | UINT16          |
    | DB_WWW       | UInt16         | UINT16          |
    | DWord        | UInt32         | UINT32          |
    | Date         | UInt16         | UINT16          |
    | DInt         | Int32          | INT32           |
    | EVENT_ANY    | UInt32         | UINT32          |
    | EVENT_ATT    | UInt32         | UINT32          |
    | EVENT_HWINT  | UInt32         | UINT32          |
    | HW_ANY       | UInt16         | UINT16          |
    | HW_DEVICE    | UInt16         | UINT16          |
    | HW_DPSLAVE   | UInt16         | UINT16          |
    | HW_HSC       | UInt16         | UINT16          |
    | HW_IEPORT    | UInt16         | UINT16          |
    | HW_INTERFACE | UInt16         | UINT16          |
    | HW_IO        | UInt16         | UINT16          |
    | HW_IOSYSTEM  | UInt16         | UINT16          |
    | HW_PWM       | UInt16         | UINT16          |
    | HW_SUBMODULE | UInt16         | UINT16          |
    | Int          | Int16          | INT16           |
    | LReal        | Double         | DOUBLE          |
    | OB_ANY       | Int16          | INT16           |
    | OB_ATT       | Int16          | INT16           |
    | OB_CYCLIC    | Int16          | INT16           |
    | OB_DELAY     | Int16          | INT16           |
    | OB_DIAG      | Int16          | INT16           |
    | OB_HWINT     | Int16          | INT16           |
    | OB_PCYCLE    | Int16          | INT16           |
    | OB_STARTUP   | Int16          | INT16           |
    | OB_TIMEERROR | Int16          | INT16           |
    | OB_TOD       | Int16          | INT16           |
    | PIP          | UInt16         | UINT16          |
    | PORT         | UInt16         | UINT16          |
    | RTM          | UInt16         | UINT16          |
    | Real         | Float          | FLOAT           |
    | SInt         | SByte          | INT8            |
    | String       | String         | STRING          |
    | Time         | Int32          | INT32           |
    | TimeOfDay    | UInt32         | UINT32          |
    | UDInt        | UInt32         | UINT32          |
    | UInt         | UInt16         | UINT16          |
    | USInt        | Byte           | UINT8           |
    | WChar        | UInt16         | UINT16          |
    | WString      | String         | STRING          |
    | Word         | UInt16         | UINT16          |



## 测试点位 1

| 名称                | 地址                  | 属性 | 类型   |
| ------------------- | --------------------- | ---- | ------ |
| DeviceManual        | 3!DeviceManual        | Read | STRING |
| DeviceRevision      | 3!DeviceRevision      | Read | STRING |
| EngineeringRevision | 3!EngineeringRevision | Read | STRING |
| HardwareRevision    | 3!HardwareRevision    | Read | STRING |
| OperatingMode       | 3!OperatingMode       | Read | INT32  |
| OrderNumber         | 3!OrderNumber         | Read | STRING |
| RevisionCounter     | 3!RevisionCounter     | Read | INT32  |
| SerialNumber        | 3!SerialNumber        | Read | STRING |
| SoftwareRevision    | 3!SoftwareRevision    | Read | STRING |

## 测试点位 2

| 名称   | 地址 | 属性       | 类型   |
| ------ | ---- | ---------- | ------ |
| SInt   | 4!12 | Read Write | INT8   |
| Int    | 4!9  | Read Write | INT16  |
| DInt   | 4!6  | Read Write | INT32  |
| Byte   | 4!4  | Read Write | UINT8  |
| UInt   | 4!17 | Read Write | UINT16 |
| UDInt  | 4!16 | Read Write | UINT32 |
| Real   | 4!11 | Read Write | FLOAT  |
| LReal  | 4!10 | Read Write | DOUBLE |
| Bool   | 4!3  | Read Write | BOOL   |
| String | 4!13 | Read Write | STRING |
