modbustcp-client

go.mod

require (
    github.com/goburrow/modbus v0.1.0
    github.com/goburrow/serial v0.1.0 // indirect
)
package main

import (
    "log"
    "os"
    "time"

    "github.com/goburrow/modbus"
)

func main() {

    handler := modbus.NewTCPClientHandler("localhost:502")
    handler.Timeout = 10 * time.Second
    handler.SlaveId = 0 //SlaveId即modbustcp协议从0开始得第6字节称,在厂家协议中称为RTU地址无效字段,标准协议中如果是0则为广播地址
    handler.Logger = log.New(os.Stdout, "test: ", log.LstdFlags)
    // Connect manually so that multiple requests are handled in one connection session
    err := handler.Connect()
    if err != nil {
        log.Fatalf("连接错误:%+v", err)
    }
    defer handler.Close()

    // modbus.Tc
    // modbus.NewClient(handler)
    client := modbus.NewClient(handler)
    log.Printf("客户端:%+v", client)
    client.ReadHoldingRegisters(40001, 10)

    res, e1 := client.ReadHoldingRegisters(40001, 2)
    if e1 != nil {
        log.Fatalf("E1错误:%+v", e1)
    }
    log.Printf("资源内容1:%+v", res)
    res, _ = client.ReadHoldingRegisters(40000, 3)
    log.Printf("资源内容2:%+v", res)
    res, _ = client.ReadHoldingRegisters(40000, 3)
    log.Printf("资源内容3:%+v", res)
    res, _ = client.ReadHoldingRegisters(40000, 3)
    log.Printf("资源内容4:%+v", res)

    results1, err := client.ReadDiscreteInputs(15, 2)
    results2, err = client.WriteMultipleRegisters(1, 2, []byte{0, 3, 0, 4})

}