Python3实现三菱PLC串口通讯(附源码和运行图)

基于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资源




相关推荐
喜欢吃豆3 分钟前
微调高级推理大模型(COT)的综合指南:从理论到实践
人工智能·python·语言模型·大模型·微调·强化学习·推理模型
喜欢吃豆42 分钟前
从指令遵循到价值对齐:医疗大语言模型的进阶优化、对齐与工具集成综合技术白皮书
人工智能·python·语言模型·自然语言处理·大模型·强化学习·constitutional
Access开发易登软件1 小时前
Access调用Azure翻译:轻松实现系统多语言切换
后端·python·低代码·flask·vba·access·access开发
yumgpkpm1 小时前
CMP (类Cloudera) CDP7.3(400次编译)在华为鲲鹏Aarch64(ARM)信创环境中的性能测试过程及命令
大数据·hive·hadoop·python·elasticsearch·spark·cloudera
代码小菜鸡6661 小时前
java 常用的一些数据结构
java·数据结构·python
CodeCraft Studio3 小时前
Excel处理控件Aspose.Cells教程:使用 Python 将 HTML 转换为 Excel
python·html·excel·aspose·aspose.cells·html转excel
王中阳Go3 小时前
Python 的 PyPy 能追上 Go 的性能吗?
后端·python·go
Goboy3 小时前
控制仙术流程 - 抉择与循环的艺术
后端·python
麦麦大数据3 小时前
F024 vue+flask电影知识图谱推荐系统vue+neo4j +python实现
vue.js·python·flask·知识图谱·推荐算法·电影推荐
AI小云3 小时前
【Python与AI基础】Python编程基础:读写CSV文件
人工智能·python