python实战串口助手---6实现串口接收

[复制链接]

版主

发表于 2018-2-1 09:50:22   144 查看 0 回复 显示全部楼层 倒序浏览
分享
由于昨天早晨没有调试成功,心里一直不爽,觉都睡不好,于是今早不到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日早


评分

参与人数 1积分 +20 收起 理由
ElecFans王岑 + 20

查看全部评分

标签:实战 串口 助手 接收

只有小组成员才能发言,加入小组>>

5个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区