Skip to content

Commit

Permalink
增加特性需求
Browse files Browse the repository at this point in the history
  • Loading branch information
zongke committed Jun 19, 2022
1 parent a9e422f commit 71537c3
Show file tree
Hide file tree
Showing 6 changed files with 382 additions and 4 deletions.
2 changes: 2 additions & 0 deletions api.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ type Client interface {
// ReadHoldingRegisters reads the contents of a contiguous block of
// holding registers in a remote device and returns register value.
ReadHoldingRegisters(address, quantity uint16) (results []byte, err error)
ReadCustomRegisters(command string) (results []byte, err error)
// WriteSingleRegister writes a single holding register in a remote
// device and returns register value.
WriteSingleRegister(address, value uint16) (results []byte, err error)
Expand All @@ -48,5 +49,6 @@ type Client interface {
ReadFIFOQueue(address uint16) (results []byte, err error)

Connect() (err error)
IsConnect() (err error)
Close() (err error)
}
39 changes: 39 additions & 0 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package modbus
import (
"encoding/binary"
"fmt"
"k8s.io/klog/v2"
)

// ClientHandler is the interface that groups the Packager and Transporter methods.
Expand Down Expand Up @@ -123,6 +124,39 @@ func (mb *client) ReadHoldingRegisters(address, quantity uint16) (results []byte
return
}

func (mb *client) ReadCustomRegisters(command string) (results []byte, err error) {

request := ProtocolDataUnit{
Data: dataBlock(1, 1),
CustomCode: command,
}
aduRequest, err := mb.packager.Encode(&request)
if err != nil {
return
}
aduResponse, err := mb.transporter.Send(aduRequest)
if err != nil {
return
}
if err = mb.packager.Verify(aduRequest, aduResponse); err != nil {
return
}
response, err := mb.packager.Decode(aduResponse)
if err != nil {
return
}
if response.Data == nil || len(response.Data) == 0 {
// Empty response
err = fmt.Errorf("modbus: response data is empty")
return
}
if err != nil {
return
}
results = response.Data
return
}

// Request:
// Function code : 1 byte (0x04)
// Starting address : 2 bytes
Expand Down Expand Up @@ -435,6 +469,9 @@ func (mb *client) ReadFIFOQueue(address uint16) (results []byte, err error) {
func (mb *client) Connect() (err error) {
return mb.transporter.Connect()
}
func (mb *client) IsConnect() (err error) {
return mb.transporter.IsConnect()
}

func (mb *client) Close() (err error) {
return mb.transporter.Close()
Expand All @@ -448,10 +485,12 @@ func (mb *client) send(request *ProtocolDataUnit) (response *ProtocolDataUnit, e
if err != nil {
return
}
klog.V(1).Info("Send request:", aduRequest)
aduResponse, err := mb.transporter.Send(aduRequest)
if err != nil {
return
}
klog.V(1).Info("Send response:", aduResponse)
if err = mb.packager.Verify(aduRequest, aduResponse); err != nil {
return
}
Expand Down
Loading

0 comments on commit 71537c3

Please sign in to comment.