go modbus [![Build Status](https://travis-ci.org/goburrow/modbus.svg?branch=master)](https://travis-ci.org/goburrow/modbus) [![GoDoc](https://godoc.org/github.com/goburrow/modbus?status.svg)](https://godoc.org/github.com/goburrow/modbus) ========= Fault-tolerant, fail-fast implementation of Modbus protocol in Go. Supported functions ------------------- Bit access: * Read Discrete Inputs * Read Coils * Write Single Coil * Write Multiple Coils 16-bit access: * Read Input Registers * Read Holding Registers * Write Single Register * Write Multiple Registers * Read/Write Multiple Registers * Mask Write Register * Read FIFO Queue Supported formats ----------------- * TCP * Serial (RTU, ASCII) Usage ----- Basic usage: ```go // Modbus TCP client := modbus.TCPClient("localhost:502") // Read input register 9 results, err := client.ReadInputRegisters(8, 1) // Modbus RTU/ASCII // Default configuration is 19200, 8, 1, even client = modbus.RTUClient("/dev/ttyS0") results, err = client.ReadCoils(2, 1) ``` Advanced usage: ```go // Modbus TCP handler := modbus.NewTCPClientHandler("localhost:502") handler.Timeout = 10 * time.Second handler.SlaveId = 0xFF handler.Logger = log.New(os.Stdout, "test: ", log.LstdFlags) // Connect manually so that multiple requests are handled in one connection session err := handler.Connect() defer handler.Close() client := modbus.NewClient(handler) results, err := client.ReadDiscreteInputs(15, 2) results, err = client.WriteMultipleRegisters(1, 2, []byte{0, 3, 0, 4}) results, err = client.WriteMultipleCoils(5, 10, []byte{4, 3}) ``` ```go // Modbus RTU/ASCII handler := modbus.NewRTUClientHandler("/dev/ttyUSB0") handler.BaudRate = 115200 handler.DataBits = 8 handler.Parity = "N" handler.StopBits = 1 handler.SlaveId = 1 handler.Timeout = 5 * time.Second err := handler.Connect() defer handler.Close() client := modbus.NewClient(handler) results, err := client.ReadDiscreteInputs(15, 2) ``` References ---------- - [Modbus Specifications and Implementation Guides](http://www.modbus.org/specs.php)