Python 基于modbus tcp 协议 实现与plc通信

        仅作为本人学习记录分享;学习是一层窗户纸,没实现之前什么都会觉得困难。前后找了许多教程,c++、java等,最后选择了python来实现,希望本文可以让读者少走弯路。

        实现结果:python程序作为client;仿真软件Modbus Slave作为server,程序访问plc寄存器,实现读、写功能。                 

        Modbus是一种串行通信协议,是工业领域通信协议的业界标准,是工业电子设备之间常用的连接方式。

一、实验前的准备

1、安装 modbus_tk 包

pip install modbus_tk

2、仿真软件安装

参考文章中《Modbus调试软件安装》那篇,有下载链接以及详细的使用过程。

二、python实现步骤(完整程序在文章末尾)

1、导入包

import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus_tcp as modbus_tcp

2、与sever建立连接

# 仿真调试可以使用本机地址: 127.0.0.1
# 实际使用PLC地址,将 client 的地址设置在于 server 同一频段下,host填写 server 的地址
master = modbus_tcp.TcpMaster(host="127.0.0.1")
master.set_timeout(5.0)
print("connected")

3、读写整数

# 写整数
master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 1, output_value=[1, 2, 3, 4])
# 读整数
result_int = master.execute(1, cst.READ_HOLDING_REGISTERS, 1, 4)
print(result_int)

4、读写小数

# 写小数
master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 5, output_value=[3.14, -6.28], data_format='<ff')
# 读小数
result_float = master.execute(1, cst.READ_HOLDING_REGISTERS, 5, 4, data_format='<ff')
print(result_float)

5、此处仅以多个寄存器读写为示例,实际还可以调用 cst 的其他方法,对线圈、寄存器等实现读写操作

读取方法

写入方法

 三、仿真过程展示

 1、设置连接

2、右击表格空白处,点击Slave Defination,指定Function

3、运行python程序,可见数据已经写入 

4、程序读取到的结果

 

四、完整代码

import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus_tcp as modbus_tcp

if __name__ == "__main__":
    try:
        # 仿真调试可以使用本机地址: 127.0.0.1
        # 实际使用PLC地址,将 client 的地址设置在于 server 同一频段下,host填写 server 的地址
        master = modbus_tcp.TcpMaster(host="127.0.0.1")
        master.set_timeout(5.0)
        print("connected")

        # 写整数
        master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 1, output_value=[1, 2, 3, 4])
        # 读整数
        result_int = master.execute(1, cst.READ_HOLDING_REGISTERS, 1, 4)
        print(result_int)

        # 写小数
        master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 5, output_value=[3.14, -6.28], data_format='<ff')
        # 读小数
        result_float = master.execute(1, cst.READ_HOLDING_REGISTERS, 5, 4, data_format='<ff')
        print(result_float)

    except modbus_tk.modbus.ModbusError as e:
        print("%s- Code=%d" % (e, e.get_exception_code()))

五、参考文章: 

python modbus 实现TCP 通信 by Man呦        

Modbus调试软件--ModbusPoll、ModbusSlave使用详解 by Z小旋       

  • 22
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 我不太清楚Python实现Modbus TCP的细节,但是可以提供一些指导:可以使用Python的pyModbus库来实现Modbus TCP,它支持主机和从机模式,还支持Modbus RTU和Modbus ASCII协议。 ### 回答2: Python可以使用第三方库来实现Modbus TCP通信。其中一个常用的库是pyModbus库,该库提供了一套丰富的API来构建Modbus通信。 首先,我们需要安装pyModbus库。可以使用pip来安装,命令如下: ``` pip install pymodbus ``` 然后,我们可以使用以下代码来实现Modbus TCP通信: ```python from pymodbus.client.sync import ModbusTcpClient # 连接到Modbus服务器 client = ModbusTcpClient('127.0.0.1', port=502) # 连接后需要调用connect方法 client.connect() # 读取保持寄存器的值 result = client.read_holding_registers(address=0, count=10, unit=1) if result.isError(): print('读取失败') else: print(result.registers) # 写入保持寄存器的值 result = client.write_register(address=0, value=1234, unit=1) if result.isError(): print('写入失败') else: print('写入成功') # 断开连接 client.close() ``` 上面的代码首先创建一个ModbusTcpClient对象,并连接到Modbus服务器。然后可以使用API来读取或写入保持寄存器的值。最后,使用close方法断开连接。 这样,我们就可以使用Python实现Modbus TCP通信了。需要注意的是,具体的地址和寄存器的数量要根据实际情况进行调整。 ### 回答3: Python可以通过使用第三方库来实现Modbus TCP通信。其中一个常用的库是`pymodbus`。下面是一个简单的示例,用于演示如何使用Python实现Modbus TCP通信: 首先,你需要确保你已经安装了`pymodbus`库。可以使用以下命令来安装: ```python pip install pymodbus ``` 接下来,创建一个Python脚本,并导入所需的模块: ```python from pymodbus.client.sync import ModbusTcpClient # 创建Modbus TCP客户端 client = ModbusTcpClient('localhost', port=502) # 连接到Modbus TCP服务器 client.connect() # 读取Modbus寄存器的值 result = client.read_holding_registers(address=0, count=1, unit=1) # 检查结果并打印值 if not result.isError(): print("Modbus TCP通信成功!") print("寄存器值:", result.registers[0]) else: print("Modbus TCP通信失败!") # 断开与Modbus TCP服务器的连接 client.close() ``` 在上面的示例中,我们首先创建了一个Modbus TCP客户端,然后连接到Modbus TCP服务器。然后,我们使用`read_holding_registers`函数从寄存器中读取一个值,并检查返回结果是否有错误。最后,我们关闭与Modbus TCP服务器的连接。 请注意,上述示例适用于Modbus TCP通信中的读操作。如果您需要进行写操作或其他类型的操作,请参考`pymodbus`库的文档以了解更多详细信息。 希望这个简单的示例能帮助你理解如何使用Python实现Modbus TCP通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值