Python实现Modbus TCP客户端:基于modbus_tk库的配置与调试指南
本文详细介绍如何使用Python中的modbus_tk库实现Modbus TCP客户端。通过配置从站ID、功能码、寄存器地址及数量等关键参数,结合ModbusSlave仿真工具进行联调,展示了读取保持寄存器和线圈数据的完整代码示例,旨在帮助开发者快速掌握工业通信协议的客户端开发流程。
Modbus协议背景与仿真工具介绍
前言
Modbus协议由Modicon公司(现隶属于施耐德电气Schneider Electric)开发,主要运行于物理串口及以太网TCP/IP层之上。目前,它已成为工业领域通信协议的行业标准,广泛应用于各类工业电子设备之间的互联与数据交换。
Modbus Poll和Modbus Slave是两款广受好评的Modbus设备仿真软件,支持Modbus RTU/ASCII以及Modbus TCP/IP协议。它们常用于测试和调试Modbus设备,帮助开发者观察通信过程中的各类报文细节。
在支持Modbus RTU/ASCII协议时,ModbusPoll充当主站设备,而ModbusSlave作为从站设备,从站接收主站命令并返回数据。若用于支持Modbus TCP/IP协议,则ModbusSlave作为服务器,ModbusPoll作为客户端,服务器接收客户端指令并返回数据。客户端需配置远程服务器的IP地址和端口号以建立连接。

Python实现Modbus TCP客户端
本文重点介绍如何利用Python实现Modbus TCP客户端功能,并配合ModbusSlave模拟服务器环境,以进行互联调试。

关键参数配置说明
Python中提供了支持Modbus协议的第三方库——modbus_tk,其下载地址为:https://pypi.org/project/modbus_tk/。使用时需先导入modbus_tk库,随后按照Modbus协议规范配置相关参数。实现客户端功能时,需配置以下关键参数:
slave:指定Modbus从站的ID地址。
function_code:指定寄存器的功能码,主要寄存器功能码如下所示:

starting_address:寄存器起始地址,编号从0开始。
quantity_of_x:指定连续寄存器的数量。
output_value:执行写命令时写入的数值。
Scan Rate:数据读取周期,在程序中体现为执行execute()方法的频率。
以下示例代码实现了通过01和03两条命令读取服务器数据,具体实现如下所示:
代码实现与数据读取示例
import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as md
# 远程连接到服务器端
master = mt.TcpMaster("192.168.1.10", 502)
master.set_timeout(5.0)
# @slave=1 : identifier of the slave. from 1 to 247. 0为广播所有的slave
# @function_code=READ_HOLDING_REGISTERS:功能码
# @starting_address=1:开始地址
# @quantity_of_x=3:寄存器/线圈的数量
# @output_value:一个整数或可迭代的值:1/[1,1,1,0,0,1]/xrange(12)
# @data_format
# @expected_length
Hold_value = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=1, quantity_of_x=3, output_value=5)
Hold_value = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=1, quantity_of_x=3, output_value=5)
Coils_value = master.execute(slave=1, function_code=md.READ_COILS, starting_address=1, quantity_of_x=3, output_value=5)
print(Hold_value) # 取到的寄存器的值格式为元组(55, 12, 44)
print(Hold_value) # 取到的寄存器的值格式为元组(1, 1, 1)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









