十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
用到的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 初始化串口通讯
2 定义发送函数和接收函数
这里有一个我做的两个串口的利用单片机做交换机做聊天工具的代码片段,希望你有用
初始化函数
void Serial()
{
TMOD=0x20;TH1=0xFD;TL1=TH1;
SCON=0x50;TR1=1;ES=1;EA=1;
BRT=0xFD;S2CON=0x50;AUXR=0x11;IE2=0x01;
}
发送函数
void Send1(unsigned char SByte)
{
ES=0;
IE1=0;
TI=0;SBUF=SByte;
while(!TI);
TI=0;
IE1=1;
ES=1;
}
void Send2(unsigned char SByte)
{
unsigned char temp;
IE2=0;
S2CON=S2CON0xfd;
S2BUF=SByte;
do
{
temp=S2CON;temp=temp0x02;
}
while(temp==0);
S2CON=S2CON0xfd;
IE2=1;
}
接收函数
void Read1() interrupt 4
{
if(RI)
{
RI=0;
}
if(SBUF=='$') {R1[0]='$';cnt1=1;}
else if(cnt10SBUF=='@') {
R1[cnt1++]='@';flag1=1;
}
else if(cnt10) R1[cnt1++]=SBUF;
else cnt1=0;
}
void Read2() interrupt 8
{
unsigned char k;
k=S2CON;k=k0x01;
if(k==1)
{
S2CON=S2CON0xfe;
}
if(S2BUF=='$'){ R2[0]='$';cnt2=1;}
else if(cnt20S2BUF=='@') {
R2[cnt2]='@';
cnt2++;flag2=1;
}
else if(cnt20) R2[cnt2++]=S2BUF;
else cnt2=0;
}
事实上,串口通信所用的函数就这几个,至少格式都一样,应用的时候只需要更改一点点就行了。
串口通信时,需要发校验字节,校验和是最为简单的,就是在发送一帧数据时,把发送的多字节数据相加得到和,但只保留8位,作为一个字节的校验和再发送出去。接收一方在接收到数据后,也按相同的方法求和,也得一个校验和,就与接收的校验和比较,如果相同,接收不是正常的,反之,接收就是错误的。不作处理。
而CRC校验比较麻烦点,方法与校验和相似,但是要对发送的多个字节的数据进行CRC计算,结果可以是8位的,也可是16位的。这CRC计算是一个标准算法,网上可以查到,并有CRC计算的程序。
串口服务器,一个为RS-232/485/422到PC/IP之间完成数据转换的具有强大功能的方便快捷的通讯接口转换器。串口服务器通过作为服务器端,提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输,提供串口转网络功能,RS-232/485/422转网络的解决方案。接下来飞畅 科技 的我来为大家详细介绍下串口服务器的通讯模式,一起来看看吧!
串口服务器的通讯模式分为三种:
1、点对点通讯模式:
在该模式下,服务器需要成对使用。其中一个作为服务器端,另外一个作为客户端,我们将两者之间建立连接,即可实现数据的双向透明传输。这种点对点的通讯模式适用于将两个串口设备之间的总线连接改造为TCP/IP网络连接。
2、使用虚拟串口通讯模式
在该模式下,一个或者多个服务器与一台电脑建立连接,即可实现数据的双向透明传输。我们在电脑上,由电脑上的虚拟串口软件管理下面的转换器,可以实现,一个虚拟串口对应多个转换器,N个虚拟串口对应M个转换器(N小于等于M)。该模式适用于串口设备由电脑控制的485总线或者322设备连线。无疑再次体现其运行效率,实现了传输速率的阶乘。
3、基于网络通讯模式
在该模式下电脑的应用程序基于SOCKET协议编写了通讯程序,在转换器上直接选择支持SOCKET协议即可。
通过对串口服务器通讯模式的介绍,我们可见串口服务器的传输多样性,高效性,它实现了多节点网络的连接。不仅如此,串口服务器也使设备间的传输距离超过了1.2公里。作为完成数据转换的通讯接口服务器,串口服务器正在发挥其自身最大的价值来造福人类。
好了,以上内容就是飞畅 科技 关于串口服务器通讯模式的相关详细介绍,希望能对大家有所帮助! 杭州飞畅 ,20年专注光纤通信研发、生产和销售,主营光端机、光纤收发器、工业交换机、协议转换器等,我们为客户提供定制化的产品服务。欢迎前来了解、交流。
//创建一个串口通讯 SerialPort CurrentPort = null; CurrentPort = new SerialPort(); CurrentPortReadBufferSize = 128; CurrentPortPortName = comName; //端口号 CurrentPortBaudRate = bandRate; //比特率 CurrentPortParity =parity;/go语言做串口通信,我应该从什么地方入手,IO是什
百度上搜索“串口调试助手”或者“串口调试精灵”,进行简单的安装。
点击运行串口调试助手,进入相应的界面。
设置串口通讯的接口,波特率校验位等相关信息。
在发送栏输入要发送的信息,选择手动发送或者自动发送,这时如果没有什么错误,对方的串口通信工具就会收到发送的内容。
设置接收区域的相关信息,这时对方如果发送信息,接收区就会收到相应的内容。
另外也可以进行文件的发送,但是串口通信的速率过慢,传输文件的话会很耗时,不过可以用来检测通信的正确性。