基于PyQt5通过串口通信控制三菱PLC
废话不多说,直接上源码
python
"""
# -*- coding:utf-8 -*-
@Project : Mitsubishi
@File : Main_Run.pyw
@Author : Administrator
@Time : 2024/05/09 下午 04:10
@Description : PyQt5界面主逻辑
@Software:PyCharm
"""
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from MainUI import Ui_MainWindow
import qtawesome as qta
import serial.tools.list_ports
import Mitsubishi_API
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(QMainWindow, self).__init__(parent)
self.setupUi(self)
self.label_onOff.setHidden(True)
self.comboBox_onOff.setHidden(True)
self.comboBox_mode.currentIndexChanged.connect(self.changeMode)
self.refreshSerialPorts()
self.pushButton_refresh.clicked.connect(self.refreshSerialPorts)
self.pushButton_execute.clicked.connect(self.execute)
self.pushButton_refresh.setIcon(qta.icon("ei.refresh"))
self.pushButton_execute.setIcon(qta.icon("ei.hand-up"))
def changeMode(self):
"""
切换模式
:return:
"""
if self.comboBox_mode.currentText() == "读取":
self.label_number.setHidden(False)
self.comboBox_number.setHidden(False)
self.label_onOff.setHidden(True)
self.comboBox_onOff.setHidden(True)
else:
self.label_number.setHidden(True)
self.comboBox_number.setHidden(True)
self.label_onOff.setHidden(False)
self.comboBox_onOff.setHidden(False)
def refreshSerialPorts(self):
"""
绑定串口列表至控件
:return:
"""
# 清除当前下拉列表中的项目
self.comboBox_serialPort.clear()
# 获取可用串口列表
ports = serial.tools.list_ports.comports()
# 将串口名称添加到下拉列表中
for port in ports:
self.comboBox_serialPort.addItem(port.device)
def execute(self):
"""
执行操作
:return:
"""
serial_port = self.comboBox_serialPort.currentText() # 串口
mode = self.comboBox_mode.currentText() # 模式
soft = self.comboBox_soft.currentText() # 输入输出
soft_num = self.lineEdit_soft_num.text() # 软元件数值
if soft_num:
softComponent = soft + soft_num.strip()
if mode == "读取":
read_num = self.comboBox_number.currentText()
recv = Mitsubishi_API.PLC_Read(serial_port, softComponent, read_num)
self.textBrowser.append("<span style='color:#00FFA9'>读取PLC返回值:{}</span>".format(recv))
else:
onOff = self.comboBox_onOff.currentText()
Mitsubishi_API.PLC_FORCE(serial_port, softComponent, onOff)
self.textBrowser.append("<span style='color:#4848E9'>写入PLC命令完毕!</span>")
else:
QMessageBox.warning(self, '警告', '请填写完整软元件!', QMessageBox.Yes | QMessageBox.No,
QMessageBox.Yes)
if __name__ == '__main__':
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
这里直通资源下载点这里下载源码以及打包exe资源