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 >)
- Host: GitHub
- URL: https://github.com/things-go/go-modbus
- Owner: things-go
- License: mit
- Archived: true
- Created: 2019-05-21T01:44:50.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-03-04T01:52:34.000Z (over 3 years ago)
- Last Synced: 2024-06-18T21:45:20.570Z (almost 2 years ago)
- Topics: go-modbus, modbus, modbus-ascii, modbus-master, modbus-rtu, modbus-slave, modbus-tcp
- Language: Go
- Homepage:
- Size: 185 KB
- Stars: 158
- Watchers: 3
- Forks: 58
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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.
[](https://godoc.org/github.com/things-go/go-modbus)
[](https://pkg.go.dev/github.com/things-go/go-modbus/v2?tab=doc)
[](https://codecov.io/gh/things-go/go-modbus)

[](https://goreportcard.com/report/github.com/things-go/go-modbus)
[](https://raw.githubusercontent.com/things-go/go-modbus/master/LICENSE)
[](https://github.com/things-go/go-modbus/tags)
[](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**

**WeChat Pay**
