Skip to content

Commit

Permalink
Add Read DeviceId function
Browse files Browse the repository at this point in the history
Function code 43 in modbus spec, can also be extended for CAN
  • Loading branch information
imr committed May 25, 2017
1 parent 9ffe737 commit c476ad3
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 0 deletions.
2 changes: 2 additions & 0 deletions api.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,6 @@ type Client interface {
//ReadFIFOQueue reads the contents of a First-In-First-Out (FIFO) queue
// of register in a remote device and returns FIFO value register.
ReadFIFOQueue(address uint16) (results []byte, err error)

ReadDeviceId(deviceid byte, objectid byte) (results []byte, err error)
}
17 changes: 17 additions & 0 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,23 @@ func (mb *client) ReadFIFOQueue(address uint16) (results []byte, err error) {
return
}

func (mb *client) ReadDeviceId(deviceid byte, objectid byte) (results []byte, err error) {
request := ProtocolDataUnit{
FunctionCode: FuncCodeReadDeviceId,
Data: []byte{MEITypeDeviceId, deviceid, objectid},
}
response, err := mb.send(&request)
if err != nil {
return
}
if len(response.Data) < 7 {
err = fmt.Errorf("modbus: response data size '%v' is less than minimum '%v'", len(response.Data), 7)
return
}
results = response.Data[2:]
return
}

// Helpers

// send sends request and checks possible exception in the response.
Expand Down
6 changes: 6 additions & 0 deletions modbus.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ const (
FuncCodeReadWriteMultipleRegisters = 23
FuncCodeMaskWriteRegister = 22
FuncCodeReadFIFOQueue = 24
FuncCodeReadDeviceId = 43
)

const (
MEITypeCANopen = 13
MEITypeDeviceId = 14
)

const (
Expand Down

0 comments on commit c476ad3

Please sign in to comment.