pycharm配置pyqt5_用PyQT5开发上位机软件界面(2)

前一篇介绍在pycharm中如何配置pyqt5,并创建一个Mainwindow,成功显示出这个主窗口。本篇介绍通过上位机界面,读取和写入PLC内的数据,并显示出来。

1、新建一个Mainwindow主窗口。把每个控件的objectName的默认名称修改成自己想要的名字。界面布局如下:

1a3beaf11316cd55703dc0283808f7cd.png

Mainwindow

2、将.ui转换成.py文件。程序太长,就不粘贴进来了。

3、新建一个python file,来调用生成的python文件。新建一个类继承QMainWindow和Ui_MainWindow。这样就可以运行一个MainWindow窗口。

from PyQt5.QtWidgets import QMainWindow, QApplicationfrom xiaobai_UI import Ui_MainWindowimport sysclass MainWindow(QMainWindow, Ui_MainWindow):    def __init__(self, parent=None):        super(MainWindow, self).__init__(parent)        self.setupUi(self)self.widget_init()if __name__ == '__main__':    app = QApplication(sys.argv)    MainWindow = MainWindow()    MainWindow.show()    sys.exit(app.exec_())

4、初始化一下控件。

def widget_init(self):    self.ip.setText("192.168.1.20")    self.rack.setText("0")    self.slot.setText("1")    self.datatype.addItems(['Bool', 'Int', 'Real', 'String'])
2c00348769b529a8b100295af48eea3e.png

窗口

5、添加连接和断开连接按钮功能。Client()类里有一个get_connected()方法,当连接PLC成功,返回True,将label_9的文本改为已连接。self.ip.text()获取控件ip的文本。rack和slot一样,只不过他们的类型是int。

    def connect_clicked(self):        try:            ip = self.ip.text()            rack = int(self.rack.text())            slot = int(self.rack.text())            self.client.connect(ip, rack, slot)            if self.client.get_connected():                self.label_9.setText("已连接")        except Exception as e:            print(e)    def disconnect_clicked(self):        if self.client.get_connected():            self.client.disconnect()self.label_9.setText("")

6、给按钮绑定事件。注意:self.connect_clicked和self.disconnect_clicked不要括号

self.connectButton.clicked.connect(self.connect_clicked)self.disconnectBUtton.clicked.connect(self.disconnect_clicked)
542585f611b03ec0b4af26fd4170ed1d.gif

gif

7、添加读取和写入按钮功能。

def write_clicked(self):    db_number = int(self.dbnumber.text())    offset = int(self.offset.text())    data = int(self.data.text())    byte_array = struct.pack('!i', data)    self.client.write_area(0x84, db_number, offset, byte_array)    def read_clicked(self):        db_number = int(self.dbnumber.text())        byte = int(self.offset.text().split('.')[0])        bit = int(self.offset.text().split('.')[1])        data_type = self.datatype.currentText()        try:            if data_type == 'Bool':                read_data = self.client.read_area(0x84, db_number, 0, byte+2)                data = snap7.util.get_bool(read_data, byte, bit)                self.readdata.setText(str(data))            if data_type == 'Int':                read_data = self.client.read_area(0x84, db_number, 0, byte+2)                data = snap7.util.get_int(read_data, byte)                self.readdata.setText(str(data))            if data_type == 'Real':                read_data = self.client.read_area(0x84, db_number, 0, byte+4)                data = snap7.util.get_real(read_data, byte)                self.readdata.setText(str(data))            if data_type == 'String':                read_data = self.client.read_area(0x84, db_number, 0, byte+256)                data = snap7.util.get_string(read_data, byte, 32)                self.readdata.setText(str(data))        except Exception as e:            print(e)

8、运行界面试一试。

09186dd10ba7ab9c7e6688acf13c08de.gif

读数据

5d5c0a83310ad409713ef4effd602523.gif

写数据

简单的界面控制PLC内的数据,感谢支持!!!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值