как остановить чтение, когда данные не возвращаются - PullRequest
0 голосов
/ 05 февраля 2020

Я написал свою собственную программу Modbus. там я посылаю команду на внешний CR C неверно, раб не подключен, ошибка передачи или другая причина. Теперь программа перестает отвечать на запросы, и я должен остановиться и запустить ее снова. есть ли способ, например, рассчитать время ответа, скажем, в течение 3 секунд, и нет ли ответа в это время, когда программа переходит в исключение? как попробовать, кроме команды в python? (на самом деле ошибки нет, просто нет ответа)
Заранее спасибо за ваши усилия.

    def ModbusCommando(opdracht):
    # write command in bytes to the serial ModBus port to find out how many bytes we need to read
    # first we test if the ModBus is connect to the port
        antw = 0
        while antw == 0: # is the USB port connected?
            try:
                fh = open ("/dev/ttyUSB0","wb")
                fh.write(opdracht)
                fh.close()
            except PermissionError:
                print("Geen modBus aangesloten, ModBus not connected")
                antw = 0 # wait until plugged in
            else:
                antw = 1 # plug is in
        # end while
    #the port is connected
    # we reopen to find out how many bytes need to be read
        fh = open ("/dev/ttyUSB0","rb")
        antwoord = fh.read(3) # the amount of bytes read is in this position
    # close serialpoort
        fh.close()
        AantalBytes = antwoord[2]+5 # 5, deelnemmer+soortcmd+antwoordlengte(=3 bytes) + CRC(=2bytes), antwoord[2] = aantal gelezen bytes data
        if debug == 1:
            print("Aantal Bytes gelezen = ", AantalBytes)
        time.sleep(1) # drop the remaining bytes in the bit bucket
        fh = open ("/dev/ttyUSB0","wb")
        fh.write(opdracht) # since we know now how many bytes need to be read we reinssue the read command
        fh.close() # close serialport
        fh = open ("/dev/ttyUSB0","rb") # and reopen to read
        antwoord = fh.read(AantalBytes) # we found AantalBytes during our first read
        fh.close()
    #    print( antwoord)
        return antwoord; # ModbusCommando, the answer is read from the modbus client
    #
#Above the code I've made, I am a Newbee as you can see. and hopefully 
# can answer my question. 
#I send a ModBus request to the line together with the CRC 
# which I have confirmed to be correct. 
#(I everything ask the same question to the client) 
#The thing is the if I read more bytes than returned the line 
#keeps waiting 
#until the never coming byte(s) are read and the program does not #respond until I abort it and restart. 
#this is an undesirable situation. thanks, Chris 
...