项目作者: thinkgos

项目描述 :
:smirk: modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave.
高级语言: Go
项目地址: git://github.com/thinkgos/gomodbus.git
创建时间: 2019-05-21T01:44:50Z
项目社区:https://github.com/thinkgos/gomodbus

开源协议:GNU Lesser General Public License v3.0

下载


go modbus

modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave.

GoDoc
Go.Dev reference
Build Status
codecov
Action Status
Go Report Card
Licence
Tag
Sourcegraph

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.

  1. go get github.com/thinkgos/gomodbus/v2

Then import the modbus package into your own code.

  1. import modbus "github.com/thinkgos/gomodbus/v2"

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

  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/goburrow/serial"
  6. modbus "github.com/thinkgos/gomodbus/v2"
  7. )
  8. func main() {
  9. p := modbus.NewRTUClientProvider(modbus.WithEnableLogger(),
  10. modbus.WithSerialConfig(serial.Config{
  11. Address: "/dev/ttyUSB0",
  12. BaudRate: 115200,
  13. DataBits: 8,
  14. StopBits: 1,
  15. Parity: "N",
  16. Timeout: modbus.SerialDefaultTimeout,
  17. }))
  18. client := modbus.NewClient(p)
  19. err := client.Connect()
  20. if err != nil {
  21. fmt.Println("connect failed, ", err)
  22. return
  23. }
  24. defer client.Close()
  25. fmt.Println("starting")
  26. for {
  27. _, err := client.ReadCoils(3, 0, 10)
  28. if err != nil {
  29. fmt.Println(err.Error())
  30. }
  31. // fmt.Printf("ReadDiscreteInputs %#v\r\n", results)
  32. time.Sleep(time.Second * 2)
  33. }
  34. }

modbus TCP client see example

  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. modbus "github.com/thinkgos/gomodbus/v2"
  6. )
  7. func main() {
  8. p := modbus.NewTCPClientProvider("192.168.199.188:502", modbus.WithEnableLogger())
  9. client := modbus.NewClient(p)
  10. err := client.Connect()
  11. if err != nil {
  12. fmt.Println("connect failed, ", err)
  13. return
  14. }
  15. defer client.Close()
  16. fmt.Println("starting")
  17. for {
  18. _, err := client.ReadCoils(1, 0, 10)
  19. if err != nil {
  20. fmt.Println(err.Error())
  21. }
  22. // fmt.Printf("ReadDiscreteInputs %#v\r\n", results)
  23. time.Sleep(time.Second * 2)
  24. }
  25. }

modbus TCP server see example

  1. package main
  2. import (
  3. modbus "github.com/thinkgos/gomodbus/v2"
  4. )
  5. func main() {
  6. srv := modbus.NewTCPServer()
  7. srv.LogMode(true)
  8. srv.AddNodes(
  9. modbus.NewNodeRegister(
  10. 1,
  11. 0, 10, 0, 10,
  12. 0, 10, 0, 10),
  13. modbus.NewNodeRegister(
  14. 2,
  15. 0, 10, 0, 10,
  16. 0, 10, 0, 10),
  17. modbus.NewNodeRegister(
  18. 3,
  19. 0, 10, 0, 10,
  20. 0, 10, 0, 10))
  21. err := srv.ListenAndServe(":502")
  22. if err != nil {
  23. panic(err)
  24. }
  25. }

References


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

WeChat Pay

wxpay