An open API service indexing awesome lists of open source software.

https://github.com/things-go/go-modbus

(Archived)modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave.(WIP new implement<old: https://github.com/thinkgos/gomodbus >)
https://github.com/things-go/go-modbus

go-modbus modbus modbus-ascii modbus-master modbus-rtu modbus-slave modbus-tcp

Last synced: 5 months ago
JSON representation

(Archived)modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave.(WIP new implement<old: https://github.com/thinkgos/gomodbus >)

Awesome Lists containing this project

README

          

# go modbus
## NOTE: Archived, not maintain.
## NOTE: 已归档, 不再维护, 放弃License. 有需要的可以自由分发
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)
[![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 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
go-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)