GUI部分,IMDS250_gui

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'untitled-IMDS250GUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore,QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(928, 449)MainWindow.setMinimumSize(QtCore.QSize(450, 300))self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-color: rgb(55, 145, 241);")self.centralwidget.setObjectName("centralwidget")self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)self.gridLayout.setObjectName("gridLayout")self.verticalLayout = QtWidgets.QVBoxLayout()self.verticalLayout.setObjectName("verticalLayout")self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName("horizontalLayout")self.label_zbdz = QtWidgets.QLabel(self.centralwidget)self.label_zbdz.setObjectName("label_zbdz")self.horizontalLayout.addWidget(self.label_zbdz)self.lineEdit_zbdz = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_zbdz.setMinimumSize(QtCore.QSize(100, 20))self.lineEdit_zbdz.setMaximumSize(QtCore.QSize(100, 20))self.lineEdit_zbdz.setObjectName("lineEdit_zbdz")self.horizontalLayout.addWidget(self.lineEdit_zbdz)self.label_fsIP = QtWidgets.QLabel(self.centralwidget)self.label_fsIP.setObjectName("label_fsIP")self.horizontalLayout.addWidget(self.label_fsIP)self.lineEdit_IP = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_IP.setMinimumSize(QtCore.QSize(100, 20))self.lineEdit_IP.setMaximumSize(QtCore.QSize(100, 20))self.lineEdit_IP.setObjectName("lineEdit_IP")self.horizontalLayout.addWidget(self.lineEdit_IP)self.pushButton_kais = QtWidgets.QPushButton(self.centralwidget)self.pushButton_kais.setMinimumSize(QtCore.QSize(50, 20))self.pushButton_kais.setMaximumSize(QtCore.QSize(50, 20))self.pushButton_kais.setObjectName("pushButton_kais")self.horizontalLayout.addWidget(self.pushButton_kais)self.pushButton_qinchu = QtWidgets.QPushButton(self.centralwidget)self.pushButton_qinchu.setMinimumSize(QtCore.QSize(50, 20))self.pushButton_qinchu.setMaximumSize(QtCore.QSize(50, 20))self.pushButton_qinchu.setObjectName("pushButton_qinchu")self.horizontalLayout.addWidget(self.pushButton_qinchu)spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout.addItem(spacerItem)self.verticalLayout.addLayout(self.horizontalLayout)self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)self.tabWidget.setObjectName("tabWidget")self.tab_tz = QtWidgets.QWidget()self.tab_tz.setObjectName("tab_tz")self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_tz)self.gridLayout_2.setObjectName("gridLayout_2")self.tableView_BIDS_tz = QtWidgets.QTableView(self.tab_tz)self.tableView_BIDS_tz.setObjectName("tableView_BIDS_tz")self.gridLayout_2.addWidget(self.tableView_BIDS_tz, 0, 0, 1, 1)self.tableView_WNDS_tz = QtWidgets.QTableView(self.tab_tz)self.tableView_WNDS_tz.setObjectName("tableView_WNDS_tz")self.gridLayout_2.addWidget(self.tableView_WNDS_tz, 1, 0, 1, 1)self.tabWidget.addTab(self.tab_tz, "")self.tab_bj = QtWidgets.QWidget()self.tab_bj.setObjectName("tab_bj")self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_bj)self.gridLayout_3.setObjectName("gridLayout_3")self.tableView_BIDS_bj = QtWidgets.QTableView(self.tab_bj)self.tableView_BIDS_bj.setObjectName("tableView_BIDS_bj")self.gridLayout_3.addWidget(self.tableView_BIDS_bj, 0, 0, 1, 1)self.tableView_WNDS_bj = QtWidgets.QTableView(self.tab_bj)self.tableView_WNDS_bj.setObjectName("tableView_WNDS_bj")self.gridLayout_3.addWidget(self.tableView_WNDS_bj, 1, 0, 1, 1)self.tabWidget.addTab(self.tab_bj, "")self.tab_huitu = QtWidgets.QWidget()self.tab_huitu.setObjectName("tab_huitu")self.gridLayout_4 = QtWidgets.QGridLayout(self.tab_huitu)self.gridLayout_4.setObjectName("gridLayout_4")self.groupBox_swbj = QtWidgets.QGroupBox(self.tab_huitu)self.groupBox_swbj.setObjectName("groupBox_swbj")self.gridLayout_4.addWidget(self.groupBox_swbj, 0, 0, 1, 1)self.groupBox_pwbj = QtWidgets.QGroupBox(self.tab_huitu)self.groupBox_pwbj.setObjectName("groupBox_pwbj")self.gridLayout_4.addWidget(self.groupBox_pwbj, 0, 1, 1, 1)self.tabWidget.addTab(self.tab_huitu, "")self.verticalLayout.addWidget(self.tabWidget)self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)MainWindow.setCentralWidget(self.centralwidget)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)self.tabWidget.setCurrentIndex(1)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "IMDS250_数据落地"))self.label_zbdz.setText(_translate("MainWindow", "接收组播"))self.lineEdit_zbdz.setText(_translate("MainWindow", "239.255.17.1"))self.label_fsIP.setText(_translate("MainWindow", "IP"))self.lineEdit_IP.setText(_translate("MainWindow", "10.0.1.170"))self.pushButton_kais.setText(_translate("MainWindow", "开始"))self.pushButton_qinchu.setText(_translate("MainWindow", "清除"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_tz), _translate("MainWindow", "特征数据"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_bj), _translate("MainWindow", "报警数据"))self.groupBox_swbj.setTitle(_translate("MainWindow", "失稳报警数据图"))self.groupBox_pwbj.setTitle(_translate("MainWindow", "平稳报警数据图"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_huitu), _translate("MainWindow", "实时绘图"))

逻辑实现部分,IMDS250_main.py

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled_1.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtGui import *
import socket
import sys
from IMDS250_gui import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QGridLayout, QMainWindow
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import threading
import queue
#定义画布
class Mydemo(FigureCanvas):def __init__(self, parent=None, width=5, height=4, dpi=10):plt.rcParams['font.family'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseself.fig = Figure(figsize=(width, height), dpi=dpi)FigureCanvas.__init__(self, self.fig)self.setParent(parent)# 设置画布分格子xyz = x*y  第z个分区self.axes = self.fig.add_subplot(1, 1, 1)# 设置横坐标轴# self.axes.set_xlim(0, 5)# self.axes.set_ylim(-5, 5)# self.axes.set_ylabel('纵坐标标题')# self.axes.set_title('标题')class mainWindow (QMainWindow, Ui_MainWindow):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)global MYGROUPglobal fasongself.setupUi(self)self.tableView_biaotou()self.UDP_jies = UDP_jies()# 保持滚动条在顶部(默认)scrollToTop();// 保持滚动条在底部scrollToBottom();self.tableView_WNDS_tz.scrollToBottom()self.tableView_BIDS_bj.scrollToBottom()self.tableView_WNDS_bj.scrollToBottom()# 根据表头自动适应列宽self.tableView_WNDS_tz.resizeColumnsToContents()self.tableView_BIDS_tz.resizeColumnsToContents()self.tableView_WNDS_bj.resizeColumnsToContents()self.tableView_BIDS_bj.resizeColumnsToContents()# 按钮按键信号self.pushButton_kais.clicked.connect(self.slotAdd)self.pushButton_qinchu.clicked.connect(self.qingchu)# 赋值全局变量MYGROUP = str(self.lineEdit_zbdz.text())fasong = str(self.lineEdit_IP.text())self.huatu()##-----------------------------------------------------------打印输出事件----------------------------------------------------------def call_backlog(self, mgr):global BIDS_baoxvhao_jyglobal WNDS_baoxvhao_jyif (len(mgr) == 1440):mgr = mgr[40:1441]# -------------------------------------失稳落地----------------------------------if(mgr[0] == 170):data_BIDS_tz = []BIDS_tz = (self.shujv_toubu_BIDS(mgr[0:22]) + self.shujv_BIDS_tz(mgr[22:50]) + self.shujv_BIDS_tz(mgr[50:78]) +self.shujv_BIDS_tz(mgr[78:106]) + self.shujv_BIDS_tz(mgr[106:134]) + self.shujv_BIDS_tz(mgr[134:162]) +self.shujv_BIDS_tz(mgr[162:190]) + self.shujv_BIDS_tz(mgr[190:218]) + self.shujv_BIDS_tz(mgr[218:246]) +self.shujv_BIDS_tz(mgr[246:274]) + self.shujv_BIDS_tz(mgr[274:302]))  # 数据整合,输出str类型数据for a in BIDS_tz:data_BIDS_tz.append(QStandardItem(str(a)))self.model_BIDS_tz.appendRow(data_BIDS_tz)# 保持滚动条在顶部(默认)scrollToTop();// 保持滚动条在底部scrollToBottom();self.tableView_BIDS_tz.scrollToBottom()# 根据表头自动适应列宽self.tableView_BIDS_tz.resizeColumnsToContents()if self.model_BIDS_tz.rowCount() == 50:self.qingchu()# ------------------------------------------报警数据------------------------------data_BIDS_bj = []BIDS_bj = (self.shujv_toubu_bj(mgr[400:424], mgr[1398:1400]))  # 数据整合,输出str类型数据for b in BIDS_bj:data_BIDS_bj.append(QStandardItem(str(b)))self.model_BIDS_bj.appendRow(data_BIDS_bj)self.tableView_BIDS_bj.resizeColumnsToContents()  # 根据表头自动适应列宽self.tableView_BIDS_bj.scrollToBottom()if self.model_BIDS_bj.rowCount() == 50:  # 自动清除表格self.qingchu()#---------------------------------数据存储——————————————————————————————————————————————if int(bin(mgr[404])[9:10]) == 1:  # 数据有效位jiaoyan_xvhao = (int((("0x%02x" % (mgr[405]))[2:] + ("0x%02x" % (mgr[406]))[2:]), 16))  # 包序号判断if BIDS_baoxvhao_jy != jiaoyan_xvhao:BIDS_baoxvhao_jy = jiaoyan_xvhaot1 = threading.Thread(target=self.BIDS_bjsv_cchunchu, args=(mgr[404:405],mgr[424:1397],))t1.setDaemon(True)  # 线程守护t1.start()if duilie_BIDS.empty() == False:#清空画布self.figure_sw.axes.cla()# 添加标题self.figure_sw.axes.set_ylabel('加速度/g')self.figure_sw.axes.set_title('失稳报警')#添加数据,y轴self.figure_sw.axes.plot(duilie_BIDS.get())#实时渲染画布self.figure_sw.draw()#-------------------------------------平稳落地----------------------------------elif mgr[0] == 165:data_WNDS_tz = []WNDS_tz = (self.shujv_toubu_WDNS(mgr[0:22])+ self.shujv_WNDS_tz(mgr[22:54]) + self.shujv_WNDS_tz(mgr[54:86]) +self.shujv_WNDS_tz(mgr[86:118]) + self.shujv_WNDS_tz(mgr[118:150]) + self.shujv_WNDS_tz(mgr[150:182]) +self.shujv_WNDS_tz(mgr[182:214]) + self.shujv_WNDS_tz(mgr[214:246]) + self.shujv_WNDS_tz(mgr[246:278]) +self.shujv_WNDS_tz(mgr[278:310]) + self.shujv_WNDS_tz(mgr[310:342]))for x in WNDS_tz:data_WNDS_tz.append(QStandardItem(str(x)))self.model_WNDS_tz.appendRow(data_WNDS_tz)self.tableView_WNDS_tz.scrollToBottom()self.tableView_WNDS_tz.resizeColumnsToContents()if self.model_WNDS_tz.rowCount() == 50:self.qingchu()# ------------------------------------------报警数据------------------------------data_WNDS_bj = []WNDS_bj = (self.shujv_toubu_bj(mgr[400:424], mgr[1398:1400]))  # 数据整合,输出str类型数据for y in WNDS_bj:data_WNDS_bj.append(QStandardItem(str(y)))self.model_WNDS_bj.appendRow(data_WNDS_bj)self.tableView_WNDS_bj.resizeColumnsToContents()  # 根据表头自动适应列宽self.tableView_WNDS_bj.scrollToBottom()if self.model_WNDS_bj.rowCount() == 50:  # 自动清除表格self.qingchu()# ---------------------------------数据存储——————————————————————————————————————————————if int(bin(mgr[404])[9:10]) == 1:  # 数据有效位jiaoyan_xvhao = (int((("0x%02x" % (mgr[405]))[2:] + ("0x%02x" % (mgr[406]))[2:]), 16))  # 包序号判断if WNDS_baoxvhao_jy != jiaoyan_xvhao:WNDS_baoxvhao_jy = jiaoyan_xvhaot1 = threading.Thread(target=self.WNDS_bjsv_cchunchu, args=(mgr[404:405],mgr[424:1397],))t1.setDaemon(True)  # 线程守护t1.start()if duilie_WNDS.empty() == False:# 清空画布self.figure_pw.axes.cla()# 添加标题self.figure_pw.axes.set_ylabel('加速度/g')self.figure_pw.axes.set_title('平稳报警')# 添加数据,y轴self.figure_pw.axes.plot(duilie_WNDS.get())# 实时渲染画布self.figure_pw.draw()def Message_type_BIDS(self, data):Message_BIDS = {0: "BIDSB_bj_1.txt", 11: "BIDSB_bj_2.txt"}return Message_BIDS[data]def Message_type_WNDS(self, data):Message_WNDS = {0: "WNDS_bj_1横.txt", 1: "WNDS_bj_1垂.txt",10: "WNDS_bj_2横.txt", 11: "WNDS_bj_2垂.txt"}return Message_WNDS[data]##-----------------------------------------------------------创建画布----------------------------------------------------------def huatu(self):# 然后在相应的QGroupBox中添加一个栅格布局self.LineFigureLayout_sw = QGridLayout(self.groupBox_swbj)self.LineFigureLayout_pw = QGridLayout(self.groupBox_pwbj)# 创建画布self.figure_sw = Mydemo(width=5, height=4, dpi=100)self.figure_pw = Mydemo(width=5, height=4, dpi=100)# self.figure_sw.axes.set_xlabel('横坐标标题')# self.figure_sw.axes.set_xlabel('横坐标标题')self.figure_sw.axes.set_ylabel('加速度/g')self.figure_pw.axes.set_ylabel('加速度/g')self.figure_sw.axes.set_title('失稳报警')self.figure_pw.axes.set_title('平稳报警')#添加画板工具框self.toobar = NavigationToolbar(self.figure_sw, self)self.toobar1 = NavigationToolbar(self.figure_pw, self)#链接画板及工具框self.LineFigureLayout_sw.addWidget(self.figure_sw)self.LineFigureLayout_sw.addWidget(self.toobar)self.LineFigureLayout_pw.addWidget(self.figure_pw)self.LineFigureLayout_pw.addWidget(self.toobar1)# gridlayout.addWidget(self.figure_sw)# gridlayout.addWidget(toobar)# 然后,将画板添加到布局中# self.figure_pw.axes.plot(self.data)#————————————————————————————————————————————————抓包控制——————————————————————————————————————def kongzhi(self):if self.pushButton_kais.text() == "开始":return 0else:return 1##-----------------------------------------------------------按键开始事件----------------------------------------------------------def slotAdd(self):global kongzif self.pushButton_kais.text() == "开始":self.pushButton_kais.setText("停止")kongz = 1# 连接信号self.UDP_jies.breakSignal.connect(self.call_backlog)  # 进程连接回传到GUI的事件self.UDP_jies.start()elif self.pushButton_kais.text() == "停止":self.pushButton_kais.setText("开始")kongz = 0self.UDP_jies.breakSignal.disconnect()  # 解除信号与槽绑定# -----------------------------------------------------------表格清除------------------------------------------------------------------def qingchu(self):# self.zbjs.sleep(2)self.model_BIDS_tz.clear()self.model_WNDS_tz.clear()self.model_BIDS_bj.clear()self.model_WNDS_bj.clear()self.model_BIDS_tz.setHorizontalHeaderLabels(self.biaotou_BIDS_tz)  # 表头self.model_WNDS_tz.setHorizontalHeaderLabels(self.biaotou_WNDS_tz)  # 表头self.model_BIDS_bj.setHorizontalHeaderLabels(self.biaotou_BIDS_bj)  # 表头self.model_WNDS_bj.setHorizontalHeaderLabels(self.biaotou_WNDS_bj)  # 表头# -----------------------------------------------------------表格标题及数据绑定------------------------------------------------------------------def tableView_biaotou(self):self.model_BIDS_tz = QStandardItemModel(0, 0)self.biaotou_BIDS_tz = [" 帧头 ", "报文长度", "包序号", "包总数", "       时    间       ", "编组", "车号", "公里标"," 车速 ", " 经  度 ", " 纬  度 ","特征_1-1小", "特征_1-4小", "特征_1-5小", "特征_1-8小", "特征_1-1均", "特征_1-4均", "特征_1-5均", "特征_1-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_2-1小", "特征_2-4小", "特征_2-5小", "特征_2-8小", "特征_2-1均", "特征_2-4均", "特征_2-5均", "特征_2-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_3-1小", "特征_3-4小", "特征_3-5小", "特征_3-8小", "特征_3-1均", "特征_3-4均", "特征_3-5均", "特征_3-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_4-1小", "特征_4-4小", "特征_4-5小", "特征_4-8小", "特征_4-1均", "特征_4-4均", "特征_4-5均", "特征_4-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_5-1小", "特征_5-4小", "特征_5-5小", "特征_5-8小", "特征_5-1均", "特征_5-4均", "特征_5-5均", "特征_5-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_6-1小", "特征_6-4小", "特征_6-5小", "特征_6-8小", "特征_6-1均", "特征_6-4均", "特征_6-5均", "特征_6-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_7-1小", "特征_7-4小", "特征_7-5小", "特征_7-8小", "特征_7-1均", "特征_7-4均", "特征_7-5均", "特征_7-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_8-1小", "特征_8-4小", "特征_8-5小", "特征_8-8小", "特征_8-1均", "特征_8-4均", "特征_8-5均", "特征_8-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_9-1小", "特征_9-4小", "特征_9-5小", "特征_9-8小", "特征_9-1均", "特征_9-4均", "特征_9-5均", "特征_9-8均"," 车速 ", " 经  度 ", " 纬  度 ","特征_10-1小", "特征_10-4小", "特征_10-5小", "特征_10-8小", "特征_10-1均", "特征_10-4均", "特征_10-5均", "特征_10-8均", ]self.model_BIDS_tz.setHorizontalHeaderLabels(self.biaotou_BIDS_tz)    #表头self.tableView_BIDS_tz.setModel(self.model_BIDS_tz)  #绑定数据self.model_WNDS_tz = QStandardItemModel(0, 0)self.biaotou_WNDS_tz = [" 帧头 ", "报文长度", "包序号", "包总数", "       时    间       ", "编组", "车号", "公里标"," 车速 ", " 经  度 ", " 纬  度 ", "特征_1-横向平稳1", "特征_1-横向平稳2", "特征_1-垂向平稳1", "特征_1-垂向平稳2", "特征_1-晃车峰值1", "特征_1-晃车峰值2", "特征_1-横向均方根1", "特征_1-横向均方根2", "特征_1-垂向均方根1", "特征_1-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_2-横向平稳1", "特征_2-横向平稳2", "特征_2-垂向平稳1", "特征_2-垂向平稳2", "特征_2-晃车峰值1", "特征_2-晃车峰值2", "特征_2-横向均方根1", "特征_2-横向均方根2", "特征_2-垂向均方根1", "特征_2-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_3-横向平稳1", "特征_3-横向平稳2", "特征_3-垂向平稳1", "特征_3-垂向平稳2", "特征_3-晃车峰值1", "特征_3-晃车峰值2", "特征_3-横向均方根1", "特征_3-横向均方根2", "特征_3-垂向均方根1", "特征_3-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_5-横向平稳1", "特征_4-横向平稳2", "特征_4-垂向平稳1", "特征_4-垂向平稳2", "特征_4-晃车峰值1", "特征_4-晃车峰值2", "特征_4-横向均方根1", "特征_4-横向均方根2", "特征_4-垂向均方根1", "特征_4-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_5-横向平稳1", "特征_5-横向平稳2", "特征_5-垂向平稳1", "特征_5-垂向平稳2", "特征_5-晃车峰值1", "特征_5-晃车峰值2", "特征_5-横向均方根1", "特征_5-横向均方根2", "特征_5-垂向均方根1", "特征_5-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_6-横向平稳1", "特征_6-横向平稳2", "特征_6-垂向平稳1", "特征_6-垂向平稳2", "特征_6-晃车峰值1", "特征_6-晃车峰值2", "特征_6-横向均方根1", "特征_6-横向均方根2", "特征_6-垂向均方根1", "特征_6-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_7-横向平稳1", "特征_7-横向平稳2", "特征_7-垂向平稳1", "特征_7-垂向平稳2", "特征_7-晃车峰值1", "特征_7-晃车峰值2", "特征_7-横向均方根1", "特征_7-横向均方根2", "特征_7-垂向均方根1", "特征_7-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_8-横向平稳1", "特征_8-横向平稳2", "特征_8-垂向平稳1", "特征_8-垂向平稳2", "特征_8-晃车峰值1", "特征_8-晃车峰值2", "特征_8-横向均方根1", "特征_8-横向均方根2", "特征_8-垂向均方根1", "特征_8-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_9-横向平稳1", "特征_9-横向平稳2", "特征_9-垂向平稳1", "特征_9-垂向平稳2", "特征_9-晃车峰值1", "特征_9-晃车峰值2", "特征_9-横向均方根1", "特征_9-横向均方根2", "特征_9-垂向均方根1", "特征_9-垂向均方根2"," 车速 ", " 经  度 ", " 纬  度 ", "特征_10-横向平稳1", "特征_10-横向平稳2", "特征_10-垂向平稳1", "特征_10-垂向平稳2", "特征_10-晃车峰值1", "特征_10-晃车峰值2", "特征_10-横向均方根1", "特征_10-横向均方根2", "特征_10-垂向均方根1", "特征_10-垂向均方根2",]self.model_WNDS_tz.setHorizontalHeaderLabels(self.biaotou_WNDS_tz)  # 表头self.tableView_WNDS_tz.setModel(self.model_WNDS_tz)  # 绑定数据self.model_BIDS_bj = QStandardItemModel(0, 0)self.biaotou_BIDS_bj =  ["帧头", "报文长度", "数据有效位", "传感器报警位", "包序号", "包总数", "时间", "编组", "车号", "公里标", "速度", "校验和"]self.model_BIDS_bj.setHorizontalHeaderLabels(self.biaotou_BIDS_bj)    #表头self.tableView_BIDS_bj.setModel(self.model_BIDS_bj)  #绑定数据self.model_WNDS_bj = QStandardItemModel(0, 0)self.biaotou_WNDS_bj = ["帧头", "报文长度", "数据有效位", "传感器报警位", "包序号", "包总数", "时间", "编组", "车号", "公里标", "速度", "校验和"]self.model_WNDS_bj.setHorizontalHeaderLabels(self.biaotou_WNDS_bj)  # 表头self.tableView_WNDS_bj.setModel(self.model_WNDS_bj)  # 绑定数据##-----------------------------------------------------------数据转换事件----------------------------------------------------------def shujv_toubu_BIDS(self, data):schu = [(("0x%02x" % (data[0]))[2:] + ("0x%02x" % (data[1]))[2:])]  # 帧头schu.append((int((("0x%02x" % (data[2]))[2:] + ("0x%02x" % (data[3]))[2:]), 16)))  # 报文长度schu.append((int((("0x%02x" % (data[5]))[2:] + ("0x%02x" % (data[6]))[2:]), 16)))  # 包序号schu.append((int((("0x%02x" % (data[7]))[2:] + ("0x%02x" % (data[8]))[2:]), 16)))  # 包总数schu.append(str(data[9]) + "-" + str(data[10]) + "-" +str(data[11]) + "-" + str(data[12]) + ":" +str(data[13]) + ":" + str(data[14]))  # 时间:年月日时分秒schu.append(("0x%02x" % (data[15]))[2:3] + ("0x%02x" % (data[15]))[3:4] + ("0x%02x" % (data[16]))[2:3] + ("0x%02x" % (data[16]))[3:4])  # 编组编号schu.append(str(data[17]))  # 车号schu.append(data[18] + data[19] + data[20] + data[21])  # 公里标return schudef shujv_toubu_WDNS(self, data):schu = [(("0x%02x" % (data[0]))[2:] + ("0x%02x" % (data[1]))[2:])]  # 帧头schu.append((int((("0x%02x" % (data[2]))[2:] + ("0x%02x" % (data[3]))[2:]), 16)))  # 报文长度schu.append((int((("0x%02x" % (data[5]))[2:] + ("0x%02x" % (data[6]))[2:]), 16)))  # 包序号schu.append((int((("0x%02x" % (data[7]))[2:] + ("0x%02x" % (data[8]))[2:]), 16)))  # 包总数schu.append(str(data[9]) + "-" + str(data[10]) + "-" +str(data[11]) + "-" + str(data[12]) + ":" +str(data[13]) + ":" + str(data[14]))  # 时间:年月日时分秒schu.append(("0x%02x" % (data[15]))[2:3] + ("0x%02x" % (data[15]))[3:4] + ("0x%02x" % (data[16]))[2:3] + ("0x%02x" % (data[16]))[3:4])  # 编组编号schu.append(str(data[17]))  # 车号schu.append(data[18] + data[19] + data[20] + data[21])  # 公里标return schudef shujv_BIDS_tz(self, data_BIDS):schu = [((int((("0x%02x" % (data_BIDS[0]))[2:] + ("0x%02x" % (data_BIDS[1]))[2:]), 16)) / 100)]  # 车度schu.append(chr(data_BIDS[7]) + str(data_BIDS[5]) + str(data_BIDS[4]) + str(data_BIDS[3]) + str(data_BIDS[2]))  # 经度方向+经度schu.append(chr(data_BIDS[6]) + str(data_BIDS[11]) + str(data_BIDS[10]) + str(data_BIDS[9]) + str(data_BIDS[8]))  # 纬度方向+纬度schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[12]))[2:] + ("0x%02x" % (data_BIDS[13]))[2:]), 16)) * 0.001))  # tz_1-小schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[14]))[2:] + ("0x%02x" % (data_BIDS[15]))[2:]), 16)) * 0.001))  # tz_4-小schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[16]))[2:] + ("0x%02x" % (data_BIDS[17]))[2:]), 16)) * 0.001))  # tz_5-小schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[18]))[2:] + ("0x%02x" % (data_BIDS[19]))[2:]), 16)) * 0.001))  # tz_8-小schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[20]))[2:] + ("0x%02x" % (data_BIDS[21]))[2:]), 16)) * 0.001))  # tz_1-均schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[22]))[2:] + ("0x%02x" % (data_BIDS[23]))[2:]), 16)) * 0.001))  # tz_4-均schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[24]))[2:] + ("0x%02x" % (data_BIDS[25]))[2:]), 16)) * 0.001))  # tz_5-均schu.append('{:.3f}'.format((int((("0x%02x" % (data_BIDS[26]))[2:] + ("0x%02x" % (data_BIDS[27]))[2:]), 16)) * 0.001))  # tz_8-均return schudef shujv_WNDS_tz(self, data_WNDS):schu = [((int((("0x%02x" % (data_WNDS[0]))[2:] + ("0x%02x" % (data_WNDS[1]))[2:]), 16)) / 100)]  # 车度schu.append(chr(data_WNDS[7]) + str(data_WNDS[5]) + str(data_WNDS[4]) + str(data_WNDS[3]) + str(data_WNDS[2]))  # 经度方向+经度schu.append(chr(data_WNDS[6]) + str(data_WNDS[11]) + str(data_WNDS[10]) + str(data_WNDS[9]) + str(data_WNDS[8]))  # 纬度方向+纬度schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[12]))[2:] + ("0x%02x" % (data_WNDS[13]))[2:]), 16)) * 0.001))  # 特征_1-横向平稳1schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[14]))[2:] + ("0x%02x" % (data_WNDS[15]))[2:]), 16)) * 0.001))  # 特征_1-横向平稳2schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[16]))[2:] + ("0x%02x" % (data_WNDS[17]))[2:]), 16)) * 0.001))  # 特征_1-垂向平稳1schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[18]))[2:] + ("0x%02x" % (data_WNDS[19]))[2:]), 16)) * 0.001))  # 特征_1-垂向平稳2schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[20]))[2:] + ("0x%02x" % (data_WNDS[21]))[2:]), 16)) * 0.001))  # 特征_1-晃车峰值1schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[22]))[2:] + ("0x%02x" % (data_WNDS[23]))[2:]), 16)) * 0.001))  # 特征_1-晃车峰值2schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[24]))[2:] + ("0x%02x" % (data_WNDS[25]))[2:]), 16)) * 0.001))  # 特征_1-横向均方根1schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[26]))[2:] + ("0x%02x" % (data_WNDS[27]))[2:]), 16)) * 0.001))  # 特征_1-横向均方根2schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[28]))[2:] + ("0x%02x" % (data_WNDS[29]))[2:]), 16)) * 0.001))  # 特征_1-垂向均方根1schu.append('{:.3f}'.format((int((("0x%02x" % (data_WNDS[30]))[2:] + ("0x%02x" % (data_WNDS[31]))[2:]), 16)) * 0.001))  # 特征_1-垂向均方根2return schudef shujv_toubu_bj(self, data, jiaoyanhe):schu = [(("0x%02x" % (data[0]))[2:] + ("0x%02x" % (data[1]))[2:])]  # 帧头schu.append((int((("0x%02x" % (data[2]))[2:] + ("0x%02x" % (data[3]))[2:]), 16)))  # 报文长度schu.append(int(bin(data[4])[9:10]))  # 数据有效位schu.append(int(bin(data[4])[7:9]))  # 传感器报警位schu.append((int((("0x%02x" % (data[5]))[2:] + ("0x%02x" % (data[6]))[2:]), 16)))  # 包序号schu.append((int((("0x%02x" % (data[7]))[2:] + ("0x%02x" % (data[8]))[2:]), 16)))  # 包总数schu.append(str(data[9]) + "-" + str(data[10]) + "-" +str(data[11]) + "-" + str(data[12]) + ":" +str(data[13]) + ":" + str(data[14]))  # 时间:年月日时分秒schu.append(("0x%02x" % (data[15]))[2:3] + ("0x%02x" % (data[15]))[3:4] + ("0x%02x" % (data[16]))[2:3] + ("0x%02x" % (data[16]))[3:4])  # 编组编号schu.append(str(data[17]))  # 车号schu.append(data[18] + data[19] + data[20] + data[21])  # 公里标schu.append(((int((("0x%02x" % (data[22]))[2:] + ("0x%02x" % (data[23]))[2:]), 16)) / 100))  # 速度schu.append(jiaoyanhe[0] + jiaoyanhe[1])  # 校验和return schu# ["帧头", "报文长度", "数据有效位", "传感器报警位", "包序号", "包总数", "时间", "编组", "车号", "公里标", "速度", "校验和"]#——————————————————————————————————————————————————————————数据存储————————————————————————————————————————————————————————————————def BIDS_bjsv_cchunchu(self, data_type, data):a = 0schu = []huatu = []for cnt in range(486):schu.append((int((("0x%02x" % (data[a]))[2:] + ("0x%02x" % (data[a + 1]))[2:]), 16)))a += 2for t in schu:if (t - 30000) > 0:t = (t - 65535)huatu.append(t/1000)f = open(self.Message_type_BIDS(int(bin(data_type[0])[7:9])), "a+")f.write(str(t/1000) + '\n')f.close()  # 关闭这个文件duilie_BIDS.put(huatu)def WNDS_bjsv_cchunchu(self, data_type, data):a = 0schu = []huatu = []for cnt in range(486):schu.append((int((("0x%02x" % (data[a]))[2:] + ("0x%02x" % (data[a + 1]))[2:]), 16)))a += 2for t in schu:if (t - 30000) > 0:t = (t - 65535)huatu.append(t / 1000)f = open(self.Message_type_WNDS(int(bin(data_type[0])[7:9])), "a+")f.write(str(t / 1000) + '\n')f.close()  # 关闭这个文件duilie_WNDS.put(huatu)##-----------------------------------------------------------接收事件----------------------------------------------------------
class UDP_jies(QThread):global kongzglobal MYGROUPglobal fasongbreakSignal = pyqtSignal(list)  # 定义一个信号及数据类型def run(self):sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)sock.bind(("10.0.1.5", 17224))status = sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,socket.inet_aton(MYGROUP) + socket.inet_aton("10.0.1.5"));sock.setblocking(0)while (kongz):try:data, addr = sock.recvfrom(1440)  # 判断列表长度 = 1440except (socket.error) as e:passelse:if addr[0] == fasong:self.breakSignal.emit(list(data))# --------------------------------------------------main事件---------------------------------------------------------------
if __name__ == '__main__':BIDS_baoxvhao_jy = 999WNDS_baoxvhao_jy = 999#新建队列duilie_BIDS = queue.Queue(1)duilie_WNDS = queue.Queue(1)app = QApplication(sys.argv)mainwindow = mainWindow()mainwindow.show()sys.exit(app.exec_())

学习笔记(工作时写的测试工具,20220228,IMDS250数据落地(自用))相关推荐

  1. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理

    AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...

  2. Polyworks脚本开发学习笔记(十七)-制作宏脚本自定义工具条

    Polyworks脚本开发学习笔记(十七)-制作宏脚本自定义工具条 做好的宏脚本程序,每次打开脚本加载程序太多麻烦,为了方便的调用脚本做各种操作,可以使用系统的自定义工具条功能将脚本加载到工具条上. ...

  3. iOS学习笔记-自己动手写RESideMenu

    代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...

  4. php怎么自己写框架,PHP学习笔记,自己动手写个MVC的框架

    最新在大家自己的博客的过程中,发现各种开源的博客系统都或多或少的用起来别扭.于是想动手自己写个博客系统.既然写,就想好好写.那就先写个MVC框架.一点一点来.写的过程中有很多想法.还希望大家能够多多指 ...

  5. python数据挖掘学习笔记】十六.逻辑回归LogisticRegression分析鸢尾花数据

    但是很多时候数据是非线性的,所以这篇文章主要讲述逻辑回归及Sklearn机器学习包中的LogisticRegression算法 #2018-03-28 16:57:56 March Wednesday ...

  6. Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据

    #2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...

  7. python分析鸢尾花数据_python数据挖掘学习笔记】十六.逻辑回归LogisticRegression分析鸢尾花数据...

    但是很多时候数据是非线性的,所以这篇文章主要讲述逻辑回归及Sklearn机器学习包中的LogisticRegression算法 #2018-03-28 16:57:56 March Wednesday ...

  8. oracle查看表空间的内容,学习笔记:Oracle查看object对象 表空间 表 索引 数据文件的使用空间...

    天萃荷净 运维DBA咨询想要查看Oracle的object对象的使用空间大小,包括表空间 表 索引 数据文件的使用空间 1.查看Oracle表空间大小 Select Tablespace_Name,S ...

  9. python爬取基金历史净值_Python学习笔记之抓取某只基金历史净值数据实战案例

    摘要:这篇Python开发技术栏目下的"Python学习笔记之抓取某只基金历史净值数据实战案例",介绍的技术点是"Python学习笔记.Python.历史净值数据.学习笔 ...

最新文章

  1. 好程序员Web前端教程分享Vue学习心得
  2. mfc 弹框只出现一次_只出现一次的数字
  3. 使用 Java 开发 OpenCV 应用
  4. Selenium+TestNG+Jenkins 框架图形化UML表示
  5. Java黑皮书课后题第10章:*10.16(被2或3整除)找出所有被2或3整除的有50个十进制位数的前10个数字
  6. ubuntu16.04安装PHP5.6和7.0
  7. Delphi Access violations 问题的解决之道[转]
  8. qt_翻译文件常用缩写
  9. UVALive(LA) 4487 Exclusive-OR(带权并查集)
  10. win10/win11无损扩大C盘空间,跨盘合并C、E盘
  11. 5.1.2全景声音箱摆位_5.1.2全景声系统私人家庭影院设计方案
  12. 经纬度格式化转换-数据库函数方式
  13. 【Atheros】minstrel速率调整算法源码走读
  14. Validation and Data leakages
  15. SVG格式图片的放大
  16. 成功解决图像相减全黑问题
  17. 淘宝 聚划算 整点免费 支付宝延时时间1秒
  18. python算法习题(十):木材加工
  19. C-class Week1.Day2
  20. char字符对应的ASCII码值

热门文章

  1. java swing 路径选择_java swing 文件选择,设置默认文件选择路径,桌面路径
  2. hover动作时间html,JS----hover时间延迟设置
  3. draggable禁止拖动_jQuery Draggable:如何限制可拖动区域?
  4. 元数据解决分表不可 mysql_说说分库分表的一个最佳实践
  5. 前端页面显示图片的多种方法小结
  6. java实现excel转pdf文件
  7. 【PS | 学习】毛坯图如何调色成日系小清新
  8. 阿里云深度学习实验室(DL-Lab) -- 基于Docker和EGS一键创建高性能Tensorflow分布式训练
  9. 未能链接ea服务器,《双人成行》无法连接到EA服务器怎么办 无法连接到EA服务器解决办法...
  10. 不歧视双非的计算机院校,复试公平、保护一志愿、不歧视双非的神仙院校!