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




相关推荐
Blossom.1184 分钟前
基于Mamba-2的实时销量预测系统:如何用选择性状态空间干掉Transformer的O(n²)噩梦
人工智能·python·深度学习·react.js·机器学习·设计模式·transformer
Wise玩转AI6 分钟前
Day 26|智能体的“伦理与安全边界”
人工智能·python·安全·ai·chatgpt·ai智能体
梦里不知身是客1114 分钟前
帆软的图标类型介绍
python·信息可视化·数据分析
h***381814 分钟前
使用python进行PostgreSQL 数据库连接
数据库·python·postgresql
luod19 分钟前
Python模块
python
二川bro20 分钟前
字符串格式化进阶:Python f-string性能优化
开发语言·python
双木的木24 分钟前
Coggle数据科学 | 并行智能体:洞察复杂系统的 14 种并发设计模式
运维·人工智能·python·设计模式·chatgpt·自动化·音视频
LitchiCheng25 分钟前
Mujoco 机械臂 OMPL 进行 RRT 关节空间路径规划避障、绕障
开发语言·人工智能·python
Fairy要carry35 分钟前
大模型之Block实现
pytorch·python·深度学习
Dr.Kun39 分钟前
【鲲码园Python】基于pytorch的鱼品种分类系统(31类)
pytorch·python·分类