Golang学习日志 ━━ golang开发modbus-rtu通信

本学习库所用gomodbus包的原作者已经停止更新,本文所涉及代码仅提供解决思路
https://github.com/things-go/go-modbus/tree/master

在这里插入图片描述
也可以在该作者下使用更新的版本:
https://blog.csdn.net/lishuangquan1987/article/details/123441211

go modbus V2版

这里开始是thinkgos,之前是things-go

1、下载地址

https://github.com/thinkgos/gomodbus

下面使用官方示例进行测试

2、Server代码

生成文件 server.exe

package main

import (
	modbus "github.com/thinkgos/gomodbus/v2"
)

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

3、Client代码

生成文件 client.exe

package main

import (
	"fmt"
	"time"

	modbus "github.com/thinkgos/gomodbus/v2"
)

func main() {
	p := modbus.NewTCPClientProvider("127.0.0.1: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)
	}
}

4、操作

单机测试时,先运行 server.exe,再运行 client.exe(本示例中如果server.exe未运行,client.exe界面将直接关闭)

运行如图:
在这里插入图片描述


转载学习

2021.12.04
以下文章为2020年所转载,使用Virtual Serial Port Driver 和 modbus-slave 软件测试及 gomodbus v1版本的代码。原文详见下方链接。

用到的gomodbus包是坛友slzm40编写和共享的,感谢他的无私分享,本帖只是抛砖引玉,将我自己学习的一些经历分享给大家;有关modbus包可以直接向slzm40请教或一起讨论;

1、创建工程,导入modbus包

包地址"github.com/thinkgos/gomodbus";

2、打开虚拟串口

添加一对虚拟串口
在这里插入图片描述

3、打开modbus-slave软件

打开modbus-slave从机软件,用来测试从机;
需要注意设置通信地址和读取寄存器的地址和数量;
在这里插入图片描述

4、运行代码

查看可用串口,因为虚拟串口选择com1和com2,虚拟中我选择使用/dev/ttyS1
在这里插入图片描述

编译运行,会提示串口打开失败,这是因为linux对设备的权限做了限制
在这里插入图片描述

获取串口读写、运行等权限
在这里插入图片描述

5、测试ok

在这里插入图片描述

图5.1
我们已经能正确读取03寄存器的值;其他功能可以自行测试;

package main

import (
	"fmt"
	modbus "github.com/thinkgos/gomodbus"
	"github.com/thinkgos/mb" //原文是"github.com/thinkgos/gomodbus/mb"
	"time"
)

func main() {
	//调用RTUClientProvider的构造函数,返回结构体指针
	p := modbus.NewRTUClientProvider()
	p.Address = "/dev/ttyS1"
	p.BaudRate = 115200
	p.DataBits = 8
	p.Parity = "N"
	p.StopBits = 1
	p.Timeout = 100 * time.Millisecond

	client := mb.NewClient(p)
	client.LogMode(true)
	err := client.Start()

	if err != nil {
		fmt.Println("start err,", err)
		return
	}

	for {
		value, err := client.ReadHoldingRegisters(1, 1, 3)
		if err != nil {
			fmt.Println("readHoldErr,", err)
		} else {
			fmt.Printf("%#v\n", value)
		}
		time.Sleep(time.Second * 3)
	}
}

转自:https://www.jianshu.com/p/d03e3b55e0d2

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 39
    评论
学习 Golang 后端开发需要掌握以下几个方面: 1. Golang 语言基础:学习 Golang 的语法、数据类型、控制流、函数、接口等基础知识。 2. Web 开发框架:了解 Golang 常用的 Web 开发框架,如 Gin、Echo、Beego 等。 3. 数据库操作:学习 Golang 如何操作 MySQL、PostgreSQL、MongoDB 等数据库。 4. 缓存技术:了解 Redis 等常用缓存技术的使用和优化。 5. 消息队列:学习消息队列的使用,如 RabbitMQ、Kafka 等。 6. 微服务架构:了解微服务架构的设计和实现方式,如 gRPC、Consul、Zookeeper 等。 7. 安全性:了解如何保证 Golang 后端应用的安全性,包括数据传输的加密、防止 SQL 注入、XSS 攻击等。 具体的学习路线可以按照以下步骤进行: 1. 先学习 Golang 基础知识,可以参考《Go 语言圣经》或《Go 语言编程》等经典教材。 2. 掌握 Web 开发框架,可以从 Gin 或 Echo 开始,掌握基本的 API 开发方式。 3. 学习数据库操作,可以从 MySQL 开始,了解如何使用 Golang 连接数据库、执行 SQL 语句等。 4. 学习缓存技术和消息队列,可以从 Redis 和 RabbitMQ 开始,了解如何使用这些技术提高系统性能和可靠性。 5. 学习微服务架构,可以了解如何使用 gRPC、Consul、Zookeeper 等工具实现微服务架构。 6. 学习安全性,可以了解如何使用 TLS 加密数据传输、如何防止 SQL 注入、XSS 攻击等常见安全问题。 以上是一个简单的学习路线,具体的学习内容和顺序可以根据自己的实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值