You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ntool-biz/nmodbus/handler/fn_inputregisters.go

37 lines
1.1 KiB
Go

package handler
import (
"git.noahlan.cn/noahlan/ntool-biz/nmodbus/protocol"
"git.noahlan.cn/noahlan/ntool-biz/nmodbus/serialize"
"git.noahlan.cn/noahlan/ntool-biz/nmodbus/util"
)
// ReadInputRegisters 读输入寄存器AO 功能码0x04
type ReadInputRegisters struct {
fnCode uint8
}
func NewReadInputRegisters(fnCode uint8) FunctionHandler {
return &ReadInputRegisters{fnCode: fnCode}
}
func (r *ReadInputRegisters) FnCode() uint8 {
return r.fnCode
}
// Function 读输入寄存器AO 功能码0x04
func (r *ReadInputRegisters) Function(s *Handler, req protocol.Packet, resp protocol.Packet) *protocol.MError {
register, numRegs, endRegister := serialize.RegisterAddressAndNumber(req.GetBody())
if endRegister > 65536 {
resp.SetBody([]byte{})
return &protocol.IllegalDataAddress
}
dataMgr := s.DataManager(req.GetAddress())
data := dataMgr.ReadInputRegisters(register, endRegister)
resp.SetBody(append([]byte{byte(numRegs * 2)}, util.Uint16ToBytes(s.byteOrder, data)...))
s.HandleLogic(r.fnCode, req, register, numRegs, data)
return &protocol.Success
}