python pyqt5开发DoIP上位机【介绍】


目录

      • 文章合集
      • 一、核心功能概述
      • 二、主要模块解析
        • 1. 导入的库
        • 2. 辅助函数
        • 3. DOIP协议处理(DOIPProtocol类)
        • 4. 网络工具(NetworkUtils类)
        • 5. 通信线程(DOIPCommunicationThread类)
        • 6. UDS命令输入组件(UDSCommandInput类)
        • 7. 自动化测试线程(AutomationTestThread类)
        • 8. UI组件(MainWindowUI类)
        • 9. 主窗口控制器(DOIPDiagnosticTool类)
        • 10. 程序入口
      • 三、关键功能流程
      • 四、代码特点


在这里插入图片描述

在这里插入图片描述

文章合集

python pyqt5开发DoIP上位机【介绍】

python pyqt5开发DoIP上位机【代码里发送常用uds命令是怎么实现的?】

python pyqt5开发DoIP上位机【代码里是怎么获取诊断回复的?】

python pyqt5开发DoIP上位机【诊断回复的函数都是怎么调用的?】

python pyqt5开发DoIP上位机【自动化测试的逻辑是怎么实现的?】

python pyqt5开发DoIP上位机【源码】

这个代码实现了一个功能完整的DOIP(Diagnostic Over IP)诊断工具,主要用于汽车电子领域与ECU(电子控制单元)进行通信。让我分模块为你详细解读:

一、核心功能概述

这是一个基于PyQt5的GUI应用程序,用于通过网络(TCP/IP)与汽车ECU进行诊断通信,支持发送UDS(统一诊断服务)命令,并具备自动化测试功能。

二、主要模块解析

1. 导入的库
import sys
import time
import socket
import traceback
import platform
from datetime import datetime
import pandas as pd
import openpyxl
from PyQt5.QtWidgets import (...)  # GUI组件
from PyQt5.QtCore import Qt, pyqtSlot, QMutex, QThread, QTimer, pyqtSignal
from PyQt5.QtGui import QColor, QFont, QTextCursor
  • 系统和网络相关库:sys, socket, platform
  • 数据处理库:pandasopenpyxl用于处理Excel测试用例
  • GUI库:PyQt5用于构建图形界面
  • 多线程相关:QThread, QMutex等用于处理并发通信
2. 辅助函数
def get_timestamp():"""获取格式为HH:MM:SS.XXX的时间戳(XXX为毫秒)"""now = datetime.now()return now.strftime("%H:%M:%S.%f")[:-3]

用于生成带毫秒精度的时间戳,用于日志记录。

3. DOIP协议处理(DOIPProtocol类)

定义了DOIP协议的核心常量和方法:

  • 协议版本号
  • 各种载荷类型(路由激活请求/响应、诊断消息等)
  • 路由激活响应码
  • 构建和解析DOIP消息头部的方法

这是实现DOIP协议通信的基础。

4. 网络工具(NetworkUtils类)

主要提供跨平台的本地IP地址获取功能,确保在不同操作系统上都能正确获取本机IP。

5. 通信线程(DOIPCommunicationThread类)

这是核心的通信处理线程,继承自QThread:

  • 支持两种工作模式:客户端模式(主动连接ECU)和服务器模式(等待ECU连接)
  • 负责建立和维护与ECU的连接
  • 处理路由激活流程
  • 发送和接收DOIP消息
  • 通过信号与主线程通信,传递接收的数据、连接状态等

使用独立线程处理网络通信,避免阻塞GUI界面。

6. UDS命令输入组件(UDSCommandInput类)

自定义的文本输入框,专门用于输入十六进制的UDS命令:

  • 自动格式化输入(每两个字符一组,16字节换行)
  • 过滤非十六进制字符
  • 提供获取格式化命令的方法
7. 自动化测试线程(AutomationTestThread类)

处理自动化测试流程:

  • 从Excel加载测试用例并按顺序执行
  • 支持暂停、恢复和停止操作
  • 记录每个命令的执行结果和耗时
  • 通过信号更新测试进度和状态
8. UI组件(MainWindowUI类)

构建整个应用程序的界面:

  • 左侧控制面板:包含连接配置、诊断命令按钮、会话控制等
  • 右侧Trace面板:显示通信记录和原始数据包
  • 自动化测试区域:包含测试用例表格和测试结果表格
  • 提供各种UI操作方法(添加记录、更新状态等)
