Skip to content

canghai908/gomodbus

Repository files navigation

go modbus

NOTE: mb package move to mb

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.

    go get github.com/canghai908/gomodbus/v2

Then import the modbus package into your own code.

    import modbus "github.com/canghai908/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


	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 {
		results, err := client.ReadCoils(1, 0, 10)
		if err != nil {
			fmt.Println(err.Error())
		} else {
			fmt.Printf("ReadCoils % x", results)
		}
		time.Sleep(time.Second * 5)
	}
    // modbus RTU/ASCII Client
	p := modbus.NewRTUClientProvider(modbus.WithEnableLogger(),
		modbus.WithSerialConfig(serial.Config{
			Address:  "COM5",
			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 {
		results, err := client.ReadCoils(1, 0, 10)
		if err != nil {
			fmt.Println(err.Error())
		} else {
			fmt.Printf("ReadDiscreteInputs %#v\r\n", results)
		}
		time.Sleep(time.Second * 5)
	}
    // modbus TCP Server
	srv := modbus.NewTCPServer(":502")
	srv.Logger = log.New(os.Stdout, "modbus", log.Ltime)
	srv.LogMode(true)

	srv.AddNode(modbus.NewNodeRegister(
		1,
		0, 10, 0, 10, 
		0, 10, 0, 10,
	))
	err := srv.ListenAndServe(":502")
	if err != nil {
		panic(err)
	}

References


Donation

if package help you a lot,you can support us by:

Alipay

alipay

WeChat Pay

wxpay

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published