golang开发modbus-rtu通信

Python013

golang开发modbus-rtu通信,第1张

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

包地址"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)

}

}

1、安装串口监控软件:安装串口监控软件,如RealTerm, Putty等,可以实现对安卓串口数据的读取;

2、使用串口工具:Windows系统提供的串口工具Device Manager,可以实现与安卓设备的通讯;

3、使用安卓串口库调用:通过安卓串口库调用,从安卓串口中读取数据;

4、使用三方SDK:第三方软件开发工具,比如M2MGO SDK,也可以从安卓串口中读取数据。

一、在keil中调试c语言程序

1、打开我们的程序,点击菜单栏右侧的start/stopdebug..按钮,进入调试模式,如下图

2、左侧为寄存器窗口,右上方是汇编窗口,我们可以看到各个寄存器的数值和c语言对应的汇编代码,如下图。

3、点击单步执行按钮或者点击f11、f10,都可以进入单步执行模式,方便我们看程序流程和执行步骤,如下图。

4、点击菜单栏的串口按钮,我们来调试串口的输出,这里有很多对应的调试工具可供选择,如下图。

5、单步执行,我们看到各个窗口的变化,当直行到输出时,可以看到串口窗口有相应的字符输出,如下图。

6、再次点击start/stop按钮来停止调试,如下图。

二、用vs2012对C语言进行调试

1、要对编程环境左边的一条竖直的空开的地方进行点击,点击的是你要调试的相应的语句。

2、点击窗口上方的工具栏的调试界面,点击逐语句或逐过程,都没关系。

3、开始调试,在调试过程中每个调试语句都要按一次F5键,在键盘上按下,你可以看到执行的当前的语句中,左边位置的红点有个箭头。

4、在每次调试语句中,变量值发生改变时,下方的小界面都会显示出来,看是否正确。

5、不断地重复这个步骤,知道发现错误的地方为止。

6、发现错误后,停止调试,修改相应的代码,即完成此次调试。