python学习笔记19:一个简单的串口接收数据线程

    本日志介绍一个很简单的串口接收数据线程,其基本思想是每隔100ms从串行口读取数据,如果串行口有数据则将其读出,然后将读出的二进制数据转换为字符串,压入队列中。

    代码如下:

import threading
import time
import binascii

"""
功能: Uart接收数据线程
属性: QueueUartReceiveData:Uart接收到数据后,将数据压入该队列
注解: 接收的数据为二进制,压入到队列中的数据为ASCII码
"""
class CThreadUartReceive(threading.Thread):
    def __init__(self, ser, QueueUartReceiveData):
        threading.Thread.__init__(self)
        self.ser = ser
        self.QueueUartReceiveData = QueueUartReceiveData

    def run(self):
        while True:
            if self.ser.isOpen() == False:
                time.sleep(0.1)
                continue
            while True:
                time.sleep(0.1)
                n = self.ser.inWaiting()
                if n == 0:
                    break
                else:
                    data = self.ser.read(n)
                    data = str(binascii.b2a_hex(data))[2:-1]
                    self.QueueUartReceiveData.put(data)

    这段程序非常简单,线程启动后,循环监视串行口的打开状态,串行口打开后,进入数据处理循环,延时后,读出串行口中的数据个数,如果其个数大于0,则将其全部读出,转换为字符串表达形式,压入队列。其它线程直接从队列中提取数据就可以了。


原创性文章,转载请注明出处      

CSDN:http://blog.csdn.net/qingwufeiyang12346





你可能感兴趣的:(python)