dlt645_0x33353435.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package protocol
  2. import (
  3. "encoding/hex"
  4. "github.com/gogf/gf/os/glog"
  5. )
  6. type Dlt_0x33353435 struct {
  7. //接收表号
  8. DeviceAddress []byte
  9. //表号
  10. DeviceID string
  11. //当前B相电压
  12. VoltageB float64
  13. }
  14. func (e *Dlt_0x33353435) MsgID() MsgID {
  15. return Msgdlt_0x33353435
  16. }
  17. func (e *Dlt_0x33353435) Encode(ctx *PacketContext) ([]byte, error) {
  18. writer := NewWriter()
  19. // 接收符号
  20. writer.Write([]byte{0x68})
  21. writer.Write(ctx.GetReceiveAddress())
  22. writer.Write([]byte{0x68, 0x11, 0x04, 0x33, 0x35, 0x34, 0x35})
  23. //cs效验位
  24. var one byte
  25. for _, v := range writer.Bytes() {
  26. one += v
  27. }
  28. writer.WriteByte(one)
  29. // 功能码
  30. writer.WriteByte(0x16)
  31. return writer.Bytes(), nil
  32. }
  33. func (e *Dlt_0x33353435) Decode(ctx *PacketContext, dataByte []byte) (data Data, err error) {
  34. bytea := dataByte[1:7]
  35. for i, j := 0, len(bytea)-1; i < j; i, j = i+1, j-1 {
  36. bytea[i], bytea[j] = bytea[j], bytea[i]
  37. }
  38. e.DeviceID = hex.EncodeToString(bytea)
  39. //正向总电能每个字节-33,1-4,分别为,小数位,个位,百位,万位
  40. byteb := make([]byte, 2)
  41. for i := 0; i < 2; i++ {
  42. byteb[i] = dataByte[14+i] - 0x33
  43. }
  44. e.VoltageB, err = stringToVoltage(hex.EncodeToString(byteb))
  45. if err != nil {
  46. return data, err
  47. }
  48. glog.Debugf("数据读取成功:表号:%s,当前B相电压:%2f", e.DeviceID, e.VoltageB)
  49. data.BV = e.VoltageB
  50. return data, err
  51. }