打开串口、连接服务器、读取串口数据、发送数据
package main
import (
"fmt"
"net"
"time"
"encoding/hex"
"github.com/tarm/goserial"
)
var tcpcon = false//TCP连接状态
var cfg = &serial.Config{Name: "COM4", Baud: 4800, ReadTimeout: 3 /*毫秒*/}//默认打开COM4
var tcpconn, tcperr = net.Dial("tcp", "192.168.2.100:3303") //TCP服务器192.168.2.100:3303
var iorwc, err = serial.OpenPort(cfg)//打开串口
const MAXRWLEN = 7//串口数据长度
func main() {
if tcperr == nil {
tcpcon = true
fmt.Println("成功连接到服务器")
}else{
fmt.Println("连接服务器失败")
}
fmt.Println("数据转发中,请勿关闭此窗口")
var com = [6]string{"COM3","COM4","COM5","COM6","COM7","COM8",};
fmt.Println("打开串口"+string(content))
if err != nil {
fmt.Println("打开串口"+string(content)+"失败")
for i := 0; i < len(com); i++ {
fmt.Println("尝试打开串口" + com[i])
cfg = &serial.Config{Name: com[i], Baud: 4800, ReadTimeout: 3000 /*毫秒*/}
iorwc, err = serial.OpenPort(cfg)
if err == nil {
fmt.Println("打开串口" + com[i] + "成功")
i = 9
} else {
fmt.Println("打开串口" + com[i] + "失败")
}
}
}
for {
defer iorwc.Close()
buffer := make([]byte, MAXRWLEN)
for true {
num, err := iorwc.Read(buffer)
if err != nil {
fmt.Println("串口数据读取错误")
iorwc.Close()//关闭串口
iorwc, err = serial.OpenPort(cfg)//重新打开串口
if err != nil{
fmt.Println(err)
}
}
num, err = iorwc.Read(buffer)
if num > 0 {
data :=hex.EncodeToString(buffer)//数据读取
if tcpcon {
tcpconn.Write([]byte(data+"\n"))//TCP发送数据,通过"\n"防止数据粘连
}
}
}
}
}

渝公网安备 50024202000255号