From 7b1533b3e6e722e848efc159d0717f05e7588447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20S=C3=B6lver?= Date: Sat, 25 Feb 2023 13:04:25 +0100 Subject: [PATCH] Improve error messages, close conn on transactionID mismatch. --- client.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client.go b/client.go index 55954ed..668d578 100644 --- a/client.go +++ b/client.go @@ -76,6 +76,7 @@ func (m *Mbclient) ReadRegisters(first uint16, numRegs uint16) ([]uint16, error) binary.BigEndian.PutUint16(req[8:10], first-1) binary.BigEndian.PutUint16(req[10:12], numRegs) m.conn.SetDeadline(time.Now().Add(5 * time.Second)) + fmt.Printf("%x", req) byteswritten, err := m.conn.Write(req) if err != nil { m.closeConn() @@ -95,7 +96,7 @@ func (m *Mbclient) ReadRegisters(first uint16, numRegs uint16) ([]uint16, error) expectedDataLength := responseHeader.length - 1 if m.transactionCounter != responseHeader.transactionID { - m.t.Reset(0) + m.closeConn() return nil, fmt.Errorf("modbus transaction mismatch %v != %v", m.transactionCounter, responseHeader.transactionID) } response := make([]byte, expectedDataLength) @@ -112,7 +113,7 @@ func (m *Mbclient) ReadRegisters(first uint16, numRegs uint16) ([]uint16, error) err = mbpayload.unMarshal(response) if mbpayload.functionCode != 3 { m.t.Reset(m.keepAliveDuration) - return nil, fmt.Errorf("modbus exception %v req: %v", mbpayload.functionCode&0x7F, req) + return nil, fmt.Errorf("modbus exception %v req: %x", mbpayload.functionCode&0x7F, req) } if err != nil { m.t.Reset(m.keepAliveDuration)