Documentation ¶
Overview ¶
Package modbus provides a client for MODBUS TCP and RTU/ASCII.
Index ¶
- Constants
- type ASCIIClientHandler
- func (mb *ASCIIClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
- func (mb *ASCIIClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
- func (mb *ASCIIClientHandler) Send(aduRequest []byte) (aduResponse []byte, err error)
- func (mb *ASCIIClientHandler) Verify(aduRequest []byte, aduResponse []byte) (err error)
- type ASCIIOverTCPClientHandler
- func (mb *ASCIIOverTCPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
- func (mb *ASCIIOverTCPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
- func (mb *ASCIIOverTCPClientHandler) Send(aduRequest []byte) (aduResponse []byte, err error)
- func (mb *ASCIIOverTCPClientHandler) Verify(aduRequest []byte, aduResponse []byte) (err error)
- type ASCIIUDPClientHandler
- func (mb *ASCIIUDPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
- func (mb *ASCIIUDPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
- func (mb *ASCIIUDPClientHandler) Send(aduRequest []byte) (aduResponse []byte, err error)
- func (mb *ASCIIUDPClientHandler) Verify(aduRequest []byte, aduResponse []byte) (err error)
- type Client
- func ASCIIClient(address string) Client
- func ASCIIOverTCPClient(address string) Client
- func ASCIIUDPClient(address string, SlaveID int) Client
- func NewClient(handler ClientHandler) Client
- func NewClient2(packager Packager, transporter Transporter) Client
- func RTUClient(address string) Client
- func RTUOverTCPClient(address string) Client
- func RTUUDPClient(address string, SlaveID int) Client
- func TCPClient(address string) Client
- type ClientHandler
- type MbError
- type Packager
- type ProtocolDataUnit
- type RTUClientHandler
- func (mb *RTUClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
- func (mb *RTUClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
- func (mb *RTUClientHandler) Send(aduRequest []byte) (aduResponse []byte, err error)
- func (mb *RTUClientHandler) Verify(aduRequest []byte, aduResponse []byte) (err error)
- type RTUOverTCPClientHandler
- func (mb *RTUOverTCPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
- func (mb *RTUOverTCPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
- func (mb *RTUOverTCPClientHandler) Send(aduRequest []byte) (aduResponse []byte, err error)
- func (mb *RTUOverTCPClientHandler) Verify(aduRequest []byte, aduResponse []byte) (err error)
- type RTUUDPClientHandler
- func (mb *RTUUDPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
- func (mb *RTUUDPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
- func (mb *RTUUDPClientHandler) Send(aduRequest []byte) (aduResponse []byte, err error)
- func (mb *RTUUDPClientHandler) Verify(aduRequest []byte, aduResponse []byte) (err error)
- type TCPClientHandler
- func (mb *TCPClientHandler) Close() error
- func (mb *TCPClientHandler) Connect() error
- func (mb *TCPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
- func (mb *TCPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
- func (mb *TCPClientHandler) Send(aduRequest []byte) (aduResponse []byte, err error)
- func (mb *TCPClientHandler) Verify(aduRequest []byte, aduResponse []byte) (err error)
- type Transporter
Constants ¶
const ( FuncCodeReadDiscreteInputs = 2 FuncCodeReadCoils = 1 FuncCodeWriteSingleCoil = 5 FuncCodeWriteMultipleCoils = 15 // 16-bit access FuncCodeReadInputRegisters = 4 FuncCodeReadHoldingRegisters = 3 FuncCodeWriteSingleRegister = 6 FuncCodeWriteMultipleRegisters = 16 FuncCodeReadWriteMultipleRegisters = 23 FuncCodeMaskWriteRegister = 22 FuncCodeReadFIFOQueue = 24 )
Bit access
const ( ExceptionCodeIllegalFunction = 1 ExceptionCodeIllegalDataAddress = 2 ExceptionCodeIllegalDataValue = 3 ExceptionCodeServerDeviceFailure = 4 ExceptionCodeAcknowledge = 5 ExceptionCodeServerDeviceBusy = 6 ExceptionCodeMemoryParityError = 8 ExceptionCodeGatewayTargetDeviceFailedToRespond = 11 )
ExceptionCode
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ASCIIClientHandler ¶
type ASCIIClientHandler struct {
// contains filtered or unexported fields
}
ASCIIClientHandler implements Packager and Transporter interface.
func NewASCIIClientHandler ¶
func NewASCIIClientHandler(address string) *ASCIIClientHandler
NewASCIIClientHandler allocates and initializes a ASCIIClientHandler.
func (*ASCIIClientHandler) Decode ¶
func (mb *ASCIIClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
Decode extracts PDU from ASCII frame and verify LRC.
func (*ASCIIClientHandler) Encode ¶
func (mb *ASCIIClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
Encode encodes PDU in a ASCII frame:
Start : 1 char Address : 2 chars Function : 2 chars Data : 0 up to 2x252 chars LRC : 2 chars End : 2 chars
type ASCIIOverTCPClientHandler ¶ added in v0.2.2
type ASCIIOverTCPClientHandler struct {
// contains filtered or unexported fields
}
ASCIIOverTCPClientHandler implements Packager and Transporter interface.
func NewASCIIOverTCPClientHandler ¶ added in v0.2.2
func NewASCIIOverTCPClientHandler(address string) *ASCIIOverTCPClientHandler
NewASCIIOverTCPClientHandler allocates and initializes a ASCIIOverTCPClientHandler.
func (*ASCIIOverTCPClientHandler) Decode ¶ added in v0.2.2
func (mb *ASCIIOverTCPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
Decode extracts PDU from ASCII frame and verify LRC.
func (*ASCIIOverTCPClientHandler) Encode ¶ added in v0.2.2
func (mb *ASCIIOverTCPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
Encode encodes PDU in a ASCII frame:
Start : 1 char Address : 2 chars Function : 2 chars Data : 0 up to 2x252 chars LRC : 2 chars End : 2 chars
type ASCIIUDPClientHandler ¶ added in v0.2.2
type ASCIIUDPClientHandler struct {
// contains filtered or unexported fields
}
ASCIIUDPClientHandler implements Packager and Transporter interface.
func NewASCIIUDPClientHandler ¶ added in v0.2.2
func NewASCIIUDPClientHandler(address string) *ASCIIUDPClientHandler
NewASCIIUDPClientHandler allocates and initializes a ASCIIClientHandler. The address format is ip:port
func (*ASCIIUDPClientHandler) Decode ¶ added in v0.2.2
func (mb *ASCIIUDPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
Decode extracts PDU from ASCII frame and verify LRC.
func (*ASCIIUDPClientHandler) Encode ¶ added in v0.2.2
func (mb *ASCIIUDPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
Encode encodes PDU in a ASCII frame:
Start : 1 char Address : 2 chars Function : 2 chars Data : 0 up to 2x252 chars LRC : 2 chars End : 2 chars
type Client ¶
type Client interface { // ReadCoils reads from 1 to 2000 contiguous status of coils in a // remote device and returns coil status. ReadCoils(address, quantity uint16) (results []byte, err error) // ReadDiscreteInputs reads from 1 to 2000 contiguous status of // discrete inputs in a remote device and returns input status. ReadDiscreteInputs(address, quantity uint16) (results []byte, err error) // WriteSingleCoil write a single output to either ON or OFF in a // remote device and returns output value. WriteSingleCoil(address, value uint16) (results []byte, err error) // WriteMultipleCoils forces each coil in a sequence of coils to either // ON or OFF in a remote device and returns quantity of outputs. WriteMultipleCoils(address, quantity uint16, value []byte) (results []byte, err error) // ReadInputRegisters reads from 1 to 125 contiguous input registers in // a remote device and returns input registers. ReadInputRegisters(address, quantity uint16) (results []byte, err error) // ReadHoldingRegisters reads the contents of a contiguous block of // holding registers in a remote device and returns register value. ReadHoldingRegisters(address, quantity uint16) (results []byte, err error) // WriteSingleRegister writes a single holding register in a remote // device and returns register value. WriteSingleRegister(address, value uint16) (results []byte, err error) // WriteMultipleRegisters writes a block of contiguous registers // (1 to 123 registers) in a remote device and returns quantity of // registers. WriteMultipleRegisters(address, quantity uint16, value []byte) (results []byte, err error) // ReadWriteMultipleRegisters performs a combination of one read // operation and one write operation. It returns read registers value. ReadWriteMultipleRegisters(readAddress, readQuantity, writeAddress, writeQuantity uint16, value []byte) (results []byte, err error) // MaskWriteRegister modify the contents of a specified holding // register using a combination of an AND mask, an OR mask, and the // register's current contents. The function returns // AND-mask and OR-mask. MaskWriteRegister(address, andMask, orMask uint16) (results []byte, err error) //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) }
Client ...
func ASCIIClient ¶
ASCIIClient creates ASCII client with default handler and given connect string.
func ASCIIOverTCPClient ¶ added in v0.2.2
ASCIIOverTCPClient creates ASCII over TCP client with default handler and given connect string.
func ASCIIUDPClient ¶ added in v0.2.2
ASCIIUDPClient creates ASCII client with default handler and given connect string.
func NewClient ¶
func NewClient(handler ClientHandler) Client
NewClient creates a new modbus client with given backend handler.
func NewClient2 ¶
func NewClient2(packager Packager, transporter Transporter) Client
NewClient2 creates a new modbus client with given backend packager and transporter.
func RTUOverTCPClient ¶ added in v0.2.2
RTUOverTCPClient creates RTU over TCP client with default handler and given connect string.
func RTUUDPClient ¶ added in v0.2.2
RTUUDPClient creates RTU client with default handler and given connect string.
type ClientHandler ¶
type ClientHandler interface { Packager Transporter }
ClientHandler is the interface that groups the Packager and Transporter methods.
type Packager ¶
type Packager interface { Encode(pdu *ProtocolDataUnit) (adu []byte, err error) Decode(adu []byte) (pdu *ProtocolDataUnit, err error) Verify(aduRequest []byte, aduResponse []byte) (err error) }
Packager specifies the communication layer.
type ProtocolDataUnit ¶
ProtocolDataUnit (PDU) is independent of underlying communication layers.
type RTUClientHandler ¶
type RTUClientHandler struct {
// contains filtered or unexported fields
}
RTUClientHandler implements Packager and Transporter interface.
func NewRTUClientHandler ¶
func NewRTUClientHandler(address string) *RTUClientHandler
NewRTUClientHandler allocates and initializes a RTUClientHandler.
func (*RTUClientHandler) Decode ¶
func (mb *RTUClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
Decode extracts PDU from RTU frame and verify CRC.
func (*RTUClientHandler) Encode ¶
func (mb *RTUClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
Encode encodes PDU in a RTU frame:
Slave Address : 1 byte Function : 1 byte Data : 0 up to 252 bytes CRC : 2 byte
type RTUOverTCPClientHandler ¶ added in v0.2.2
type RTUOverTCPClientHandler struct {
// contains filtered or unexported fields
}
RTUOverTCPClientHandler implements Packager and Transporter interface.
func NewRTUOverTCPClientHandler ¶ added in v0.2.2
func NewRTUOverTCPClientHandler(address string) *RTUOverTCPClientHandler
NewRTUOverTCPClientHandler allocates and initializes a RTUOverTCPClientHandler.
func (*RTUOverTCPClientHandler) Decode ¶ added in v0.2.2
func (mb *RTUOverTCPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
Decode extracts PDU from RTU frame and verify CRC.
func (*RTUOverTCPClientHandler) Encode ¶ added in v0.2.2
func (mb *RTUOverTCPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
Encode encodes PDU in a RTU frame:
Slave Address : 1 byte Function : 1 byte Data : 0 up to 252 bytes CRC : 2 byte
type RTUUDPClientHandler ¶ added in v0.2.2
type RTUUDPClientHandler struct {
// contains filtered or unexported fields
}
RTUUDPClientHandler implements Packager and Transporter interface.
func NewRTUUDPClientHandler ¶ added in v0.2.2
func NewRTUUDPClientHandler(address string) *RTUUDPClientHandler
NewRTUUDPClientHandler allocates and initializes a RTUUDPClientHandler. The address format is ip:port
func (*RTUUDPClientHandler) Decode ¶ added in v0.2.2
func (mb *RTUUDPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
Decode extracts PDU from RTU frame and verify CRC.
func (*RTUUDPClientHandler) Encode ¶ added in v0.2.2
func (mb *RTUUDPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
Encode encodes PDU in a RTU frame:
Slave Address : 1 byte Function : 1 byte Data : 0 up to 252 bytes CRC : 2 byte
type TCPClientHandler ¶
type TCPClientHandler struct {
// contains filtered or unexported fields
}
TCPClientHandler implements Packager and Transporter interface.
func NewTCPClientHandler ¶
func NewTCPClientHandler(address string) *TCPClientHandler
NewTCPClientHandler allocates a new TCPClientHandler.
func (*TCPClientHandler) Close ¶
func (mb *TCPClientHandler) Close() error
Close closes current connection.
func (*TCPClientHandler) Connect ¶
func (mb *TCPClientHandler) Connect() error
Connect establishes a new connection to the address in Address. Connect and Close are exported so that multiple requests can be done with one session
func (*TCPClientHandler) Decode ¶
func (mb *TCPClientHandler) Decode(adu []byte) (pdu *ProtocolDataUnit, err error)
Decode extracts PDU from TCP frame:
Transaction identifier: 2 bytes Protocol identifier: 2 bytes Length: 2 bytes Unit identifier: 1 byte
func (*TCPClientHandler) Encode ¶
func (mb *TCPClientHandler) Encode(pdu *ProtocolDataUnit) (adu []byte, err error)
Encode adds modbus application protocol header:
Transaction identifier: 2 bytes Protocol identifier: 2 bytes Length: 2 bytes Unit identifier: 1 byte Function code: 1 byte Data: n bytes
type Transporter ¶
Transporter specifies the transport layer.