python 做一个雷达控制界面

雷达部分控制界面

 

雷达扇扫控制命令

 

UI界面代码

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'radar_control.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, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1428, 703)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.start = QtWidgets.QPushButton(self.centralwidget)
        self.start.setGeometry(QtCore.QRect(190, 140, 121, 41))
        self.start.setObjectName("start")
        self.stop = QtWidgets.QPushButton(self.centralwidget)
        self.stop.setGeometry(QtCore.QRect(380, 140, 121, 41))
        self.stop.setObjectName("stop")
        self.xiaobei = QtWidgets.QPushButton(self.centralwidget)
        self.xiaobei.setGeometry(QtCore.QRect(570, 140, 121, 41))
        self.xiaobei.setObjectName("xiaobei")
        self.shansao = QtWidgets.QPushButton(self.centralwidget)
        self.shansao.setGeometry(QtCore.QRect(190, 240, 121, 41))
        self.shansao.setObjectName("shansao")
        self.quanxiang = QtWidgets.QPushButton(self.centralwidget)
        self.quanxiang.setGeometry(QtCore.QRect(190, 330, 121, 41))
        self.quanxiang.setObjectName("quanxiang")
        self.fuyang = QtWidgets.QPushButton(self.centralwidget)
        self.fuyang.setGeometry(QtCore.QRect(190, 410, 121, 41))
        self.fuyang.setObjectName("fuyang")
        self.mubiaojieshou = QtWidgets.QPushButton(self.centralwidget)
        self.mubiaojieshou.setGeometry(QtCore.QRect(190, 490, 121, 41))
        self.mubiaojieshou.setObjectName("mubiaojieshou")
        self.fuyang_0 = QtWidgets.QPushButton(self.centralwidget)
        self.fuyang_0.setGeometry(QtCore.QRect(510, 410, 121, 41))
        self.fuyang_0.setObjectName("fuyang_0")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(380, 490, 571, 51))
        self.label.setText("")
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(30, 140, 111, 41))
        self.pushButton.setObjectName("pushButton")
        self.comboBox_fangxaing = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_fangxaing.setGeometry(QtCore.QRect(380, 340, 121, 31))
        self.comboBox_fangxaing.setObjectName("comboBox_fangxaing")
        self.comboBox_fangxaing.addItem("")
        self.comboBox_fangxaing.addItem("")
        self.comboBox_sudu = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_sudu.setGeometry(QtCore.QRect(530, 340, 121, 31))
        self.comboBox_sudu.setObjectName("comboBox_sudu")
        self.comboBox_sudu.addItem("")
        self.comboBox_sudu.addItem("")
        self.comboBox_sudu.addItem("")
        self.comboBox_shansao = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_shansao.setGeometry(QtCore.QRect(710, 250, 121, 31))
        self.comboBox_shansao.setObjectName("comboBox_shansao")
        self.comboBox_shansao.addItem("")
        self.comboBox_shansao.addItem("")
        self.comboBox_shansao.addItem("")
        self.shansao_center = QtWidgets.QLineEdit(self.centralwidget)
        self.shansao_center.setGeometry(QtCore.QRect(370, 250, 111, 31))
        self.shansao_center.setObjectName("shansao_center")
        self.shansao_range = QtWidgets.QLineEdit(self.centralwidget)
        self.shansao_range.setGeometry(QtCore.QRect(540, 250, 111, 31))
        self.shansao_range.setObjectName("shansao_range")
        self.fuyang_jiaodu = QtWidgets.QLineEdit(self.centralwidget)
        self.fuyang_jiaodu.setGeometry(QtCore.QRect(330, 420, 111, 31))
        self.fuyang_jiaodu.setObjectName("fuyang_jiaodu")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(400, 220, 91, 31))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(570, 220, 91, 31))
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(740, 220, 91, 31))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(400, 310, 91, 31))
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(560, 310, 91, 31))
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(340, 390, 91, 31))
        self.label_7.setObjectName("label_7")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1428, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.pushButton.clicked.connect(MainWindow.close)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.start.setText(_translate("MainWindow", "开始"))
        self.stop.setText(_translate("MainWindow", "停止"))
        self.xiaobei.setText(_translate("MainWindow", "自动校北"))
        self.shansao.setText(_translate("MainWindow", "扇扫"))
        self.quanxiang.setText(_translate("MainWindow", "全向扫描"))
        self.fuyang.setText(_translate("MainWindow", "俯仰调节"))
        self.mubiaojieshou.setText(_translate("MainWindow", "接收目标数据"))
        self.fuyang_0.setText(_translate("MainWindow", "俯仰归零"))
        self.pushButton.setText(_translate("MainWindow", "退出"))
        self.comboBox_fangxaing.setItemText(0, _translate("MainWindow", "顺时针"))
        self.comboBox_fangxaing.setItemText(1, _translate("MainWindow", "逆时针"))
        self.comboBox_sudu.setItemText(0, _translate("MainWindow", "10°/s"))
        self.comboBox_sudu.setItemText(1, _translate("MainWindow", "30°/s"))
        self.comboBox_sudu.setItemText(2, _translate("MainWindow", "60°/s"))
        self.comboBox_shansao.setItemText(0, _translate("MainWindow", "10°/s"))
        self.comboBox_shansao.setItemText(1, _translate("MainWindow", "30°/s"))
        self.comboBox_shansao.setItemText(2, _translate("MainWindow", "60°/s"))
        self.label_2.setText(_translate("MainWindow", "扇扫中心"))
        self.label_3.setText(_translate("MainWindow", "扇扫范围"))
        self.label_4.setText(_translate("MainWindow", "扇扫速度"))
        self.label_5.setText(_translate("MainWindow", "扫描方向"))
        self.label_6.setText(_translate("MainWindow", "扫描速度"))
        self.label_7.setText(_translate("MainWindow", "俯仰角度(0-15)"))

