Python PyQt5+pylogix制作上位操作画面与AB PLC进行数据交互

Python pylogix系列文章目录

一、Python Pylogix 读写Rockwell AB PLC变量数据
二、Python pylogix 读写AB PLC常用方法实例
三、Python pylogix 对AB PLC进行数据采集的思路总结
四、Python PyQt5+pylogix制作上位操作画面与AB PLC进行数据交互


文章目录

  • Python pylogix系列文章目录
  • Python PyQt5+pylogix制作上位操作画面与AB PLC进行数据交互
    • 前言
      • Python PyQt5介绍
      • Python Pylogix介绍
      • Rockwell AB PLC实例
    • PyQt5 上位画面制作
    • 上位画面交互逻辑编写
      • 添加程序入口
      • 通信设置逻辑
      • 启动\停止逻辑
      • 参数设置逻辑
      • 刷新显示数据方法
    • PLC变量数据交互
      • 获取PLC中变频器状态、运行数据
      • 发送启停信号至PLC
      • 设置参数
    • 总结


Python PyQt5+pylogix制作上位操作画面与AB PLC进行数据交互

前言

Python PyQt5介绍

PyQt5是一个用于创建桌面应用程序的Python库,它可以让开发者使用Python语言来创建功能强大的图形用户界面(GUI)应用程序。PyQt5提供了丰富的功能和工具,使得开发者能够轻松地设计和开发各种类型的应用程序,包括窗口应用程序、工具栏应用程序、游戏和多媒体应用程序等。

Python Pylogix介绍

Pylogix是一个基于Python的库,它提供了一组用于与Rockwell PLC通信的API。它支持多种通信协议,包括Ethernet/IP和ControlLogix,因此可以与多种不同类型的Rockwell PLC进行通信。

Rockwell AB PLC实例

以下PLC程序逻辑为,按下启停按钮后变频器以设定频率及时间控制电动机正、反向往复运转,直至再次按下启停按钮,电动机停止运行。
Python PyQt5+pylogix制作上位操作画面与AB PLC进行数据交互_第1张图片

本文将介绍使用Python PyQt5制作一个上位操作画面,基于pylogix通信API接口与AB PLC进行通信,实现对变频器启动\停止控制及运行数据展示等功能。

效果预览

PyQt5 上位画面制作

在PyQt5中,我们可以使用Qt Designer来设计界面。Qt Designer是一个可视化的界面设计工具,可以帮助我们快速创建界面。我们可以添加按钮、标签、输入框等控件,并设置它们的属性和布局。
操作画面布局
Python PyQt5+pylogix制作上位操作画面与AB PLC进行数据交互_第2张图片
Top部分
用于PLC时间显示、画面标题、通信设置。

运行数据
实时显示Armorstart变频器运行时频率、电流、功率、电压、模式等数据。

状态
实时显示Armorstart变频器准备就绪、故障、跳闸、正反转等信号点状态。

操作
控制Armorstart变频器启动\停止,频率、正反转时间设置等操作。

操作记录
记录与PLC建立连接,控制Armorstart变频器的启停的记录等。

上位画面交互逻辑编写

在Qt Designer中将界面设计完成后,使用pyuic工具将.ui文件转换为.py文件。然后,我们可以在生成的.py文件中添加按钮、标签、输入框等控件逻辑代码,实现与PLC交互的具体功能。

添加程序入口

import sys
#程序入口,程序从此处启动PyQt设计的窗口
if __name__ =='__main__' :
    app =QtWidgets.QApplication(sys.argv)
    MainWindow=QtWidgets.QMainWindow()   #创建窗口
    ui=Ui_MainWindow()               #创建PyQt设计的窗口
    ui.setupUi(MainWindow)               #初始化设置
    MainWindow.show()                    #显示窗口
    sys.exit(app.exec_())                #程序关闭时退出进程

通信设置逻辑

输入PLC通信IP地址后,点击连接按钮检测到通信正常,每500ms采集一次PLC时间、信号状态、运行数据等tag值,并在画面中刷新。
连接按钮映射

'-----------------------连接按钮设置-----------------------------------'
        self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_4)
        self.pushButton_3.setGeometry(QtCore.QRect(120, 20, 60, 25))
        self.pushButton_3.setStyleSheet("background-color: rgb(238, 238, 238);")
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.connect_to_PLC)

连接按钮具体方法
数据采集在后台进行,避免主线程占用后,其他按钮无法正常操作

    def connect_to_PLC(self):
        IP = self.lineEdit_2.text()
        self.refreshParaValue(IP)
        if self.pushButton_3.text()=='连接':
            self.thread1.is_on = True
            self.thread1.IP = IP
            self.lineEdit_2.setReadOnly(True)
            self.pushButton_3.setText('断开连接')
            self.printf("--" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + " 连接成功--")
            print("--线程开启--")

            self.thread1.start()

        elif self.pushButton_3.text()=='断开连接':
            self.thread1.is_on = False

            self.pushButton_3.setText('连接')
            self.lineEdit_2.setReadOnly(False)
            self.clearAllStatus()
        else:
            msg_box = QMessageBox(QMessageBox.Information, "错误", "无效操作!")
            msg_box.exec_()

后台采集数据线程配置

'-----------------------线程配置-----------------------------------'
        self.thread1 = Thread1()
        self.thread1

你可能感兴趣的:(python,qt,自动化,制造,经验分享)