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 }