Я написал свою собственную программу 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