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




相关推荐
MessiGo15 分钟前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
肥猪猪爸39 分钟前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
LZXCyrus1 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
Enougme1 小时前
Appium常用的使用方法(一)
python·appium
懷淰メ1 小时前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
hummhumm1 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
hummhumm2 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
每天吃饭的羊2 小时前
python里的数据结构
开发语言·python
卡卡_R-Python2 小时前
UCI Heart Disease Data Set—— UCI 心脏病数据集介绍
python·plotly·django·virtualenv·pygame
饮长安千年月2 小时前
浅谈就如何解出Reverse-迷宫题之老鼠走迷宫的一些思考
python·网络安全·逆向·ctf