使用go开源发布自己的包(modbusplus)供别人使用
Posted lishuangquan1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用go开源发布自己的包(modbusplus)供别人使用相关的知识,希望对你有一定的参考价值。
动机
在网上看到https://github.com/goburrow/modbus这个项目很久没有维护了,有些功能不能适应自己的需求,所以就有了modbusplus
这个项目的想法,只是针对modbus原来不灵活的地方做一些修改:
- 支持每次调用的时候传入slaveId
- 修改API传入的参数,使其更好用
例如:
原来的写入多寄存器的API:
func WriteMultipleRegisters(address, quantity uint16, value []byte) (results []byte, err error)
修改后的API:
func WriteMultipleRegisters(address uint16, value []uint16, slaveId byte) ([]byte, error)
只需要传入开始地址和要设置的值数组就可以了
步骤
一、在github上建立仓库:
由于modbusplus仓库我已经建立了,图片仅供参考
在本地新建一个modbusplus文件夹
- 使用vscode打开文件夹
- 初始化go mod
- coding
go mod init "github.com/lishuangquan1987/modbusplus"
一定要注意:go mod init后面跟的名称,必须是别人引用你的包在github上的路径:github.com/lishuangquan1987/modbusplus
这里mod的名称,不能直接使用modbusplus,否则会报如下错误(血的教训)!!!
go get: github.com/lishuangquan1987/modbusplus@none updating to
github.com/lishuangquan1987/modbusplus@v0.0.2: parsing go.mod:
module declares its path as: modbusplus
but was required as: github.com/lishuangquan1987/modbusplus
将写好的代码通过soucetree推送到github
初始化git仓库
在modbusplus文件夹根目录,打开git bash终端,输入如下命令:
git init
按回车之后,会创建.git
文件夹
添加到Sourcetree并设置远程仓库地址
1.打开sourcetree,点击+
号按钮:
2.弹出如下画面,添加文件夹,找到modbusplus文件夹的路径:
3.设置远程仓库
点击右上方的设置,添加远程地址:git@github.com:lishuangquan1987/modbusplus.git
注意:此处一定要填写ssh的地址,github更新了规则,推送只能使用ssh的地址推送
然后把新增的文件暂存,提交,推送
发布Release版本
在github的项目页,点击+Release
填入一个Tab版本号,即可发布
引用自己发布在github上的库
1.新建一个项目叫modbusplustest
2.添加main.go
3.初始化mod:
go mod init modbusplustest
4.引用modbusplus
PS F:\\go project\\mobusplustest> go get -u github.com/lishuangquan1987/modbusplus
go: downloading github.com/lishuangquan1987/modbusplus v0.0.3
go get: added github.com/lishuangquan1987/modbusplus v0.0.3
5.测试的Code:
package main
import (
"fmt"
"time"
"github.com/goburrow/modbus"
"github.com/lishuangquan1987/modbusplus"
)
func main()
// Modbus RTU/ASCII, it is the same as goburrow/modbus
handler := modbus.NewRTUClientHandler("COM9")
handler.BaudRate = 9600
handler.DataBits = 8
handler.Parity = "N"
handler.StopBits = 1
handler.SlaveId = 1
handler.Timeout = 5 * time.Second
err := handler.Connect()
if err != nil
fmt.Printf("connect fail:%v", err)
defer handler.Close()
//use the modbusplus to create client
client := modbusplus.NewClient(handler)
//we can change slave id every call
for i := 0; i < 100; i++
results, err := client.ReadHoldingRegisters(0x2050, 1, byte(i))
if err != nil
fmt.Printf("%v", results)
以上是关于使用go开源发布自己的包(modbusplus)供别人使用的主要内容,如果未能解决你的问题,请参考以下文章