python串口收发并行_Python3 实现串口两进程同时读写

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:31   1525   0

通过两个进程分别读写串口,并把发送与接收到的内容记录在blog中,收到q时程序结束并退出

import threading,time

import serial

import string

class SerThread:

def __init__(self, Port=0):

#初始化串口、blog文件名称

self.my_serial = serial.Serial()

self.my_serial.port=Port

self.my_serial.baudrate = 9600

self.my_serial.timeout = 1

self.alive = False

self.waitEnd = None

fname=time.strftime("%Y%m%d")#blog名称为当前时间

self.rfname='r'+fname #接收blog名称

self.sfname='s'+fname #发送blog名称

self.thread_read= None

self.thread_send=None

def waiting(self):

# 等待event停止标志

if not self.waitEnd is None:

self.waitEnd.wait()

def start(self):

#开串口以及blog文件

self.rfile=open(self.rfname,'w')

self.sfile=open(self.sfname,'w')

self.my_serial.open()

if self.my_serial.isOpen():

self.waitEnd = threading.Event()

self.alive = True

self.thread_read = threading.Thread(target=self.Reader)

self.thread_read.setDaemon(True)

self.thread_send=threading.Thread(target=self.Sender)

self.thread_send.setDaemon(True)

self.thread_read.start()

self.thread_send.start()

return True

else:

return False

def Reader(self):

while self.alive:

try:

n=self.my_serial.inWaiting()

data=''

if n:

data= self.my_serial.read(n).decode('utf-8')

print ('recv'+' '+time.strftime("%Y-%m-%d %X")+' '+data.strip())

print (time.strftime("%Y-%m-%d %X:")+data.strip(),file=self.rfile)

if len(data)==1 and ord(data[len(data)-1])==113: #收到字母q,程序退出

break

except Exception as ex:

print (ex)

self.waitEnd.set()

self.alive = False

def Sender(self):

while self.alive:

try:

snddata=input("input data:\n")

self.my_serial.write(snddata.encode('utf-8'))

print ('sent'+' '+ time.strftime("%Y-%m-%d %X"))

print (snddata,file=self.sfile)

except Exception as ex:

print (ex)

self.waitEnd.set()

self.alive = False

def stop(self):

self.alive = False

#self.thread_read.join()

#self.thread_send.join()

if self.my_serial.isOpen():

self.my_serial.close()

self.rfile.close()

self.sfile.close()

if __name__ == '__main__':

ser = SerThread('com4')

try:

if ser.start():

ser.waiting()

ser.stop()

else:

pass;

except Exception as ex:

print (ex)

if ser.alive:

ser.stop()

print ('End OK .');

del ser;

以上这篇Python3 实现串口两进程同时读写就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP