【问题标题】:Monitoring RTS/DTR Line In PySerial在 PySerial 中监控 RTS/DTR 行
【发布时间】:2020-04-18 19:56:52
【问题描述】:

我正在开发一个 RS232 软件项目,该项目使用 RTS/DTR 作为某些软件的控制输入。有没有办法监控 RTS 或 DTR 线以了解 PySerial 中的状态变化?我正在努力寻找在 Python 中监视 RTS 或 DTR 行的示例,目的是在设置 RTS/DTR 行时基本上触发一个函数。

谢谢!

【问题讨论】:

  • 文档对 rts/dtr 有什么看法?
  • 我去挖掘了,真的找不到太多关于读取 RTS/DTR 状态的信息,我能找到的最接近的是它在打开端口时的行为。 “当端口打开时,RTS 和 DTR 线会切换。这可能会导致连接的设备进行一些处理或重置。在这种情况下,设备可能不会立即收到对 write() 的调用。”
  • 你看到this关于dtr的条目了吗?
  • 我看到一个真实的例子会有所帮助。感谢您为我指明正确的方向。
  • 我希望你必须投票:if port.dtr:

标签: python serial-port pyserial


【解决方案1】:

RS232C的输入信号为CTS/DSR/RI/CD。

您和您的项目成员可能对 RS232C 规范有误解。

RTS/DTR 是你制作的程序控制的输出信号,不是输入信号。

你可以知道你设置了什么,或者默认状态是什么,即使你没有设置,但它不会因为外部因素而改变。

pySerial API

RTS/DTR 信号线有可能因为线路断线或与某物短路等硬件问题而发生不希望的变化,但程序不可能知道,不处于可以通信的状态。


另一种可能是硬件流控开启,串口输入缓冲区设置小,或者即使缓冲区设置大,对端发送的数据也更多。

设备驱动程序自动控制信号线以防止输入数据溢出。

是由于缺少对串口设置和程序规范的考虑,认为是正确的编程,尽量防止这种状态变化。


PySerial 似乎没有事件驱动的编程接口。

cts
dsr

你写的是要在CTS/DSR开启的时候调用一个函数,但是你可以在调用函数的时候查看CTS/DSR的状态?

如果你真的想用 CTS/DSR 信号执行事件驱动编程,这是一种创建一个监视 CTS/DSR 信号的软件循环作为主程序的方法,检测 CTS/DSR 信号从OFF 到 ON,并调用相应的函数。

请注意,如果主程序对 CTS/DSR 信号的监控在睡眠之间没有间歇性执行,CPU 将变得繁忙,系统将无法正常运行。

【讨论】:

  • 感谢您的澄清,我想我对哪些位做什么感到困惑。实际上,我需要监控 CTS 或 DSR。我希望这是有道理的..
猜你喜欢
  • 2019-01-25
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多