python - 如何仅通过 pySerial 在端口打开而不是端口关闭时发送 DTR/RTS 信号
问题描述
我有一个系统,当它的 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。RTS/DTR 可能会在设置
rts
或dtr
设置与默认值(True
/活动)不同时出现故障。出于兼容性原因,由于 EINVAL (22) 或 ENOTTY (25) 在 POSIX 上应用
rts
或失败时不会报告错误。dtr
rts
Setter:设置 RTS 行的状态
Getter:返回 RTS 行的状态
类型: bool将 RTS 线设置为指定的逻辑电平。可以在打开串行端口之前分配此值,然后应用该值
open()
(有限制,请参阅open()
)。
dtr
Setter:设置 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()
推荐阅读
- python - 如何从日期范围中选择数据
- typescript - 如何在ionic 2中的html div内显示相机屏幕
- kubernetes - 自动绑定 PVC 到 PV
- r - 如果所有列中都存在,则删除带有“NA”的行
- javascript - 取消 Promise.all 一次拒绝时更新 MongoDB
- reactjs - 修复 aws 中 react/nginx 中的 502 网关错误
- jquery - 当我只想更改一个列表项时,使用 jquery 更改列表项正在更改所有列表项
- typescript - 如何声明从接口中选择属性的类型并使选择的属性的属性可选?
- apache-spark - 如何在火花流中刷新加载的数据帧内容?
- java - 在 java Spark 中使用 Jackson 2.9.9