Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

github.com/grid-x/modbus

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/grid-x/modbus

  • v0.0.0-20241004123532-f6c6fb5201b3
  • Source
  • Go
  • Socket score

Version published
Created
Source

go modbus

Fault-tolerant, fail-fast implementation of Modbus protocol in Go.

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

Supported formats

  • TCP
  • Serial (RTU, ASCII)
  • UDP

Usage

Basic usage:

// Modbus TCP
client := modbus.TCPClient("localhost:502")
// Read input register 9
results, err := client.ReadInputRegisters(8, 1)

// Modbus RTU/ASCII
// Default configuration is 19200, 8, 1, even
client = modbus.RTUClient("/dev/ttyS0")
results, err = client.ReadCoils(2, 1)

Advanced usage:

// Modbus TCP
handler := modbus.NewTCPClientHandler("localhost:502")
handler.Timeout = 10 * time.Second
handler.SlaveID = 0xFF
handler.Logger = log.New(os.Stdout, "test: ", log.LstdFlags)
// Connect manually so that multiple requests are handled in one connection session
err := handler.Connect()
defer handler.Close()

client := modbus.NewClient(handler)
results, err := client.ReadDiscreteInputs(15, 2)
results, err = client.WriteMultipleRegisters(1, 2, []byte{0, 3, 0, 4})
results, err = client.WriteMultipleCoils(5, 10, []byte{4, 3})
// Modbus RTU/ASCII
handler := modbus.NewRTUClientHandler("/dev/ttyUSB0")
handler.BaudRate = 115200
handler.DataBits = 8
handler.Parity = "N"
handler.StopBits = 1
handler.SlaveID = 1
handler.Timeout = 5 * time.Second

err := handler.Connect()
defer handler.Close()

client := modbus.NewClient(handler)
results, err := client.ReadDiscreteInputs(15, 2)

Modbus-CLI

We offer a CLI tool to read/write registers.

Usage

For simplicity, the following examples are all using Modbus TCP. For Modbus RTU, replace the address field and use the rtu- arguments in order to use different baudrates, databits, etc.

./modbus-cli -address=rtu:///dev/ttyUSB0 -rtu-baudrate=57600 -rtu-stopbits=2 -rtu-parity=N -rtu-databits=8 ...

For Modbus UDP, replace the address field with a UDP address.

./modbus-cli --address=udp://127.0.0.1:502 ...

Reading Registers

Read 1 register and get raw result

./modbus-cli -address=tcp://127.0.0.1:502 -quantity=1 -type-parse=raw -register=42

Read 1 register and decode result as uint16

./modbus-cli -address=tcp://127.0.0.1:502 -quantity=1 -type-parse=uint16 -register=42

Read 1 register and get all possible decoded results

./modbus-cli -address=tcp://127.0.0.1:502 -quantity=1 -type-parse=all -register=42

Read 2 registers and decode result as uint32

./modbus-cli -address=tcp://127.0.0.1:502 -quantity=2 -type-parse=uint32 -register=42

Read 2 registers and get all possible decoded results

./modbus-cli -address=tcp://127.0.0.1:502 -quantity=2 -type-parse=all -register=42

Reading multiple registers is only possible in the raw format

./modbus-cli -address=tcp://127.0.0.1:502 -quantity=16 -type-parse=raw -register=42

Writing Registers

Write 1 register

./modbus-cli -address=tcp://127.0.0.1:502 -fn-code=0x06 -type-exec=uint16 -register=42 -write-value=7

Write 2 registers

./modbus-cli -address=tcp://127.0.0.1:502 -fn-code=0x10 -type-exec=uint32 -register=42 -write-value=7

Release

To release the Modbus-CLI tool, run either make release if you have installed goreleaser or make ci_release. The generated files can be found in the directory in the dist directory.

Take the .tar.gz and .zip files and create a new GitHub release.

References

  • Modbus Specifications and Implementation Guides

FAQs

Package last updated on 04 Oct 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc