# Siemens MPI

MPI 是一种基于西门子 MPI 接口的通信协议，它允许 PLC 与其他设备（如 SCADA 系统、HMI 设备、其他 PLC 等）进行数据交换。MPI 接口一般内置于 S7300 和 S7400 PLC。

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

MPI 需要经过专门的线缆才能被 PC 访问到。首先需要通过 6ES7-972-0CA23-0XA0 模块（或兼容模块）将 MPI 转换到 RS232 串口协议，然后通过 USB-RS232 模块连接到 PC，如果 PC 有 RS232 接口则无需第二步转换。

EMQX Neuron 的 MPI 驱动可用于S7300 和 S7400 PLC 的数据访问。

## 添加驱动

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

## 连接参数

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

| 字段         | 说明                        |
| ------------ | --------------------------- |
| 连接超时时间  |  连接超时时间，单位为毫秒     |
| 指令发送间隔  |  发送协议指令时间间隔，单位为毫秒 |
| 目标站号     |   设备的 MPI 站点号，默认为 2 |
| 串口设备     |   串口设备路径，默认为 /dev/ttyUSB0 |
| 停止位       |   串口停止位，默认且只能为 1 |
| 校验位       |   串口校验位，默认且只能为 Odd |
| 波特率       |   串口波特率，默认为 38400 |
| 数据位       |   串口数据位，默认且只能为 8 |

## 点位配置

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

### 数据类型

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

### 地址格式

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

#### AREA ADDRESS

| 区域 | 数据类型                                                     | 属性  | 备注                    |
| ---- | ------------------------------------------------------------ | ----- | ----------------------- |
| DB.DBB   |int8，uint8，int16，uint16，bit，int32，uint32，int64，uint64，float，double，string | 读    | 主存数据块，以 bytes 读写 |
| M        | int8，uint8，int16，uint16，bit，int32，uint32，int64，uint64，float，double，string | 读/写 | 标志内存 M，以 bytes 读写  |

#### .BIT

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

#### .LEN

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

### 地址示例

| 地址         | 数据类型 | 说明                                         |
| ------------ | -------- | -------------------------------------------- |
| DB1.DBB10 | int16    | DB1 数据块中，起始数据地址为 10 |
| DB2.DBB10 | uint16   | DB2 数据块中，起始数据地址为 10 |
| DB1.DBB12 | float    | DB1 数据块中，起始数据地址为 12 |
| DB1.DBB14 | double   | DB1 数据块中，起始数据地址为 14 |
| DB1.DBB19.1 | bit      | DB1 数据块中，起始数据地址为 19，第 2 位 |
| DB1.DBB19.7 | bit      | DB1 数据块中，起始数据地址为 19，第 8 位 |
| DB1.DBB20.20 | string   | DB1 数据块中，起始数据地址为 20，字符串长度为 20 |
| M98  | int8     | M 区，起始数据地址为 98 |
| M99  | uint8    | M 区，起始数据地址为 99 |
| M100 | int16    | M 区，起始数据地址为 100 |
| M102 | uint16   | M 区，起始数据地址为 102 |
| M104 | float    | M 区，起始数据地址为 104 |
| M106 | double   | M 区，起始数据地址为 106 |
| M111.3 | bit      | M 区，起始数据地址为 111，第 4 位 |
| M112.20 | string   | M 区，起始数据地址为 20，字符串长度为 20 |
| I2.1 | bit   | I 区，起始数据地址为 2，第 1 位 |
| Q0.7 | bit   | Q 区，起始数据地址为 0，第 7 位 |
