Python程式和自动化设备PLC交互

背景介绍

        有过真正落地项目经验的开发人员都知道,使用计算机各种语言开发的项目如果想要落地实施,往往无可避免的要和自动化等相关硬体结合使用,只有这样才能真正的实现软硬体的结合,从而实现自动化操作。在计算机视觉的项目中,一个瑕疵检测AI项目的落地,需要现场、光学取像系统软硬体、AI算法模型+GUI界面(或者web界面)、PLC的硬体自动化联动等共同组成,本文主要讲解软硬体的结合部分。

软硬体交互必要性及说明

        与自动化设备(如PLC、机器人、传感器等)进行交互的Python程序在工业自动化、智能制造和物联网(IoT)等领域有着广泛的应用。这种交互的必要性源于以下几个方面:

1.提高生产效率

        自动化设备可以显著提高生产效率,减少人工操作的时间和错误。通过Python程序与这些设备进行通信,可以实现自动化控制和监控,从而进一步优化生产流程。

2.实时监控和数据采集

        Python程序可以实时采集和监控自动化设备的数据,如传感器读数、机器状态等。这些数据可以用于实时分析、故障预测和维护规划,确保生产设备的稳定运行。

3.灵活性和可扩展性

        Python是一种高层次的编程语言,具有丰富的库和工具,可以快速开发和部署各种自动化解决方案。Python程序可以轻松集成到现有的系统中,实现灵活的自动化控制和数据处理。

4.远程控制和监控

        通过Python程序,可以实现对自动化设备的远程控制和监控。这对于分布式生产环境或需要远程管理的设备非常有用。

5.数据分析和机器学习

        Python在数据分析和机器学习领域有着广泛的应用。通过与自动化设备交互,可以采集大量的生产数据,利用Python进行数据分析和机器学习,从而优化生产流程,提升产品质量。

自动化设备和Python程序交互的步骤

1.选择通信协议

        不同的自动化设备支持不同的通信协议,如Modbus、EtherNet/IP、OPC UA、ADS等。选择适合的通信协议是实现交互的第一步。

2.安装相应的Python库

根据选择的通信协议,安装相应的Python库。例如:

  • Modbus: pymodbus
  • EtherNet/IP: pycomm 或 pylogix
  • OPC UA: opcua
  • ADS: pyads
3.连接设备

使用Python库中的连接函数与自动化设备建立连接。例如:

# 使用pylogix库连接Allen-Bradley PLC
from pylogix import PLC

plc = PLC()
plc.IPAddress = '192.168.1.10'
4.读写数据

使用相应的函数读取或写入设备数据。例如:

# 读取PLC中的Tag值
result = plc.Read('TagName')
print(result.Value)

# 写入值到PLC中的Tag
plc.Write('TagName', 123)
5.处理数据

根据需要对读取的数据进行处理、分析或存储。例如:

# 数据处理和分析
import numpy as np

data = np.array(result.Value)
mean = np.mean(data)
print(f'平均值: {mean}')
6.关闭连接

操作完成后,关闭与设备的连接以释放资源。例如:

plc.Close()

Python和自动化设配PLC交互的模块及协议 

        在Python中,与PLC(可编程逻辑控制器)进行自动化交互的模块和库有很多。以下是一些常用的模块和库:

1.pycomm

    pycomm 是一个用于与Allen-Bradley PLC(如 ControlLogix 和 MicroLogix 系列)进行通信的Python库。它支持通过EtherNet/IP协议进行通信。

  • 安装:
    pip install pycomm3
    
  • 示例代码:
    from pycomm3 import LogixDriver
    
    with LogixDriver('192.168.1.10') as plc:
        value = plc.read('TagName')
        print(value)
        plc.write('TagName', 123)
    

2.pylogix

   pylogix 是另一个用于与Allen-Bradley PLC进行通信的库。它支持使用EtherNet/IP协议进行通信。

  • 安装:
    pip install pylogix
    
  • 示例代码: 
from pylogix import PLC

# 连接到PLC
plc = PLC()
plc.IPAddress = '192.168.1.10'

# 读取Tag值
result = plc.Read('TagName')
print(f'读取的值: {result.Value}')

# 写入新值
plc.Write('TagName', 123)

# 关闭连接
plc.Close()

3.snap7

python-snap7 是一个用于与西门子S7系列PLC进行通信的库。它基于Siemens S7协议进行通信。

  • 安装:
    pip install python-snap7
    
  • 示例代码:
    import snap7
    from snap7.util import *
    
    plc = snap7.client.Client()
    plc.connect('192.168.1.10', 0, 1)
    
    data = plc.db_read(1, 0, 4)
    value = get_real(data, 0)
    print(value)
    

4.pyModbus

pyModbus 是一个用于与支持Modbus协议的PLC进行通信的库。它支持Modbus TCP和Modbus RTU协议。

  • 安装:
    pip install pymodbus
    
  • 示例代码:
    from pymodbus.client.sync import ModbusTcpClient
    
    client = ModbusTcpClient('192.168.1.10')
    client.connect()
    
    result = client.read_holding_registers(1, 1)
    print(result.registers)
    
    client.write_register(1, 123)
    client.close()
    

额外测试代码:

#from pymodbus.client.sync import ModbusTcpClient
from pymodbus.client import ModbusTcpClient

from loguru import logger

def plc(ip,port,address,value): # 针对PLC的IP,Port,地址,值.
    info='请检查PLC设定是否正确!!!'
    client = ModbusTcpClient(ip, port=int(port))  # 连接设备
    try:
        client.connect()
        result = client.write_register(address, value) # 写入布尔值0到地址11001
        logger.info(f'向{ip}的{port}的PLC地址{address},传送值{value}返回結果为:{result}')
        
        info=f'向{ip}的{port}的PLC地址{address},傳送值{value}返回結果為:{result}'
    except Exception as e:
        logger.exception(f'連接PLC時發生錯誤,錯誤代碼如下,請確認:{e}')
        info = (f'連接PLC時發生錯誤,錯誤代碼如下:\n{e}')
        window['-status-'].update(info, text_color='white', background_color='red')
        print(f'連接PLC時發生錯誤,錯誤代碼如下:{e}')
    finally:
        client.close()# 斷開連接
        return info

if __name__ == '__main__':
    info = plc('192.168.100.192', 502, 0, 1)
    print(info)

5.opcua

opcua 是一个用于与支持 OPC UA(OPC Unified Architecture)协议的PLC进行通信的库。

  • 安装:
    pip install opcua
    
  • 示例代码:
    from opcua import Client
    
    client = Client("opc.tcp://192.168.1.10:4840")
    client.connect()
    
    var = client.get_node("ns=2;i=2")
    print(var.get_value())
    
    var.set_value(123)
    client.disconnect()
    

6.pyads

pyads 是一个用于与Beckhoff PLC通过ADS协议进行通信的库。

  • 安装:
    pip install pyads
    
  • 示例代码:
    import pyads
    
    plc = pyads.Connection('5.1.204.160.1.1', 851)
    plc.open()
    
    value = plc.read_by_name('MAIN.var')
    print(value)
    
    plc.write_by_name('MAIN.var', 123)
    plc.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图灵追慕者

您的支持是我写作分享最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值