本日志介绍一个很简单的串口接收数据线程,其基本思想是每隔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