3、go goroutine:新的goroutine会用go语句来创建,go+函数名,go语句会使其语句中的函数在一新创建的goroutine中运行 , 而go语句本身会迅速地完成
4、goroutine的退出:主函数返回时,所有的goroutine都会被直接打断,程序退出,除了从主函数退出或者终止程序之外,没有其他方法能够让一个goroutine来打断另一个的执行,但是可以通过另一种方式来实现这个目的,通过goroutine之间的通信来让一个goroutine请求其他的goroutine,并让请求的goroutine自行结束执行
golang开发modbus-rtu通信用到的gomodbus包是坛友slzm40编写和共享的go语言串口通信 , 感谢go语言串口通信他的无私分享,本帖只是抛砖引玉,将我自己学习的一些经历分享给大家go语言串口通信;有关modbus包可以直接向slzm40请教或一起讨论;
包地址"github.com/thinkgos/gomodbus";
添加一对虚拟串口
打开modbus-slave从机软件,用来测试从机;
需要注意设置通信地址和读取寄存器的地址和数量;
查看可用串口,因为虚拟串口选择com1和com2,虚拟中我选择使用/dev/ttyS1
编译运行,会提示串口打开失败,这是因为linux对设备的权限做go语言串口通信了限制
获取串口读写、运行等权限
我们已经能正确读取03寄存器的值;其go语言串口通信他功能可以自行测试;
package main
import (
"fmt"
modbus "github.com/thinkgos/gomodbus"
"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)
}
}
【go语言串口通信 go语言通道】go语言串口通信的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于go语言通道、go语言串口通信的信息别忘了在本站进行查找喔 。
推荐阅读
- html5全屏播放按钮,h5怎么全屏播放
- 怎么让显卡兼容主板电脑,显卡怎么和主板平行
- 微信视频怎么备份到硬盘,微信视频怎么保存到备忘录
- mysql第二次查询比第一次快,mysql首次查询为什么要很久
- C语言队列的主函数 c语言队列的用法
- js怎么判断360手机浏览器,js如何判断浏览器是否是ie
- 婚纱网站毕业设计代码,婚纱设计毕业论文
- word2007简体转繁体,word 简体转繁体
- java更改代码颜色 java变色