# 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 实例,则会抛出初始化异常。