成都网站建设设计

将想法与焦点和您一起共享

go语言操作串口 go语言 串口

golang开发modbus-rtu通信

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

我们提供的服务有:成都做网站、成都网站设计、成都外贸网站建设、微信公众号开发、网站优化、网站认证、晋宁ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的晋宁网站制作公司

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

添加一对虚拟串口

打开modbus-slave从机软件,用来测试从机;

需要注意设置通信地址和读取寄存器的地址和数量;

查看可用串口,因为虚拟串口选择com1和com2,虚拟中我选择使用/dev/ttyS1

编译运行,会提示串口打开失败,这是因为linux对设备的权限做了限制

获取串口读写、运行等权限

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

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语言做串口通信,我应该从什么地方入手,IO是什

//创建一个串口通讯 SerialPort CurrentPort = null; CurrentPort = new SerialPort(); CurrentPortReadBufferSize = 128; CurrentPortPortName = comName; //端口号 CurrentPortBaudRate = bandRate; //比特率 CurrentPortParity =parity;/go语言做串口通信,我应该从什么地方入手,IO是什

go语言做串口通信,我应该从什么地方入手,IO是什么?有什么用?

//创建一个串口通讯

SerialPort CurrentPort = null;

CurrentPort = new SerialPort();

CurrentPort.ReadBufferSize = 128;

CurrentPort.PortName = comName; //端口号

CurrentPort.BaudRate = bandRate; //比特率

CurrentPort.Parity =parity;//奇偶校验

CurrentPort.StopBits = stop;//停止位

CurrentPort.DataBits = databit;//数据位

CurrentPort.ReadTimeout = 1000; //读超时,即在1000内未读到数据就引起超时异常

//绑定数据接收事件,因为发送是被动的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理

CurrentPort.DataReceived += Sp_DataReceived;

CurrentPort.Open();

定义一个变量 byte[] receiveStr;

//绑定的事件处理函数

private static void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

{

SerialPort sp = sender as SerialPort;

if (sp == null)

return;

byte[] readBuffer = new byte[sp.ReadBufferSize];

sp.Read(readBuffer, 0, readBuffer.Length);

//赋值

receiveStr=readBuffer;//当然你可以通过转换将byte[]转换为字符串。

}

//你要求的按钮事件可以这么写

private void button1_Click(object sender, EventArgs e)

{

if(receiveStr!=null)

{

变量 xxx=receiveStr;

}

}


分享名称:go语言操作串口 go语言 串口
分享链接:http://chengdu.cdxwcx.cn/article/doeodgp.html