# S7 模块文档 (Python 版本)

## S7

#### S7 读取 Int

* 方法说明

  S7 读取 Int。

```python
def read_s7_int(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，读取的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* 输出参数
* `None`，读取失败。
* `int`，读取成功的返回值。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 读取 DInt

* 方法说明

  S7 读取 DInt。

```python
def read_s7_dint(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，读取的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* 输出参数
* `None`，读取失败。
* `int`，读取成功的返回值。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 读取 Word

* 方法说明

  S7 读取 Word。

```python
def read_s7_word(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，读取的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* 输出参数
* `None`，读取失败。
* `int`，读取成功的返回值。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 读取 DWord

* 方法说明

  S7 读取 DWord。

```python
def read_s7_dword(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，读取的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* 输出参数
* `None`，读取失败。
* `int`，读取成功的返回值。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 读取 String

* 方法说明

  S7 读取 String。

```python
def read_s7_string(plc_type: str, ip: str, block_and_offset: str) -> Optional[str]:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，读取的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* 输出参数
* `None`，读取失败。
* `str`，读取成功的返回值。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 读取 Bool

* 方法说明

  S7 读取 Bool。

```python
def read_s7_boolean(plc_type: str, ip: str, block_and_offset: str) -> Optional[bool]:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，读取的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* 输出参数
* `None`，读取失败。
* `bool`，读取成功的返回值。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 写入 Int

* 方法说明

  S7 写入 Int。

```python
def write_s7_int(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，写入的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* `value`，int 类型，写入的值。
* 输出参数
* 成功返回 `True`，失败返回 `False`。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 写入 DInt

* 方法说明

  S7 写入 DInt。

```python
def write_s7_dint(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，写入的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* `value`，int 类型，写入的值。
* 输出参数
* 成功返回 `True`，失败返回 `False`。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 写入 Word

* 方法说明

  S7 写入 Word。

```python
def write_s7_word(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，写入的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* `value`，int 类型，写入的值。
* 输出参数
* 成功返回 `True`，失败返回 `False`。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 写入 DWord

* 方法说明

  S7 写入 DWord。

```python
def write_s7_dword(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，写入的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* `value`，int 类型，写入的值。
* 输出参数
* 成功返回 `True`，失败返回 `False`。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 写入 String

* 方法说明

  S7 写入 String。

```python
def write_s7_string(plc_type: str, ip: str, block_and_offset: str, value: str) -> bool:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，写入的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* `value`，str 类型，写入的值。
* 输出参数
* 成功返回 `True`，失败返回 `False`。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 写入 Bool

* 方法说明

  S7 写入 Bool。

```python
def write_s7_boolean(plc_type: str, ip: str, block_and_offset: str, value: bool) -> bool:
```

* 输入参数
* `plc_type`，str 类型，PLC 类型，可选值（区分大小写）：S1200/S300/S400/S1500/S200Smart/S200。
* `ip`，str 类型，PLC IP。
* `block_and_offset`，str 类型，写入的地址，支持的区域取值示例如下（区分大小写）：

  | 地址名称 | 地址代号 | 示例 |
  | --- | --- | --- |
  | 中间寄存器 | M | M100,M200 |
  | 输入寄存器 | I | I100,I200 |
  | 输出寄存器 | Q | Q100,Q200 |
  | DB块寄存器 | DB | DB1.100,DB1.200.7 |
  | V寄存器 | V | V100,V200 |
  | 定时器的值 | T | T100,T200 |
  | 计数器的值 | C | C100,C200 |
  | 智能输入寄存器 | AI | AI100,AI200 |
  | 智能输出寄存器 | AQ | AQ100,AQ200 |
* `value`，bool 类型，写入的值。
* 输出参数
* 成功返回 `True`，失败返回 `False`。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 通用写入

* 方法说明

  S7 写入 Int、DInt、Word、DWord、String、Bool。

```python
def write_s7(plc_type: str, ip: str, slot: int, rack: int, data_type: str, block_and_offset: str, value: Any) -> bool:
```

* 输入参数
* `plc_type`：同上
* `ip`：同上
* `slot`：CPU 模块的插槽号
* `rack`：中央机架
* `data_type`：在 Int、DInt、Word、DWord、String、Bool 中可选
* `block_and_offset`：同上
* `value`: 与 data_type 类型匹配的值
* 输出参数
* 成功返回 `True`，失败返回 `False`。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。

#### S7 通用读取

* 方法说明

  S7 读取 Int、DInt、Word、DWord、String、Bool 类型地址的值。

```python
def read_s7(plc_type: str, ip: str, slot: int, rack: int, data_type: str, block_and_offset: str) -> Any:
```

* 输入参数
* `plc_type`：同上
* `ip`：同上
* `slot`：CPU 模块的插槽号
* `rack`：中央机架
* `data_type`：在 Int、DInt、Word、DWord、String、Bool 中可选
* `block_and_offset`：同上
* 输出参数
* `None`，读取失败。
* `Any`，读取成功的返回值。
* 异常
  本方法不抛出异常，异常捕获后只作日志记录。
