Skip to content
This repository was archived by the owner on Mar 4, 2023. It is now read-only.
/ go-modbus Public archive

(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 >)

License

Notifications You must be signed in to change notification settings

things-go/go-modbus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5e82d75 · Mar 4, 2023
Mar 8, 2022
Jun 16, 2021
Feb 24, 2022
Aug 30, 2020
Mar 8, 2022
Mar 4, 2023
Aug 30, 2020
Jun 24, 2020
Jul 16, 2019
Jun 28, 2021
Mar 8, 2022
Mar 8, 2022
Jun 16, 2021
Mar 8, 2022
Mar 8, 2022
Mar 8, 2022
Mar 8, 2022
Jun 16, 2021
Aug 30, 2020
Mar 14, 2020
Aug 30, 2020
Aug 29, 2020
May 25, 2021
Jul 3, 2020
Jun 16, 2021
Mar 8, 2022
Mar 14, 2020
Jun 16, 2021
Aug 30, 2020
Aug 30, 2020
Jun 16, 2021
May 21, 2019
Mar 8, 2022
Mar 8, 2022
Mar 8, 2022
Mar 13, 2020

Repository files navigation

go modbus

NOTE: Archived, not maintain.

NOTE: 已归档, 不再维护, 放弃License. 有需要的可以自由分发

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

GoDoc Go.Dev reference 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.

    go get github.com/things-go/go-modbus

Then import the package into your own code.

    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

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

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

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


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

WeChat Pay

wxpay