自定义读取接口&自定义写入接口
This commit is contained in:
30
client.go
30
client.go
@@ -793,7 +793,7 @@ func (mc *ModbusClient) WriteRegisterWithRes(addr uint16, value uint16) (bytes [
|
||||
req.payload = append(req.payload, uint16ToBytes(mc.endianness, value)...)
|
||||
|
||||
// run the request across the transport and wait for a response
|
||||
res, err = mc.executeRequest(req)
|
||||
res, err = mc.executeRequestWithRes(req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -1205,7 +1205,7 @@ func (mc *ModbusClient) readRegistersWithFunctionCode(addr uint16, quantity uint
|
||||
// 16 * 16 * 40
|
||||
if quantity > 10240 {
|
||||
err = ErrUnexpectedParameters
|
||||
mc.logger.Error("quantity of registers exceeds 1024")
|
||||
mc.logger.Error("quantity of registers exceeds 10240")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1401,3 +1401,29 @@ func (mc *ModbusClient) executeRequest(req *pdu) (res *pdu, err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (mc *ModbusClient) executeRequestWithRes(req *pdu) (res *pdu, err error) {
|
||||
// send the request over the wire, wait for and decode the response
|
||||
res, err = mc.transport.ExecuteRequestWithRes(req)
|
||||
if err != nil {
|
||||
// map i/o timeouts to ErrRequestTimedOut
|
||||
if os.IsTimeout(err) {
|
||||
err = ErrRequestTimedOut
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// make sure the source unit id matches that of the request
|
||||
if (res.functionCode&0x80) == 0x00 && res.unitId != req.unitId {
|
||||
err = ErrBadUnitId
|
||||
return
|
||||
}
|
||||
// accept errors from gateway devices (using special unit id #255)
|
||||
if (res.functionCode&0x80) == 0x80 &&
|
||||
(res.unitId != req.unitId && res.unitId != 0xff) {
|
||||
err = ErrBadUnitId
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user