GOlang语言实现TCP调试助手客户端功能并把返回的数据结果保存到结构体数组里面(解析Modbus TCP协议为案例)

使用Go语言编写TCP客户端,连接到指定服务器,读取Modbus TCP协议数据,将返回的设备状态信息解析并存储到结构体中,包括断纤、告警等状态,并进行详细的状态分析和展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
   "fmt"
   "net"
   "strings"
)

const (
   BitNotConsidered ="不考虑的比特位"
   bit01 = "断纤告警"
   bit02 = "高温告警"
   bit03 = "温升告警"
)
type TotalStat struct {
   GlobalAlarm string
   //第一个寄存器bit0~bit3的状态
   FirstBitGlobalAlarmStatus string
   SecondBitGlobalAlarmStatus string
   ThirdBitGlobalAlarmStatus string
   ForthBitGlobalAlarmStatus string


    //第二个寄存器每个比特采集状态
   FirstBitCollectStatus string
   SecondBitCollectStatus string
   ThirdBitCollectStatus string
   ForthBitCollectStatus string
   FifthBitCollectStatus string
   SixthBitCollectStatus string
   SeventhBitCollectStatus string
   EighthBitCollectStatus string
   NinthBitCollectStatus string
   TenthBitCollectStatus string
   EleventhBitCollectStatus string
   TwelfthBitCollectStatus string
   ThirteenthBitCollectStatus string
   FourteenthBitCollectStatus string
   FifteenthBitCollectStatus string
   SixteenthBitCollectStatus string


   //第五个寄存器每个比特断纤状态
   FirstBitBrokenFiberStatus string
   SecondBitBrokenFiberStatus string
   ThirdBitBrokenFiberStatus string
   ForthBitBrokenFiberStatus string
   FifthBitBrokenFiberStatus string
   SixthBitBrokenFiberStatus string
   SeventhBitBrokenFiberStatus string
   EighthBitBrokenFiberStatus string
   NinthBitBrokenFiberStatus string
   TenthBitBrokenFiberStatus string
   EleventhBitBrokenFiberStatus string
   TwelfthBitBrokenFiberStatus string
   ThirteenthBitBrokenFiberStatus string
   FourteenthBitBrokenFiberStatus string
   FifteenthBitBrokenFiberStatus string
   SixteenthBitBrokenFiberStatus string
//第六个寄存器断纤告警状态
   FirstBitFiberCutStatus string
   SecondBitFiberCutStatus string
   ThirdBitFiberCutStatus string
   ForthBitFiberCutStatus string
   FifthBitFiberCutStatus string
   SixthBitFiberCutStatus string
   SeventhBitFiberCutStatus string
   EighthBitFiberCutStatus string
   NinthBitFiberCutStatus string
   TenthBitFiberCutStatus string
   EleventhBitFiberCutStatus string
   TwelfthBitFiberCutStatus string
   ThirteenthBitFiberCutStatus string
   FourteenthBitFiberCutStatus string
   FifteenthBitFiberCutStatus string
   SixteenthBitFiberCutStatus string
   //第八个寄存器断纤告警状态
   FirstBitFiberCutAlarmStatus string
   SecondBitFiberCutAlarmStatus string
   ThirdBitFiberCutAlarmStatus string
   ForthBitFiberCutAlarmStatus string
   FifthBitFiberCutAlarmStatus string
   SixthBitFiberCutAlarmStatus string
   SeventhBitFiberCutAlarmStatus string
   EighthBitFiberCutAlarmStatus string

   CH16 string
   CH1732 string
}
func Str2DEC(s string) (num int) {
   l := len(s)
   for i := l - 1; i >= 0; i-- {
      num += (int(s[l-i-1]) & 0xf) << uint8(i)

   }
   return
}

type DeviceStatus struct{
   RegisterID int
   RegisterName string
   FirstBitStatus string
   SecondBitStatus string
   ThirdBitStatus string
   ForthBitStatus string
   FifthBitStatus string
   SixthBitStatus string
   SeventhBitStatus string
   EighthBitStatus string
   NinthBitStatus string
   TenthBitStatus string
   EleventhBitStatus string
   TwelfthBitStatus string
   ThirteenthBitStatus string
   FourteenthBitStatus string
   FifteenthBitStatus string
   SixteenthBitStatus string
}
type DeviceStatusNumber struct{
   RegisterId int
   RegisterName string
   Number int
}
var TS TotalStat

func main() {

   //主动连接服务器
   conn, err := net.Dial("tcp", "192.168.1.154:502")
   if err != nil {
      fmt.Println("client dial err=", err)
      return
   }
   //defer conn.Close()
   _, err = conn.Write([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x01, 0x00, 0x09}) // + "\n"
   if err != nil {
      fmt.Println("conn.Write err=", err)
   }
   //接收服务器回复的数据
   buf := make([]byte, 2048)

   for {
      //n,err2:= conn.Read(buf)
      n, err2 := conn.Read(buf)
      if err2 != nil {
         fmt.Println("服务器read err=", err2)
         return
      }
      st 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值