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.
|
|
|
|
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"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|