# go-modbus **Repository Path**: code-liufl/go-modbus ## Basic Information - **Project Name**: go-modbus - **Description**: No description available - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-20 - **Last Updated**: 2021-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go modbus modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave. [![GoDoc](https://godoc.org/github.com/things-go/go-modbus?status.svg)](https://godoc.org/github.com/things-go/go-modbus) [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-blue?logo=go&logoColor=white)](https://pkg.go.dev/github.com/things-go/go-modbus/v2?tab=doc) [![Build Status](https://www.travis-ci.com/things-go/go-modbus.svg?branch=master)](https://www.travis-ci.com/things-go/go-modbus) [![codecov](https://codecov.io/gh/things-go/go-modbus/branch/master/graph/badge.svg)](https://codecov.io/gh/things-go/go-modbus) ![Action Status](https://github.com/things-go/go-modbus/workflows/Go/badge.svg) [![Go Report Card](https://goreportcard.com/badge/github.com/things-go/go-modbus)](https://goreportcard.com/report/github.com/things-go/go-modbus) [![Licence](https://img.shields.io/github/license/things-go/go-modbus)](https://raw.githubusercontent.com/things-go/go-modbus/master/LICENSE) [![Tag](https://img.shields.io/github/v/tag/things-go/go-modbus)](https://github.com/things-go/go-modbus/tags) [![Sourcegraph](https://sourcegraph.com/github.com/things-go/go-modbus/-/badge.svg)](https://sourcegraph.com/github.com/things-go/go-modbus?badge) ### Supported formats - modbus Serial(RTU,ASCII) Client - modbus TCP Client - modbus TCP Server ### Features - object pool design,reduce memory allocation - fast encode and decode - interface design - simple API and support raw data api ### Installation Use go get. ```bash go get github.com/things-go/go-modbus ``` Then import the modbus package into your own code. ```bash import modbus "github.com/things-go/go-modbus" ``` ### 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 ### Example --- modbus RTU/ASCII client see [example](_examples/client_rtu_ascii) [embedmd]:# (_examples/client_rtu_ascii/main.go go) ```go package main import ( "fmt" "time" "github.com/goburrow/serial" modbus "github.com/things-go/go-modbus" ) func main() { p := modbus.NewRTUClientProvider(modbus.WithEnableLogger(), modbus.WithSerialConfig(serial.Config{ Address: "/dev/ttyUSB0", BaudRate: 115200, DataBits: 8, StopBits: 1, Parity: "N", Timeout: modbus.SerialDefaultTimeout, })) client := modbus.NewClient(p) err := client.Connect() if err != nil { fmt.Println("connect failed, ", err) return } defer client.Close() fmt.Println("starting") for { _, err := client.ReadCoils(3, 0, 10) if err != nil { fmt.Println(err.Error()) } // fmt.Printf("ReadDiscreteInputs %#v\r\n", results) time.Sleep(time.Second * 2) } } ``` modbus TCP client see [example](_examples/client_tcp) [embedmd]:# (_examples/client_tcp/main.go go) ```go package main import ( "fmt" "time" modbus "github.com/things-go/go-modbus" ) func main() { p := modbus.NewTCPClientProvider("192.168.199.188:502", modbus.WithEnableLogger()) client := modbus.NewClient(p) err := client.Connect() if err != nil { fmt.Println("connect failed, ", err) return } defer client.Close() fmt.Println("starting") for { _, err := client.ReadCoils(1, 0, 10) if err != nil { fmt.Println(err.Error()) } // fmt.Printf("ReadDiscreteInputs %#v\r\n", results) time.Sleep(time.Second * 2) } } ``` modbus TCP server see [example](_examples/server_tcp) [embedmd]:# (_examples/server_tcp/main.go go) ```go package main import ( modbus "github.com/things-go/go-modbus" ) func main() { srv := modbus.NewTCPServer() srv.LogMode(true) srv.AddNodes( modbus.NewNodeRegister( 1, 0, 10, 0, 10, 0, 10, 0, 10), modbus.NewNodeRegister( 2, 0, 10, 0, 10, 0, 10, 0, 10), modbus.NewNodeRegister( 3, 0, 10, 0, 10, 0, 10, 0, 10)) err := srv.ListenAndServe(":502") if err != nil { panic(err) } } ``` ### References --- - [Modbus Specifications and Implementation Guides](http://www.modbus.org/specs.php) - [goburrow](https://github.com/goburrow/modbus) ### JetBrains OS licenses gomodbus had been being developed with GoLand under the free JetBrains Open Source license(s) granted by JetBrains s.r.o., hence I would like to express my thanks here. ### Donation if package help you a lot,you can support us by: **Alipay** ![alipay](https://github.com/thinkgos/thinkgos/blob/master/asserts/alipay.jpg) **WeChat Pay** ![wxpay](https://github.com/thinkgos/thinkgos/blob/master/asserts/wxpay.jpg)