451 lines
13 KiB
Markdown
451 lines
13 KiB
Markdown
|
|
# Modbus TCP (Python 版本)
|
|||
|
|
|
|||
|
|
#### Func01 读取线圈量
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取线圈量,功能码 01。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_coil_status(ip: str, port: int, slave_id: int, offset: int) -> bool | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* bool: 读取成功的返回值
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func02 读取线圈量
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取线圈量,功能码 02。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_input_status(ip: str, port: int, slave_id: int, offset: int) -> bool | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* bool: 读取成功的返回值
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func03 读取保持寄存器
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取保持寄存器,功能码 03。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_holding_register(ip: str, port: int, slave_id: int, offset: int, data_type: int) -> int | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* data_type: int 类型,2:无符号整形,3:有符号整形
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* int: 读取成功的返回值
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func04 读取输入寄存器
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取只读输入寄存器,功能码 04。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_input_register(ip: str, port: int, slave_id: int, offset: int, data_type: int) -> int | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* data_type: int 类型,2:无符号整形,3:有符号整形
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* int: 读取成功的返回值
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func01 批量读取线圈量
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取线圈量多个连续地址值,并以数组的形式返回其中的值,功能码 01。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def batch_read_coil_status(ip: str, port: int, slave_id: int, offset: int, len: int) -> list[bool] | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 首地址
|
|||
|
|
* len: int 类型,Modbus 地址数量
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* list[bool]: 读取成功后,返回结果数组
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func02 批量读取离散输入
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取离散输入多个连续地址值,并以数组的形式返回其中的值,功能码 02。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def batch_read_input_status(ip: str, port: int, slave_id: int, offset: int, len: int) -> list[bool] | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 首地址
|
|||
|
|
* len: int 类型,Modbus 地址数量
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* list[bool]: 读取成功后,返回结果数组
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func03 批量读取保持寄存器
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取保持寄存器多个连续地址值,并以数组的形式返回其中的值,功能码 03。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def batch_read_holding_registers(ip: str, port: int, slave_id: int, offset: int, len: int) -> list[int] | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 首地址
|
|||
|
|
* len: int 类型,Modbus 地址数量
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* list[int]: 读取成功后,返回结果数组
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func04 批量读取输入寄存器
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取输入寄存器多个连续地址值,并以数组的形式返回其中的值,功能码 04。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def batch_read_input_registers(ip: str, port: int, slave_id: int, offset: int, len: int) -> list[int] | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 首地址
|
|||
|
|
* len: int 类型,Modbus 地址数量
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* list[int]: 读取成功后,返回结果数组
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func05 写入线圈量
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入线圈量,功能码 05。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def write_coil_status(ip: str, port: int, slave_id: int, offset: int, value: bool) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* value: bool 类型,写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func06 写入保持寄存器
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入保持寄存器,功能码 06。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def write_holding_register(ip: str, port: int, slave_id: int, offset: int, data_type: int, value: int) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* data_type: int 类型,2:无符号整形,3:有符号整形
|
|||
|
|
* value: int 类型,写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func0f 批量写入线圈量
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入线圈量多个连续地址,功能码 0f。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def batch_write_coil_status(ip: str, port: int, slave_id: int, offset: int, value: list[bool]) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* value: list[bool] 类型,多个需写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### Func10 批量写入保持寄存器
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入保持寄存器多个连续地址,功能码 10。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def batch_write_holding_register(ip: str, port: int, slave_id: int, offset: int, value: list[int]) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* value: list[int] 类型,多个需写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### 通用写入单个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入单个地址,通过参数 type 指定读取的地址类型。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def write_single_modbus_value(ip: str, port: int, slave_id: int, type_str: str, offset: int, value: int) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* type_str: str 类型,表示地址类型,可选择'0x','1x','3x','4x',和功能码的对应关系如下:
|
|||
|
|
* 0x:对应功能码0x01,表示读线圈
|
|||
|
|
* 1x:对应功能码0x02,表示读离散输入
|
|||
|
|
* 3x:对应功能码0x04,表示读输入寄存器
|
|||
|
|
* 4x:对应功能码0x03,表示读保持寄存器
|
|||
|
|
* offset: int 类型,表示Modbus 地址
|
|||
|
|
* value: int 类型,表示写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### 通用写入多个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入单个地址,通过参数 type 指定读取的地址类型。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def write_batch_modbus_value(ip: str, port: int, slave_id: int, type_str: str, offset: int, values: list[int]) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* type_str: str 类型,表示地址类型,可选择'0x','1x','3x','4x',和功能码的对应关系如下:
|
|||
|
|
* 0x:对应功能码0x01,表示读线圈
|
|||
|
|
* 1x:对应功能码0x02,表示读离散输入
|
|||
|
|
* 3x:对应功能码0x04,表示读输入寄存器
|
|||
|
|
* 4x:对应功能码0x03,表示读保持寄存器
|
|||
|
|
* offset: int 类型,表示Modbus 地址
|
|||
|
|
* values: list[int] 类型,表示写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### 通过实例名称写入单个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入单个地址,通过参数 name 指定已经配置的实例名称。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def write_single_modbus_value_by_instance_name(name: str, offset: int, value: int) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* name: str 类型,已经配置的实例名称
|
|||
|
|
* offset: int 类型,表示 Modbus 地址
|
|||
|
|
* value: int 类型,表示写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
如果没有配置 modbus 实例,则会抛出初始化异常。
|
|||
|
|
|
|||
|
|
#### 通过实例名称写入多个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 写入多个地址,通过参数 name 指定已经配置的实例名称。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def write_batch_modbus_value_by_instance_name(name: str, offset: int, values: list[int]) -> bool
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* name: str 类型,已经配置的实例名称
|
|||
|
|
* offset: int 类型,表示 Modbus 地址
|
|||
|
|
* values: list[int] 类型,表示写入的值
|
|||
|
|
* 输出参数
|
|||
|
|
* True: 写入成功
|
|||
|
|
* False: 写入失败
|
|||
|
|
* 异常
|
|||
|
|
如果没有配置 modbus 实例,则会抛出初始化异常。
|
|||
|
|
|
|||
|
|
#### 通用读取单个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取单个地址,通过参数 type 指定读取的地址类型。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_single_modbus_value(ip: str, port: int, slave_id: int, type_str: str, offset: int) -> int | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* type_str: str 类型,表示地址类型,可选择'0x','1x','3x','4x',和功能码的对应关系如下:
|
|||
|
|
* 0x:对应功能码0x01,表示读线圈
|
|||
|
|
* 1x:对应功能码0x02,表示读离散输入
|
|||
|
|
* 3x:对应功能码0x04,表示读输入寄存器
|
|||
|
|
* 4x:对应功能码0x03,表示读保持寄存器
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* int: 读取成功的返回值
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### 通用读取多个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取多个地址,通过参数 name 指定已经配置的实例名称。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_batch_modbus_value(ip: str, port: int, slave_id: int, type_str: str, offset: int, length: int) -> list[int] | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* ip: str 类型,从机 IP
|
|||
|
|
* port: int 类型,从机端口
|
|||
|
|
* slave_id: int 类型,从机 slave ID
|
|||
|
|
* type_str: str 类型,表示地址类型,可选择'0x','1x','3x','4x',和功能码的对应关系如下:
|
|||
|
|
* 0x:对应功能码0x01,表示读线圈
|
|||
|
|
* 1x:对应功能码0x02,表示读离散输入
|
|||
|
|
* 3x:对应功能码0x04,表示读输入寄存器
|
|||
|
|
* 4x:对应功能码0x03,表示读保持寄存器
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* length: int 类型,读取的数据长度
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* list[int]: 读取成功的返回值数组
|
|||
|
|
* 异常
|
|||
|
|
本方法不抛出异常,异常捕获后只作日志记录。
|
|||
|
|
|
|||
|
|
#### 通过实例名称读取单个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取单个地址,通过参数 name 指定已经配置的实例名称。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_single_modbus_value_by_instance_name(name: str, offset: int) -> int | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* name: str 类型,配置的唯一实例名称
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* int: 读取成功的返回值
|
|||
|
|
* 异常
|
|||
|
|
如果没有配置 modbus 实例,则会抛出初始化异常。
|
|||
|
|
|
|||
|
|
#### 通过实例名称读取多个地址
|
|||
|
|
|
|||
|
|
* 方法说明
|
|||
|
|
|
|||
|
|
Modbus 读取多个地址,通过参数 name 指定已经配置的实例名称。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def read_batch_modbus_value_by_instance_name(name: str, offset: int, length: int) -> list[int] | None
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* 输入参数
|
|||
|
|
* name: str 类型,配置的唯一实例名称
|
|||
|
|
* offset: int 类型,Modbus 地址
|
|||
|
|
* length: int 类型,读取的数据长度
|
|||
|
|
* 输出参数
|
|||
|
|
* None: 读取失败
|
|||
|
|
* list[int]: 读取成功的返回值
|
|||
|
|
* 异常
|
|||
|
|
如果没有配置 modbus 实例,则会抛出初始化异常。
|