cleanup, comments, tests

This commit is contained in:
Javier Peletier
2020-12-21 18:35:58 +01:00
parent e1984ddf62
commit 73bb3cae89
16 changed files with 7517 additions and 657 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ type Mock struct {
State map[byte][]uint16
}
func NewMock() Modbus {
func NewMock() *Mock {
return &Mock{
State: map[byte][]uint16{
49: {3, 68, 41, 41, 3, 68, 41, 41, 3, 68, 41, 45, 3, 68, 41, 45, 3, 68, 41, 42, 3, 52, 41, 40, 3, 52, 41, 44, 3, 68, 41, 41, 3, 68, 41, 40, 3, 68, 41, 41, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 3, 4, 2, 49, 3, 7, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+7 -13
View File
@@ -10,12 +10,6 @@ import (
gmodbus "github.com/wz2b/modbus"
)
type Modbus interface {
ReadRegister(slaveID byte, address uint16, quantity uint16) (results []uint16, err error)
WriteRegister(slaveID byte, address uint16, value uint16) (results []uint16, err error)
Close() error
}
type Config struct {
Port string
BaudRate int
@@ -25,7 +19,7 @@ type Config struct {
Timeout time.Duration
}
type modbus struct {
type Modbus struct {
handler *gmodbus.RTUClientHandler
client gmodbus.Client
lock sync.RWMutex
@@ -37,7 +31,7 @@ func throttle(ms int) {
var ErrIncorrectResultSize = errors.New("Incorrect number of results returned")
func New(config *Config) (Modbus, error) {
func New(config *Config) (*Modbus, error) {
handler := gmodbus.NewRTUClientHandler(config.Port)
handler.BaudRate = config.BaudRate
handler.DataBits = config.DataBits
@@ -45,13 +39,13 @@ func New(config *Config) (Modbus, error) {
handler.StopBits = config.StopBits
handler.Timeout = config.Timeout
return &modbus{
return &Modbus{
handler: handler,
client: gmodbus.NewClient(handler),
}, handler.Connect()
}
func (mb *modbus) Close() error {
func (mb *Modbus) Close() error {
return mb.handler.Close()
}
@@ -66,7 +60,7 @@ func parseResults(r []byte, quantity uint16) ([]uint16, error) {
return results, nil
}
func (mb *modbus) ReadRegister(slaveID byte, address uint16, quantity uint16) (results []uint16, err error) {
func (mb *Modbus) ReadRegister(slaveID byte, address uint16, quantity uint16) (results []uint16, err error) {
err = mb.try(slaveID, func() (err error) {
r, err := mb.client.ReadHoldingRegisters(address-1, quantity)
if err != nil {
@@ -78,7 +72,7 @@ func (mb *modbus) ReadRegister(slaveID byte, address uint16, quantity uint16) (r
return results, err
}
func (mb *modbus) WriteRegister(slaveID byte, address uint16, value uint16) (results []uint16, err error) {
func (mb *Modbus) WriteRegister(slaveID byte, address uint16, value uint16) (results []uint16, err error) {
err = mb.try(slaveID, func() (err error) {
r, err := mb.client.WriteSingleRegister(address-1, value)
if err != nil {
@@ -90,7 +84,7 @@ func (mb *modbus) WriteRegister(slaveID byte, address uint16, value uint16) (res
return results, err
}
func (mb *modbus) try(slaveID byte, f func() error) (err error) {
func (mb *Modbus) try(slaveID byte, f func() error) (err error) {
mb.lock.Lock()
defer mb.lock.Unlock()
defer throttle(100)