9. 主窗口控制器(DOIPDiagnosticTool类)

应用程序的主控制器:

  • 初始化窗口和绑定信号槽
  • 实现连接/断开ECU的功能
  • 处理诊断命令的发送
  • 管理会话保持功能(定时发送心跳包)
  • 处理自动化测试的加载、执行和结果保存
10. 程序入口
if __name__ == "__main__":# 全局异常处理sys.excepthook = handle_exceptionapp = QApplication(sys.argv)window = DOIPDiagnosticTool()window.show()sys.exit(app.exec_())

设置全局异常处理,创建应用实例并启动主窗口。

三、关键功能流程

  1. 连接建立流程

    • 用户输入ECU IP和端口(或选择ECU主动连接模式)
    • 点击连接按钮,创建DOIPCommunicationThread线程
    • 线程建立TCP连接并发送路由激活请求
    • 收到路由激活响应后,确认连接成功
  2. 命令发送流程

    • 用户点击预设命令按钮或输入自定义命令
    • 命令被格式化为符合DOIP协议的消息
    • 通过通信线程发送到ECU
    • 接收并显示ECU的响应
  3. 自动化测试流程

    • 从Excel文件加载测试用例
    • 启动AutomationTestThread线程
    • 线程按顺序发送测试用例中的命令
    • 记录每个命令的响应和执行结果
    • 测试完成后可将结果保存为Excel文件
      在这里插入图片描述

四、代码特点

  1. 模块化设计:功能分离到不同类中,结构清晰
  2. 多线程处理:网络通信和自动化测试在独立线程中进行,保证UI响应流畅
  3. 健壮的错误处理:包含详细的异常捕获和错误提示
  4. 用户友好的界面:提供直观的操作界面和详细的状态显示
  5. 兼容性考虑:支持不同的DOIP版本和连接模式

这个工具主要用于汽车电子诊断,可以与支持DOIP协议的ECU进行通信,执行诊断命令和自动化测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95178.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零实现一个可扩展的规则解析引擎 —— 支持 AND/OR 优先级、短路求值与多类型运算符

在日常业务开发中,我们经常需要基于一些“规则”来决定程序的走向。比如: 客服机器人 根据用户问题领域和复杂度选择不同的模型;营销系统 根据用户画像匹配不同优惠券;风控引擎 根据请求参数、时间、分值判定是否放行。 这些规则往…

Preprocessing Model in MPC 3 - 基于同态加密的协议 - Over Rings 环

参考论文:SoK: Multiparty Computation in the Preprocessing Model MPC (Secure Multi-Party Computation) 博士生入门资料。抄袭必究。 本系列教程将逐字解读参考论文(以下简称MPCiPPM),在此过程中,将论文中涵盖的40篇参考文献进行梳理与讲…

uni-app 跨平台项目的 iOS 上架流程:多工具组合的高效协作方案

跨平台框架的兴起,让许多团队选择 uni-app 来开发移动应用。 一套代码多端运行,确实大大降低了研发成本,但当项目进入 iOS 上架阶段 时,很多团队依旧面临挑战:证书复杂、环境不统一、上传繁琐。 本文结合实战经验&…

掌握 Linux 文件权限:chown 命令深度解析与实践

在 Linux 系统的日常运维与开发工作里,文件权限管理是保障系统安全、规范文件访问的关键环节。其中,chown 命令作为修改文件所有者及关联组的核心工具,对精准把控文件权限起着重要作用。接下来,我们将全面拆解 chown 命令&#xf…

计算机算术7-浮点基础知识

1. 浮点表示其中b表示基底,e表示指数,s表示尾数,注意在s的表示过程中,有个隐藏1.同时还有个符号位从下面这个图可以看出,向上溢出和向下溢出的概念,overflow表示的是数的绝对值超过了最大的表示范围&#x…

设计模式8-命令模式

定义 Command Partern: 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。(核心思想是将“动作”与“执行者”解耦) 场景 GUI:…

数据结构(顺序表力扣刷题)

1.移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作&…

机器学习 - Kaggle项目实践(6)Dogs vs. Cats Redux: Kernels Edition 猫狗二分类

Dogs vs. Cats Redux: Kernels Edition | Kaggle 任务:给定猫狗图像数据集 进行二分类。 Cats or Dogs - using CNN with Transfer Learning | Kaggle(参考) Cats or Dogs | Kaggle (我的kaggle) 本文介绍了使用Re…

基础的汇编指令

