Class 拔下设备时不改变 pyserial 连接的状态
Class not changing state of pyserial connection when unplug device
我正在尝试为学校项目做简单的串行 link 程序,但我遇到了一个小问题。我创建了 class 来维持串行通信,但是当我拔下并重新插入串行端口时,它不会改变串行连接的状态(self.ser
仍然具有与初始化时相同的对象)。我希望它重新连接并继续工作。你能帮我告诉我我做错了什么吗?我是 python 的新手。非常感谢!
import serial
import uuid
class SerialWrapper:
def __init__(self):
self.ser = serial.Serial("COM3", 9600)
def handleconnect(self):
try:
if self.ser is None:
self.ser = serial.Serial("COM3", 9600)
self.ser.close()
self.ser.open()
print("Reconnecting...")
except:
if not (self.ser is None):
self.ser.close()
self.ser = None
print("Disconnecting")
else:
print("No Connection")
def serialwrite(self, data):
self.handleconnect()
try:
datalength = self.ser.write(data.encode())
print("Writing data...")
return datalength
except:
print("Error in writing data")
def serialread(self, datalength):
self.handleconnect()
try:
data = self.ser.read(datalength).decode()
print("Reading data...")
return data
except:
print("Error in reading data")
def main():
ser = SerialWrapper()
while 1:
value = uuid.uuid4().hex
length = ser.serialwrite(value)
print(ser.serialread(length))
main()
所以我发现在每个周期结束时都必须用 self.ser.close()
关闭端口,然后在新周期开始时用 self.ser.open()
再次打开
我正在尝试为学校项目做简单的串行 link 程序,但我遇到了一个小问题。我创建了 class 来维持串行通信,但是当我拔下并重新插入串行端口时,它不会改变串行连接的状态(self.ser
仍然具有与初始化时相同的对象)。我希望它重新连接并继续工作。你能帮我告诉我我做错了什么吗?我是 python 的新手。非常感谢!
import serial
import uuid
class SerialWrapper:
def __init__(self):
self.ser = serial.Serial("COM3", 9600)
def handleconnect(self):
try:
if self.ser is None:
self.ser = serial.Serial("COM3", 9600)
self.ser.close()
self.ser.open()
print("Reconnecting...")
except:
if not (self.ser is None):
self.ser.close()
self.ser = None
print("Disconnecting")
else:
print("No Connection")
def serialwrite(self, data):
self.handleconnect()
try:
datalength = self.ser.write(data.encode())
print("Writing data...")
return datalength
except:
print("Error in writing data")
def serialread(self, datalength):
self.handleconnect()
try:
data = self.ser.read(datalength).decode()
print("Reading data...")
return data
except:
print("Error in reading data")
def main():
ser = SerialWrapper()
while 1:
value = uuid.uuid4().hex
length = ser.serialwrite(value)
print(ser.serialread(length))
main()
所以我发现在每个周期结束时都必须用 self.ser.close()
关闭端口,然后在新周期开始时用 self.ser.open()