主程序代码

import csv
import struct

from PyQt5.QtWidgets import QMainWindow, QFileDialog, QApplication
from RADAR_CONTROL import Ui_MainWindow


import sys
# import qimage2ndarray

import socket
from threading import Thread
import queue

class radarControl(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(radarControl, self).__init__()
        # self.ui = Ui_MainWindow
        self.setupUi(self)


        # 连接端口
        self.client = socket.socket()
        self.client.connect(('127.0.0.1', 8081))

        #
        self.data_queue = queue.Queue(maxsize=0)


        #
        self.thread_receive = Thread(target=self.dataReceive)
        self.thread_receive.start()
        self.thread_process = Thread(target=self.dataProcess)
        self.thread_process.start()

        #
        self.start.clicked.connect(self.start_1)
        self.stop.clicked.connect(self.stop_1)
        self.fuyang.clicked.connect(self.fuyang_1)
        self.quanxiang.clicked.connect(self.quanxiang_1)
        self.shansao.clicked.connect(self.shansao_1)
        self.xiaobei.clicked.connect(self.xiaobei_1)
        self.fuyang_0.clicked.connect(self.fuyang0)


    def start_1(self):
        self.client.send(b'\xAA\xAA\x00\xEE\xEE')
        print('1')

    def stop_1(self):
        self.client.send(b'\xAA\xAA\x01\xEE\xEE')
        print('2')

    def xiaobei_1(self):
        self.client.send(b'\xAA\xAA\x02\xEE\xEE')
        print('3')

    def shansao_1(self):
        # 中心
        # 从QTextEdit组件中读取数字
        s = self.shansao_center.text()
        try:
            number = float(s)
            integer_part = int(number)
            decimal_part = round((number - integer_part)*100)
        except ValueError:
            print("输入的不是数字!")
            integer_part = 0
            decimal_part = 0
        if integer_part >= 360 and integer_part <= 0:
            integer_part = 0
            decimal_part = 0
        
        ## 转为俩个字节
        hex_integer = struct.pack(">H", integer_part).hex()
        hex_integer = bytes.fromhex(hex_integer)
        hex_decimal = struct.pack(">H", decimal_part).hex()
        hex_decimal = bytes.fromhex(hex_decimal)
        hex_center = hex_integer + hex_decimal
        
        
        # 转为四个字节
        # hex_integer = struct.pack(">I", integer_part).hex()


        # 扇扫范围
        # 从QTextEdit组件中读取数字
        s2 = self.shansao_range.text()
        try:
            number = float(s2)
            integer_part = int(number)
            decimal_part = round((number - integer_part) * 100)
        except ValueError:
            print("输入的不是数字!")
            integer_part = 0
            decimal_part = 0
        if integer_part >= 360 and integer_part <= 0:
            integer_part = 0
            decimal_part = 0
        hex_integer = struct.pack(">H", integer_part).hex()
        hex_integer = bytes.fromhex(hex_integer)
        hex_decimal = struct.pack(">H", decimal_part).hex()
        hex_decimal = bytes.fromhex(hex_decimal)
        hex_range = hex_integer + hex_decimal

        # 选择速度
        indx_shansao = self.comboBox_shansao.currentIndex()
        indx_shansao = [indx_shansao]
        hex_shansao = bytes(indx_shansao).hex()
        data_sudu = bytes.fromhex(hex_shansao)
        data = b'\xAA\xAA\x03' + hex_center + hex_range + data_sudu + b'\xEE\xEE'
        self.client.send(data)
        print('4')

    def quanxiang_1(self):
        indx_fangxaing = self.comboBox_fangxaing.currentIndex()
        indx_sudu = self.comboBox_sudu.currentIndex()

        a = [indx_fangxaing, indx_sudu]
        b = bytes(a).hex()
        data = bytes.fromhex(b)
        hex_data = b'\xAA\xAA\x04' + data + b'\xEE\xEE'
        self.client.send(hex_data)
        print('5')

    def fuyang_1(self):
        s = self.fuyang_jiaodu.text()
        try:
            number = float(s)
            integer_part = int(number)
            decimal_part = round((number - integer_part) * 100)

        except ValueError:
            print("输入的不是数字!")
            integer_part = 0
            decimal_part = 0

        if integer_part >= 15:
            integer_part = 15
            decimal_part = 0
        elif integer_part <= 0:
            integer_part = 0
            decimal_part = 0


        hex_integer = struct.pack(">H", integer_part).hex()
        hex_integer = bytes.fromhex(hex_integer)
        hex_decimal = struct.pack(">H", decimal_part).hex()
        hex_decimal = bytes.fromhex(hex_decimal)

        hex_fuyang = hex_integer + hex_decimal

        data = b'\xAA\xAA\x05' + hex_fuyang + b'\xEE\xEE'
        self.client.send(data)
        # self.client.send(b'\xAA\xAA\x05\x00\x0A\x00\x00\xEE\xEE')
        print('6')

    def fuyang0(self):
        # 俯仰归零
        self.client.send(b'\xAA\xAA\x05\x00\x00\x00\x00\xEE\xEE')
        print('7')


    def dataProcess(self):
        print('8')
        # 数据存入EXCEL表格中
        with open("radardata.csv", "w", encoding="UTF-8", newline="") as csvfile:
            writer = csv.writer(csvfile)
            # 构建csv表头
            writer.writerow(["count", "距离", "速度", "方位", "高度", "速度方向",  "航迹编号", "屏号"])
            i = 0
            listT = []

        while True:
            print('处理数据')
            #     # 从队列中读取数据
            receve_data = self.data_queue.get()
            #     # 解析数据
            if not receve_data:
                continue
            #
            a = receve_data.hex()
            print(a)

            if a[4:6] == '06':
                # r
                r = int(a[6:10], 16) + int(a[10:14], 16) / 100
                # v
                v = int(a[14:18], 16) + int(a[18:22], 16) / 100
                # A
                A = int(a[22:26], 16) + int(a[26:30], 16) / 100
                # H
                H = int(a[30:34], 16) + int(a[34:38], 16) / 100
                # VA
                VA = int(a[38:40], 16)
                # HANG
                hang = int(a[40:44], 16)
                # PING
                ping = int(a[44:48], 16)

                i += 1
                listT.append(i)
                listT.append(r)
                listT.append(v)
                listT.append(A)
                listT.append(H)
                listT.append(VA)
                listT.append(hang)
                listT.append(ping)

                self.label.setText(f'距离:{r} 速度:{v} 方位:{A} 高度:{H} 速度方向:{VA} 航迹号:{hang} 屏号:{ping}')

                print(f'距离:{r} 速度:{v} 方位:{A} 高度:{H} 速度方向:{VA} 航迹号:{hang} 屏号:{ping}')

                # 写入csv
                writer.writerow(listT)
                listT.clear()

            elif a[4:6] == '07':
                # 换屏
                i += 1
                listT.append(i)
                listT.append('changePING')
                # 写入csv
                writer.writerow(listT)
                listT.clear()

            else:
                continue



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = radarControl()
    ui.show()
    sys.exit(app.exec_())









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值