由于昨天早晨没有调试成功,心里一直不爽,觉都睡不好,于是今早不到2点就起来继续调试,终于把昨天的BUG找到了,还是串口参数配置的问题,先上代码。
- #! /usr/bin/env python
- # -*- coding: utf-8 -*-
-
- import time
- import datetime
- import threading
- import binascii
- import platform
- import logging
- import serial
- import SerialDeal
- import serialMainUI
-
- if platform.system() == "Windows":
- from serial.tools import list_ports
- elif platform.system() == "Linux":
- import glob, os, re
-
- import wx
- import wx.xrc
-
-
- logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
- datefmt='%a, %d %b %Y %H:%M:%S')
- class MainSerialUI(serialMainUI.serialFrame):
- def __init__(self, master):
- super(MainSerialUI, self).__init__()
- self.ser = None
- self.receive_count = 0
- self.receive_data = ""
- self.list_box_serial = None
- def __del__(self):
- if platform.system() == "Linux":
- try:
- self.ser.SetStopEvent()
- except:
- pass
- def m_openserOnButtonClick( self, event ):
- try:
- self.port = self.m_comset.GetValue()
- #print ("com is %s" % self.port)
- self.baudrate = self.m_comboBox2.GetValue()
- #print ("buadrate is %s" % self.baudrate)
- self.parity = self.m_comboBox4.GetValue()
- #print ("parity is %s" % self.parity)
- self.databit = self.m_comboBox3.GetValue()
- #print ("databit is %s" % self.databit)
- self.stopbit = self.m_comboBox5.GetValue()
- #print ("stopbit is %s" % self.stopbit)
- self.ser = SerialDeal.serDeal(Port=self.port,
- BaudRate=self.baudrate,
- ByteSize=self.databit,
- Parity=self.parity,
- Stopbits=self.stopbit)
-
- self.ser.start()
- if self.ser.alive:
- print 'succes'
- self.thread_read = threading.Thread(target=self.SerRead)
- self.thread_read.setDaemon(True)
- self.thread_read.start()
- else:
- print '0'
- except Exception as e:
- #logging.error(e)
- print u'打开串口失败'
- def SerRead(self):
- try:
- n = self.ser.serSer.inWaiting()
- if n:
- self.receive_data += self.ser.read(n).replace(binascii.unhexlify("00"), "")
- if self.ser.thresholdValue <= len(self.receive_data):
- self.receive_count += 1
-
- # 接收显示是否为Hex
- if self.m_rcvBox.get() == 1:
- self.receive_data = self.space_b2a_hex(self.receive_data)
- self.m_rcvtext.insert("end", "[" + str(datetime.datetime.now()) + " - "
- + str(self.receive_count) + "]:\n", "green")
- self.m_rcvtext.insert("end", self.receive_data + "\n")
- self.m_rcvtext.see("end")
- self.receive_data = ""
- except Exception as e:
- logging.error(e)
- self.receive_data = ""
- self.ser.stop()
- self.ser = None
- def m_clrRcvTextOnButtonClick( self, event ):
- self.m_rcvtext.Clear()
- event.Skip()
- def space_b2a_hex(self, data):
- '''
- 格式化接收到的数据字符串
- 示例:123 --> 31 32 33
- '''
- new_data_list = list()
- new_data = ""
-
- hex_data = binascii.b2a_hex(data)
- temp_data = ""
- for index,value in enumerate(hex_data):
- temp_data += value
- if len(temp_data) == 2:
- new_data_list.append(temp_data)
- temp_data = ""
- for index,value in enumerate(new_data_list):
- if index%25 == 0 and index != 0:
- new_data += "\n"
- new_data += value
- new_data += " "
-
- return new_data
- def m_send1butOnButtonClick( self, event ):
- if self.ser.alive:
- send_data = self.m_textCtrl5.GetValue()
- #try:
-
-
- def m_clr1butOnButtonClick( self, event ):
- self.m_textCtrl5.Clear()
-
- def main():
- app = wx.App()
- MainSerialUI(app).Show(True)
- app.MainLoop()
-
- if __name__ == '__main__':
- main()
复制代码
这段代码,配合前2次的代码,就可以运行串口的接收了,很是兴奋啊,下面还有串口的发送没有调试,改天搞定了,再次上传给大家。
下面就BUG说明一下:
大家看我的代码处有好多的#注释,就是我在调试时用于确认哪一步出错的,大家也可以试试这种调试方式。
发稿与2018年1月24日早
此内容由EEWORLD论坛网友star_66666原创,如需转载或用于商业用途需征得作者同意并注明出处