我需要监视串行端口信号(RI,DSR,CD,CTS)的状态。
使用“串行”库(例如,使用函数getRI)进行循环和轮询会占用大量CPU,因此响应时间是 Not Acceptable 。
python有解决方案吗?
最佳答案
在Linux上,可以通过阻塞的系统调用TIOCMIWAIT通过基于中断的通知来监视RS-232端口的信号引脚的状态变化:
from serial import Serial
from fcntl import ioctl
from termios import (
TIOCMIWAIT,
TIOCM_RNG,
TIOCM_DSR,
TIOCM_CD,
TIOCM_CTS
)
ser = Serial('/dev/ttyUSB0')
wait_signals = (TIOCM_RNG |
TIOCM_DSR |
TIOCM_CD |
TIOCM_CTS)
if __name__ == '__main__':
while True:
ioctl(ser.fd, TIOCMIWAIT, wait_signals)
print 'RI=%-5s - DSR=%-5s - CD=%-5s - CTS=%-5s' % (
ser.getRI(),
ser.getDSR(),
ser.getCD(),
ser.getCTS(),
)
关于Python监控器串行端口(RS-232)握手信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5904895/