импортировать последовательную проверку, если устройство подключено постоянно

Я хотел бы постоянно проверять соединение через COM-порт, я нашел здесь как проверить соединение, но когда я реализую его в своем приложении, чтобы проверить, подключено ли устройство, я не достигаю желаемого результата, возможно, потому, что я проверяю его с помощью QTimer каждую секунду, но, возможно, все идет хорошо только сначала время при включении..

Надеюсь, с кодом будет легче понять.

Итак, открываю порт:

    import serial
    global ser
    from PyQt5.QtCore import QTimer
    timer = QTimer()
    def setting_COMPort():
        global ser
        ser = serial.Serial(
                  port='/dev/ttyAMA0',
                  baudrate = 115200,
                  parity=serial.PARITY_NONE,
                  stopbits=serial.STOPBITS_ONE,
                  bytesize=serial.EIGHTBITS,
                  timeout=1)

timer.timeout.connect(self.statusComPort)

в "основной" функции есть QTimer

global timer
timer.start(1000)

и в слоте statusComPort я хочу каждую секунду проверять через QTimer, подключено ли устройство.

def statusComPort(self):
    global ser
    colorr=self.palette()
    if(ser.isOpen()):
        self.lineEdit_6.setText(str("Port is open!"))
        print("Port is Open")
        colorr.setColor(self.backgroundRole(), QtGui.QColor(155,155,155))
        self.setPalette(colorr)
    else:
        self.lineEdit_6.setText(str("Error! Port is close!"))
        colorr.setColor(self.backgroundRole(), QtGui.QColor(155,0,5))
        self.setPalette(colorr)
        print("Port is close")

В случае потери соединения я меняю цвет своего окна. Проблема в том, что прикладное решение, предложенное по ссылке, в данном случае не работает.

Итак, что я должен изменить в своем слоте, чтобы добиться результата..?

Может быть, использовать другую функцию, а не isOpen()?

ОС - Распбиан

ОБНОВЛЕНИЕ 1

ссылка на проект, вырезано все, кроме необходимого функционала https://github.com/ivanwolodin/statusofcomport

Подведение итогов. У меня есть Qtimer, который действует каждую секунду, поэтому мое приложение каждую секунду переходит в слот «statusComPort», где я хочу проверить, подключено ли устройство через последовательный порт. Итак, я хочу постоянно (каждую секунду) проверять состояние моего последовательного порта, и вопрос: как мне написать этот слот для правильной проверки


person John    schedule 14.08.2017    source источник
comment
Вы можете поделиться своим полным кодом через github, диск или что-то подобное.   -  person eyllanesc    schedule 14.08.2017
comment
Вы должны предоставить минимальный, полный и проверяемый пример. Это должно быть минимальным и полным, то есть я должен скопировать его и без добавления чего-либо еще должен воспроизвести вашу проблему.   -  person eyllanesc    schedule 14.08.2017
comment
Я прошу что-то разумное, чтобы иметь возможность протестировать ваш код, со мной много раз случалось, что авторы вопроса говорят, что они сделали какой-то код, но когда я создаю свой собственный тест, он работает, а затем они говорят мне, что они неправильно классифицировали свой код, An mvce. Если вы не предоставите то, что я прошу, к сожалению, я не смогу вам помочь.   -  person eyllanesc    schedule 14.08.2017
comment
Хорошо, понял! Спасибо! См. обновление 1   -  person John    schedule 14.08.2017
comment
Почему бы вам не сделать последовательный объект частью вашего основного класса? Использование глобальных переменных является плохой практикой программирования.   -  person eyllanesc    schedule 14.08.2017
comment
Если улучшишь, буду очень благодарен..   -  person John    schedule 14.08.2017
comment
Вы используете pyqt4 или pyqt5?   -  person eyllanesc    schedule 14.08.2017
comment
Вы используете python2 или python3?   -  person eyllanesc    schedule 14.08.2017
comment
Если вы используете pyqt5, вы можете дать надежное решение, используя QSerialPort.   -  person eyllanesc    schedule 14.08.2017
comment
питон 3 и pyqt4   -  person John    schedule 14.08.2017
comment
В вашем примере вы размещаете pyqt5, в github pyqt4. Также доступен raspbian, и вы можете установить его с помощью python3-pyqt5.   -  person eyllanesc    schedule 14.08.2017
comment
Я знаю, произошло смешение, потому что у меня разные машины для выполнения кода. Одна поддерживает PyQt4, другая — PyQt5. Но имеет ли это какое-то значение, если я спрашиваю о содержании одного единственного слота...   -  person John    schedule 14.08.2017
comment
Проблема, которую я заметил, заключается в том, что pyserial не понимает, что последовательный порт был отключен, если вы не отправите данные.   -  person eyllanesc    schedule 14.08.2017
comment
Вместо этого QSerialPort проверяет, отключен ли он без отправки данных.   -  person eyllanesc    schedule 14.08.2017
comment
Ахсо! Большое спасибо, поэтому мне нужно перенести код на PyQt5... или, может быть, есть способ отправить некоторые данные с помощью pyserial?   -  person John    schedule 14.08.2017
comment
И, к сожалению, QSerialPort был представлен в Qt5 и, следовательно, в PyQt5.   -  person eyllanesc    schedule 14.08.2017
comment
Отправка данных не масштабируется, так как устройство, которое получает данные, не ожидает от вас отправки ненужных данных, удобнее использовать QSerialPort, поэтому я бы рекомендовал использовать pyqt5   -  person eyllanesc    schedule 14.08.2017
comment
Хорошо! Большое спасибо за ваше время и за вашу помощь!   -  person John    schedule 14.08.2017
comment
Но, кстати, какая функция в PyQt5 выполняет эту работу?   -  person John    schedule 15.08.2017
comment
Просто подключите сигнал ошибки к какому-нибудь слоту: your_serial.error.connect(self.handleError), и тогда слот получит код ошибки, в вашем случае: def handleError(self, error): if error != QSerialPort.NoError: print("Serial Port error:" + self.sender().errorString())   -  person eyllanesc    schedule 15.08.2017
comment
Можете ли вы помочь мне с новой темой, пожалуйста, подключитесь к этой теме? stackoverflow.com/questions/45709986/   -  person John    schedule 16.08.2017