Сигналы рукопожатия через последовательный порт монитора RS-232 - PullRequest
10 голосов
/ 06 мая 2011

Мне нужно отслеживать состояние сигналов последовательного порта (RI, DSR, CD, CTS). Зацикливание и опрос с помощью «последовательной» библиотеки (например, с использованием функций getRI) слишком трудоемки, а время ответа не приемлемо.

Есть ли решения с питоном?

1 Ответ

13 голосов
/ 06 мая 2011

В Linux возможно отслеживать изменение состояния сигнального контакта порта RS-232 с помощью уведомления на основе прерываний через системный вызов TIOCMIWAIT:

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(),
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...