目录 1、接上一个csdn特殊功能寄存器 1.1CPSR寄存器 1.2SPSR寄存器 1.3CPSR寄存器的高四位和第四位 ​编辑 2、汇编指令的分类 3、汇编指令的基本格式 4、数据搬移指令(赋值指令) 4.1指令码 4.2指令格式 4.3测试代码 4.5立即数 4.6ldr伪指令 …

Docker实战避坑指南:从入门到精通

摘要:文人结合自身微服务实践,系统梳理从安装适配、镜像拉取,到运行配置、构建优化、多容器编排、数据持久化、监控运维等 Docker 全流程高频踩坑点,给出可落地的解决方案,帮助读者快速规避同类问题并提升容器化效率。…

《Bishop PRML》10.1. Variational Inference(2)理解VAE

通过VAE与AE理解变分分布的变量 如何理解变分推断公式中,Z和X的含义是什么? 知乎 变分自编码器VAE的数学原理。 csdn 变分自编码器(VAE)的数学原理以及实现 Loss functions in Variational Autoencoders (VAEs) 一文解释 VAE+ELBO AE的编码和解码是确定性的。VAE的解码过程…

函数调用中的初始化与赋值——深入理解C++对象的生命周期

技术博客:函数调用中的初始化与赋值——深入理解C对象的生命周期引言在C编程中,理解函数调用过程中参数传递、对象创建和返回值处理的细节对于编写高效且无误的代码至关重要。本文将通过一个具体的例子来探讨函数调用时实参到形参的转换过程,…

矩阵微积分的链式法则(chain rule)

矩阵微积分的链式法则(chain rule)与标量情况一样,用于求复合函数的导数,但由于涉及矩阵和向量的求导,维度匹配和布局约定(numerator-layout vs. denominator-layout)必须格外小心。下面给出常见…

网络编程4-并发服务器、阻塞与非阻塞IO、信号驱动模型、IO多路复用..

一、并发服务器1、单循环服务器(顺序处理) 一次只能处理一个客户端连接,只有当前客户端断开连接后,才能接受新的客户端连接2、多进程/多线程并发服务器while(1) {connfd accept(listenfd);pid fork(); // 或 pthread_cr…

在 WSL2-NVIDIA-Workbench 中安装Anaconda、CUDA 13.0、cuDNN 9.12 及 PyTorch(含完整环境验证)

在 WSL-NVIDIA-Workbench(NVIDIA AI Workbench & Ubuntu 22.04)中 安装 Anaconda、CUDA 13.0、cuDNN 9.12 及 PyTorch 步骤也可参阅: 在WSL2-Ubuntu中安装Anaconda、CUDA13.0、cuDNN9.12及PyTorch(含完整环境验证&#xf…

Shell编程核心入门:参数传递、运算符与流程控制全解析

Shell编程核心入门:参数传递、运算符与流程控制全解析 在Linux/Unix系统中,Shell作为命令解释器和脚本语言,是自动化运维、批量处理任务的核心工具。掌握Shell脚本的参数传递、运算符使用和流程控制,能让你从“手动执行命令”升级…

如何用 Kotlin 在 Android 手机开发一个应用程序获取网络时间

使用 NTP 协议获取网络时间在 build.gradle 文件中添加以下依赖:implementation commons-net:commons-net:3.6创建 NTP 时间获取工具类:import org.apache.commons.net.ntp.NTPUDPClient import org.apache.commons.net.ntp.TimeInfo import java.net.In…

python智慧交通数据分析可视化系统 车流实时检测分析 深度学习 车流量实时检测跟踪 轨迹跟踪 毕业设计✅

博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…

计算机视觉第一课opencv(四)保姆级教学

目录 简介 一、轮廓检测 1.查找轮廓的API 2.代码分析 2.1.图像二值化处理 2.2轮廓检测 2.3轮廓绘制 2.4轮廓面积计算 2.5轮廓周长计算 2.6筛选特定面积的轮廓 2.7查找最大面积的轮廓 2.8绘制轮廓的外接圆 2.9绘制轮廓的外接矩形 二、轮廓的近似 三、模板匹配 简…

基于Vue2+elementUi实现树形 横向 合并 table不规则表格

1、实现效果 共N行&#xff0c;但是每一列对应的单元格列数固定&#xff0c;行数不固定2、实现方式说明&#xff1a;使用的是vue2 elementUI表格组件 js实现<template><div class"table-container" ><el-table height"100%" :span-metho…