打开串口、连接服务器、读取串口数据、发送数据
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"防止数据粘连 } } } } }