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




相关推荐
程序员三藏33 分钟前
如何使用Jmeter进行压力测试?
自动化测试·软件测试·python·测试工具·jmeter·测试用例·压力测试
carpell36 分钟前
【语义分割专栏】3:Segnet原理篇
人工智能·python·深度学习·计算机视觉·语义分割
24K纯学渣38 分钟前
Python编码格式化之PEP8编码规范
开发语言·ide·python·pycharm
怒视天下39 分钟前
零基础玩转Python生物信息学:数据分析与算法实现
开发语言·python
zhanshuo1 小时前
Python元组黑科技:3招让数据安全暴增200%,学生管理系统实战揭秘!
python
空中湖1 小时前
免费批量图片格式转换工具
图像处理·python·程序人生
Mantanmu2 小时前
Python训练day40
人工智能·python·机器学习
天天爱吃肉82182 小时前
新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
android·python·嵌入式硬件·汽车
ss.li2 小时前
TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
javascript·人工智能·python
l木本I2 小时前
大模型低秩微调技术 LoRA 深度解析与实践
python·深度学习·自然语言处理·lstm·transformer