如何通过pySerial只在端口打开时发送DTRRTS信号,而不在端口关闭时发送DTRRTS信号?

问题描述 投票:0回答:1

我有一个系统,当它的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端口的性质决定了它们的行为在实例化时是固定的?

谢谢您! 我有一个系统,当它的端口关闭时,系统会继续运行。

python serial-port pyserial
1个回答
0
投票

能否做到这一点,取决于操作系统和设备驱动程序。那么,设置值为 rts,dtr 将是 True,False 而不是 1,0.

pySerial API

open() 开口。的状态。rtsdtr 的应用。

一些操作系统或驱动程序可能会在端口打开时自动激活RTS和/或DTR。 当您打开端口时,RTSDTR可能会出现故障。rtsdtr 与其默认值不同的设置 (True 活动)。)

出于兼容性的原因,在应用 rtsdtr 在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()
© www.soinside.com 2019 - 2024. All rights reserved.