試行の 20% で pymodbus.exceptions.ModbusIOException を受け取りました。
'[Input/Output] No Response received from the remote unit/Unable to decode response' fcode = 3
コードは QTimer イベントを介して呼び出され、この範囲を 30 ミリ秒から 5000 ミリ秒に変更しようとしましたが、同じ結果を受け取りました。残りの 80% の時間は、コードが意図したとおりに機能します。これはpythonのタイミングの問題ですか、それとも何か他のものですか?
def Start(self):
self.Client = self.Create("COM1")
self.MbTimer = QtCore.QTimer()
self.MbTimer.timeout.connect(self.OnTimer)
self.MbTimer.start(1000)
def Create(self,com):
client = ModbusSerialClient(method='rtu', port=com, timeout=1,baudrate=19200)
client.connect()
return client
def OnTimer(self):
value = self.Get(1)
print(value)
def Get(self,address):
try:
rr = self.Client.read_holding_registers(address,1,unit=1)
except Exception as e:
return None
if type(rr) == ModbusIOException:
if(rr.fcode == 3):
##This line is reached ~20% of attempts
return None
else:
raise Exception("not fcode 3:"+str(rr.fcode)+str(rr.message));
elif(type(rr) == pdu.ExceptionResponse):
return None
else:
value = float(rr.registers[0])
return value