把Log先建了/复制进来:
# coding:utf-8
import os
import datetime
# from Socket_Client.Socket_Client import socket_client
logaddr = os.path.split(os.path.realpath(__file__))[0]
class log():
@staticmethod
def outputlog(*logcontent):
logs = 'log:'
if len(logcontent) <= 0:
print('log empty ')
else:
for i in (logcontent):
logs += str(i) + ';'
# output = open(logaddr+'\\Logs\\log' + str(datetime.datetime.now().strftime('%Y_%m_%d_%H_%M'))+'.txt','a')
output = open(logaddr + '\\Logs\\log' + str(datetime.datetime.now().strftime('%Y_%m_%d')) + '.txt', 'a')
output.write(str(datetime.datetime.now()) + ' :' + str(logs) + '\n')
print(logs)
# log.outputlog(logs)
output.close()
ui用的PyQt5,designer设计完之后PyUIC生成一下,代码如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'My_Serial.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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(590, 590)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.Serial = QtWidgets.QLabel(self.centralwidget)
self.Serial.setGeometry(QtCore.QRect(100, 60, 70, 20))
self.Serial.setScaledContents(False)
self.Serial.setAlignment(QtCore.Qt.AlignCenter)
self.Serial.setWordWrap(False)
self.Serial.setIndent(-1)
self.Serial.setObjectName("Serial")
self.Serial_List = QtWidgets.QComboBox(self.centralwidget)
self.Serial_List.setGeometry(QtCore.QRect(190, 60, 280, 20))
self.Serial_List.setObjectName("Serial_List")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(100, 170, 370, 60))
self.textEdit.setObjectName("textEdit")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(100, 280, 71, 31))
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(100, 140, 70, 30))
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(400, 100, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(400, 250, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(100, 310, 371, 71))
self.textBrowser.setObjectName("textBrowser")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 590, 23))
self.menubar.setObjectName("menubar")
self.menu1111 = QtWidgets.QMenu(self.menubar)
self.menu1111.setObjectName("menu1111")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar.addAction(self.menu1111.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "串口调试助手"))
self.Serial.setText(_translate("MainWindow", "串口:"))
self.label_2.setText(_translate("MainWindow", "输出:"))
self.label.setText(_translate("MainWindow", "输入:"))
self.pushButton.setText(_translate("MainWindow", "连接"))
self.pushButton_2.setText(_translate("MainWindow", "输入"))
self.menu1111.setTitle(_translate("MainWindow", "1.0.0.2.1"))
简简单单写个就不搞Basic_Command了
写个test试一下读写收发:
import serial
import time
test = serial.Serial(port='COM4', baudrate=115200, bytesize=8, stopbits=1, timeout=10)
print(test)
print(test.is_open)
test.close()
print(test.is_open)
test.open()
print(test.is_open)
msg = {'head': 0xF1, 'op': 0xF7, 'C1': 0x0A, 'C2': 0x01, 'end': 0xF2}
m = bytearray()
for v in msg.values():
m.append(int(v))
print(m)
a = test.write(m)
print(a, '\n')
ot = 0.00001
st = time.time()
while True:
et = time.time()
if et - st < ot:
b = test.read(4)
b = str(b)
else:
break
print(b, '\n')
中间的SerialUtile:
import serial
import serial.tools.list_ports
from Logs.log import log
class SerialUtile:
def __init__(self):
self.testSerial = serial.Serial()
@staticmethod
def get_ports():
port_list = list(serial.tools.list_ports.comports())
available_ports = []
if len(port_list) == 0:
available_ports.append("No ports!")
else:
for port in port_list:
available_ports.append(str(port))
return available_ports
def open_serial(self, port_name):
try:
if self.testSerial.is_open:
log.outputlog("Port has been open! Now closing!")
self.testSerial.close()
if port_name:
self.testSerial.port = port_name
self.testSerial.baudrate = 115200
self.testSerial.bytesize = 8
self.testSerial.stopbits = 1
self.testSerial.timeout = 30
self.testSerial.open()
log.outputlog("Port %s is open!" % str(self.testSerial.port))
else:
log.outputlog("Have no port! Retry!")
return self.testSerial.is_open
except Exception as e:
log.outputlog("Open serial port error : %s" % e)
self.testSerial.close()
def send_message_and_recv(self, port_name, text):
try:
if not self.testSerial.is_open:
# self.testSerial.port = port_name
# self.testSerial.baudrate = 115200
# self.testSerial.bytesize = 8
# self.testSerial.stopbits = 1
# self.testSerial.timeout = 30
# self.testSerial.open()
self.open_serial(port_name)
self.testSerial.write(text)
a = self.testSerial.read(4)
return a
except Exception as e:
log.outputlog("Send Message And Recv error : %s" % e)
self.testSerial.close()
if __name__ == '__main__':
print('')
最终的testSerial:
import sys
import re
from PyQt5.QtWidgets import QApplication, QMainWindow
from My_Serial import Ui_MainWindow
from Logs.log import log
from SerialUtile import SerialUtile as Ser
# 固定格式(字节流……)的转换
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.initialize_ui()
self.ui.pushButton.clicked.connect(self.open_port)
self.selectPort = None
self.openSelectPort = None
self.ui.pushButton_2.clicked.connect(self.get_set_text)
def initialize_ui(self):
available_ports = Ser().get_ports()
for port in available_ports:
self.ui.Serial_List.addItem(port)
def open_port(self):
self.selectPort = re.split(" - | ' ' ", self.ui.Serial_List.currentText())
self.openSelectPort = Ser().open_serial(self.selectPort[0])
# F1F70A01F2
def get_set_text(self):
# msg = {'head': 0xF1, 'op': 0xF7, 'C1': 0x00, 'C2': 0x00, 'end': 0xF2}
text = self.ui.textEdit.toPlainText()
if len(text) == 0:
return
x = bytes.fromhex(text)
# temp = []
# for i in x:
# temp.append('0x%02X' % i)
# for i, key in enumerate(msg):
# msg[key] = temp[i]
# t = bytearray()
# for v in msg.values():
# t.append(int(v, 16))
t = bytearray(x)
a = Ser().send_message_and_recv(self.selectPort[0], t)
r = []
for i in a:
r.append('%02X ' % i)
rr = ''.join(r)
self.ui.textBrowser.setPlainText(str(rr))
log.outputlog("Send Message : %s" % t)
if __name__ == '__main__':
app = QApplication(sys.argv)
# 创建 QApplication 对象(当前运行地址)
w = MainWindow()
# 创建窗口
# w.setWindowTitle("串口调试")
# # 设窗口标题
w.show()
# 展示窗口
sys.exit(app.exec_())
# 系统,退出,QApplication程序的(事件检测)循环等待状态