7682|4

1903

帖子

0

TA的资源

版主

楼主
 

python实战串口助手---6实现串口接收 [复制链接]

 

由于昨天早晨没有调试成功,心里一直不爽,觉都睡不好,于是今早不到2点就起来继续调试,终于把昨天的BUG找到了,还是串口参数配置的问题,先上代码。

  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. import time
  4. import datetime
  5. import threading
  6. import binascii
  7. import platform
  8. import logging
  9. import serial
  10. import SerialDeal
  11. import serialMainUI

  12. if platform.system() == "Windows":
  13.     from  serial.tools import list_ports
  14. elif platform.system() == "Linux":
  15.     import glob, os, re

  16. import wx
  17. import wx.xrc


  18. logging.basicConfig(level=logging.DEBUG,
  19.                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  20.                     datefmt='%a, %d %b %Y %H:%M:%S')
  21. class MainSerialUI(serialMainUI.serialFrame):
  22.     def __init__(self, master):
  23.         super(MainSerialUI, self).__init__()
  24.         self.ser = None
  25.         self.receive_count = 0
  26.         self.receive_data = ""
  27.         self.list_box_serial = None
  28.     def __del__(self):
  29.         if platform.system() == "Linux":
  30.             try:
  31.                 self.ser.SetStopEvent()
  32.             except:
  33.                 pass
  34.     def m_openserOnButtonClick( self, event ):
  35.         try:
  36.             self.port = self.m_comset.GetValue()
  37.             #print ("com is %s" % self.port)
  38.             self.baudrate = self.m_comboBox2.GetValue()
  39.             #print ("buadrate is %s" % self.baudrate)
  40.             self.parity = self.m_comboBox4.GetValue()
  41.             #print ("parity is %s" % self.parity)
  42.             self.databit = self.m_comboBox3.GetValue()
  43.             #print ("databit is %s" % self.databit)
  44.             self.stopbit = self.m_comboBox5.GetValue()
  45.             #print ("stopbit is %s" % self.stopbit)
  46.             self.ser = SerialDeal.serDeal(Port=self.port,
  47.                                            BaudRate=self.baudrate,
  48.                                            ByteSize=self.databit,
  49.                                            Parity=self.parity,
  50.                                            Stopbits=self.stopbit)
  51.             
  52.             self.ser.start()
  53.             if self.ser.alive:
  54.                 print 'succes'
  55.                 self.thread_read = threading.Thread(target=self.SerRead)
  56.                 self.thread_read.setDaemon(True)
  57.                 self.thread_read.start()
  58.             else:
  59.                 print '0'
  60.         except Exception as e:
  61.             #logging.error(e)
  62.             print u'打开串口失败'
  63.     def SerRead(self):
  64.         try:
  65.             n = self.ser.serSer.inWaiting()
  66.             if n:
  67.                 self.receive_data += self.ser.read(n).replace(binascii.unhexlify("00"), "")
  68.             if self.ser.thresholdValue <= len(self.receive_data):
  69.                 self.receive_count += 1

  70.                     # 接收显示是否为Hex
  71.                 if self.m_rcvBox.get() == 1:
  72.                     self.receive_data = self.space_b2a_hex(self.receive_data)
  73.                 self.m_rcvtext.insert("end", "[" + str(datetime.datetime.now()) + " - "
  74.                                                + str(self.receive_count) + "]:\n", "green")
  75.                 self.m_rcvtext.insert("end", self.receive_data + "\n")
  76.                 self.m_rcvtext.see("end")
  77.                 self.receive_data = ""
  78.         except Exception as e:
  79.             logging.error(e)
  80.             self.receive_data = ""
  81.             self.ser.stop()
  82.             self.ser = None
  83.     def m_clrRcvTextOnButtonClick( self, event ):
  84.         self.m_rcvtext.Clear()
  85.         event.Skip()
  86.     def space_b2a_hex(self, data):
  87.         '''
  88.         格式化接收到的数据字符串
  89.         示例:123 --> 31 32 33
  90.         '''
  91.         new_data_list = list()
  92.         new_data = ""

  93.         hex_data = binascii.b2a_hex(data)
  94.         temp_data = ""
  95.         for index,value in enumerate(hex_data):
  96.             temp_data += value
  97.             if len(temp_data) == 2:
  98.                 new_data_list.append(temp_data)
  99.                 temp_data = ""
  100.         for index,value in enumerate(new_data_list):
  101.             if index%25 == 0 and index != 0:
  102.                 new_data += "\n"
  103.             new_data += value
  104.             new_data += " "

  105.         return new_data
  106.     def m_send1butOnButtonClick( self, event ):
  107.         if self.ser.alive:
  108.             send_data = self.m_textCtrl5.GetValue()
  109.             #try:
  110.                

  111.         
  112.     def m_clr1butOnButtonClick( self, event ):
  113.         self.m_textCtrl5.Clear()

  114.         
  115. def main():
  116.     app = wx.App()
  117.     MainSerialUI(app).Show(True)
  118.     app.MainLoop()
  119.      
  120. if __name__ == '__main__':  
  121.     main()
复制代码

这段代码,配合前2次的代码,就可以运行串口的接收了,很是兴奋啊,下面还有串口的发送没有调试,改天搞定了,再次上传给大家。
下面就BUG说明一下:
大家看我的代码处有好多的#注释,就是我在调试时用于确认哪一步出错的,大家也可以试试这种调试方式。



                                                                                              发稿与2018年1月24日早

此内容由EEWORLD论坛网友star_66666原创,如需转载或用于商业用途需征得作者同意并注明出处





最新回复

嗯嗯   最近才注册这个网站   看到了你之前发的帖子   多谢多谢哈  详情 回复 发表于 2018-1-24 10:40
点赞 关注
 
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
大神使用QT做的吗  可否把界面发出来看看呀

点评

wxpython做的,有界面的啊,你看看前面的帖子,这是一个工程的继续,你看看3或4,有界面的  详情 回复 发表于 2018-1-24 09:21
 
 
 

回复

1903

帖子

0

TA的资源

版主

板凳
 
powerniu 发表于 2018-1-24 08:46
大神使用QT做的吗  可否把界面发出来看看呀

wxpython做的,有界面的啊,你看看前面的帖子,这是一个工程的继续,你看看3或4,有界面的
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

4
 
star_66666 发表于 2018-1-24 09:21
wxpython做的,有界面的啊,你看看前面的帖子,这是一个工程的继续,你看看3或4,有界面的

嗯嗯   最近才注册这个网站   看到了你之前发的帖子   多谢多谢哈

点评

客气了,我也刚学不久,刚做第二个项目,还没有完成这个串口助手,都是工作之余,挤时间学的,有时间,一起讨论,学习  详情 回复 发表于 2018-1-24 10:42
 
 
 

回复

1903

帖子

0

TA的资源

版主

5
 
powerniu 发表于 2018-1-24 10:40
嗯嗯   最近才注册这个网站   看到了你之前发的帖子   多谢多谢哈

客气了,我也刚学不久,刚做第二个项目,还没有完成这个串口助手,都是工作之余,挤时间学的,有时间,一起讨论,学习
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表