Don't exit on max retries in updateRegisters, except on initial run

This commit is contained in:
Jarno Rankinen 2024-03-07 22:54:24 +02:00
parent ea8ca1a6df
commit 28a555fa2b
1 changed files with 14 additions and 8 deletions

View File

@ -32,6 +32,7 @@ type Pingvin struct {
buslock *sync.Mutex
handler *modbus.RTUClientHandler
modbusclient modbus.Client
firstReadDone bool
Debug PingvinLogger
}
@ -310,13 +311,18 @@ func (p *Pingvin) updateRegisters() {
if len(results) > 0 {
break
} else if retries == 4 {
log.Printf("ERROR: updateRegisters: max retries reached, giving up. client.ReadHoldingRegisters: ", err)
log.Printf("ERROR: updateRegisters: max retries reached, giving up. client.ReadHoldingRegisters: %v", err)
log.Printf("ERROR: error occurred when reading registers %d - %d", k, k+r-1)
if !p.firstReadDone {
panic("FATAL: Error on initial read")
}
return
} else if err != nil {
log.Printf("WARNING: updateRegisters: client.ReadHoldingRegisters attempt %d: %s", retries, err)
}
time.Sleep(200 * time.Millisecond)
}
p.firstReadDone = true
// The values represent 16 bit integers, but modbus works with bytes
// Each even byte of the returned []byte is the 8 MSBs of a new 16-bit
// value, so for each even byte in the reponse slice we bitshift the byte