wz2b fork and retry strategy

This commit is contained in:
Javier Peletier
2020-12-17 00:53:11 +01:00
parent 676ed34697
commit f393e77272
4 changed files with 24 additions and 5 deletions

1
go.mod
View File

@@ -9,4 +9,5 @@ require (
github.com/goburrow/modbus v0.1.0
github.com/goburrow/serial v0.1.0 // indirect
github.com/stretchr/testify v1.6.1
github.com/wz2b/modbus v0.1.1
)

2
go.sum
View File

@@ -17,6 +17,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/wz2b/modbus v0.1.1 h1:GB9KEI8r9TDKJLFoEg59nj9FcR5Q6Glg+7EoDG8OFaE=
github.com/wz2b/modbus v0.1.1/go.mod h1:p74iuj8ZYGmZpurWLgFN/dw5MAOlQDTCM8veQhH+7GU=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 h1:Jcxah/M+oLZ/R4/z5RzfPzGbPXnVDPkEDtf2JnuxN+U=
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=

View File

@@ -63,7 +63,7 @@ func main() {
DataBits: *modbusDataBits,
Parity: *modbusPortParity,
StopBits: *modbusStopBits,
Timeout: 5 * time.Second,
Timeout: 200 * time.Millisecond,
})
if err != nil {
log.Fatalf("Error initializing modbus: %s", err)

View File

@@ -1,10 +1,11 @@
package modbus
import (
"log"
"sync"
"time"
gmodbus "github.com/goburrow/modbus"
gmodbus "github.com/wz2b/modbus"
)
type Modbus interface {
@@ -55,9 +56,16 @@ func (mb *modbus) ReadRegister(slaveID byte, address uint16, quantity uint16) (r
return nil, err
}
defer mb.handler.Close()
results, err = mb.client.ReadHoldingRegisters(address-1, quantity)
retries := 5
for retries > 0 {
results, err = mb.client.ReadHoldingRegisters(address-1, quantity)
if err == nil {
break
}
retries--
log.Printf("Warning: Retried read due to %s\n", err)
}
return results, err
}
func (mb *modbus) WriteRegister(slaveID byte, address uint16, value uint16) (results []byte, err error) {
@@ -69,7 +77,15 @@ func (mb *modbus) WriteRegister(slaveID byte, address uint16, value uint16) (res
return nil, err
}
defer mb.handler.Close()
results, err = mb.client.WriteSingleRegister(address-1, value)
retries := 5
for retries > 0 {
results, err = mb.client.WriteSingleRegister(address-1, value)
if err == nil {
break
}
retries--
log.Printf("Warning: Retried write due to %s\n", err)
}
return results, err
}