# modbus **Repository Path**: barryzxy/modbus ## Basic Information - **Project Name**: modbus - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-23 - **Last Updated**: 2025-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go modbus ## NOTE: Archived, not maintain. ## NOTE: 已归档, 不再维护, 放弃License. 有需要的可以自由分发 modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave. 原始库来源于 https://github.com/barryzxy/modbus, 感谢原作者提供的框架, 我在此基础上做了部分修改, 主要是去掉了License限制, 方便自由分发. [![GoDoc](https://godoc.org/github.com/barryzxy/modbus?status.svg)](https://godoc.org/github.com/barryzxy/modbus) [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-blue?logo=go&logoColor=white)](https://pkg.go.dev/github.com/barryzxy/modbus/v2?tab=doc) [![codecov](https://codecov.io/gh/barryzxy/modbus/branch/master/graph/badge.svg)](https://codecov.io/gh/barryzxy/modbus) ![Action Status](https://github.com/barryzxy/modbus/workflows/Go/badge.svg) [![Go Report Card](https://goreportcard.com/badge/github.com/barryzxy/modbus)](https://goreportcard.com/report/github.com/barryzxy/modbus) [![Licence](https://img.shields.io/github/license/barryzxy/modbus)](https://raw.githubusercontent.com/barryzxy/modbus/master/LICENSE) [![Tag](https://img.shields.io/github/v/tag/barryzxy/modbus)](https://github.com/barryzxy/modbus/tags) [![Sourcegraph](https://sourcegraph.com/github.com/barryzxy/modbus/-/badge.svg)](https://sourcegraph.com/github.com/barryzxy/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 gitee.com/barryzxy/modbus ``` Then import the package into your own code. ```bash import modbus "gitee.com/barryzxy/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" "gitee.com/barryzxy/serial" modbus "gitee.com/barryzxy/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 "gitee.com/barryzxy/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 "gitee.com/barryzxy/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 modbus 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)