雷达部分控制界面
雷达扇扫控制命令
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_())