(Archived)modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave.(WIP new implement
modbus write in pure go, support rtu,ascii,tcp master library,also support tcp slave.
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"
bit access:
16-bit access:
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)
}
}
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.
if package help you a lot,you can support us by:
Alipay
WeChat Pay