我有一个系统,当它的COM端口通过pySerial打开或关闭时,都会收到复位信号,这是正常的行为。
with Serial("COM4", 19200) as ser:
ser.write(bytearray[89])
但我想让复位只发生在端口打开的时候 而允许系统在端口关闭的时候继续运行。
我的尝试不成功。
ser = serial_for_url("COM4", 19200, do_not_open=True)
ser.dtr = 0
ser.rts = 0
ser.open()
ser.write(bytearray[89])
ser.dtr = 1
ser.rts = 1
ser.close()
这可能吗?还是posix端口的性质决定了它们的行为在实例化时是固定的?
谢谢您! 我有一个系统,当它的端口关闭时,系统会继续运行。
能否做到这一点,取决于操作系统和设备驱动程序。那么,设置值为 rts
,dtr
将是 True
,False
而不是 1
,0
.
open()
开口。的状态。rts
和dtr
的应用。一些操作系统或驱动程序可能会在端口打开时自动激活RTS和/或DTR。 当您打开端口时,RTSDTR可能会出现故障。
rts
或dtr
与其默认值不同的设置 (True
活动)。)出于兼容性的原因,在应用
rts
或dtr
在POSIX上由于EINVAL (22) 或ENOTTY (25)而失败。
rts
设置器。 设置RTS线路的状态 获取器。 返回RTS线路的状态 类型。 bool将 RTS 线设置为指定的逻辑电平。可以在打开串口前指定该值,然后在打开串口时应用该值。
open()
(有限制的,见open()
).
dtr
设置器。 设置DTR线的状态 Getter。 返回DTR线的状态 类型。 bool将 DTR 线设置为指定的逻辑电平。可以在打开串口前指定该值,然后在打开串口时应用该值。
open()
(有限制的,见open()
).
如果您的系统支持该功能,是否可以对您的程序进行如下修改?请试一试。
ser = serial_for_url("COM4", 19200, do_not_open=True)
ser.dtr = False
ser.rts = False
ser.open()
time.sleep(0.1) # The time required for the device to recognize the reset condition.
ser.dtr = True
ser.rts = True
time.sleep(2.0) # The time required for the device to complete the reset operation.
ser.write(bytearray[89])
ser.flush() # wait until all data is written.
ser.close()