12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package protocol
- import (
- "encoding/hex"
- "github.com/gogf/gf/os/glog"
- )
- type Dlt_0x33363535 struct {
- //接收表号
- DeviceName []byte
- //表号
- DeviceID string
- //当前C相电流
- CurrentC float64
- }
- func (entity *Dlt_0x33363535) MsgID() MsgID {
- return Msgdlt_0x33363535
- }
- func (entity *Dlt_0x33363535) Encode() ([]byte, error) {
- writer := NewWriter()
- // 接收符号
- writer.Write([]byte{0xFE, 0xFE, 0x68})
- writer.Write(entity.DeviceName)
- writer.Write([]byte{0x68, 0x11, 0x04, 0x33, 0x36, 0x35, 0x35})
- //cs效验位
- var one byte
- for _, v := range writer.Bytes()[2:] {
- one += v
- }
- writer.WriteByte(one)
- // 功能码
- writer.WriteByte(0x16)
- return writer.Bytes(), nil
- }
- func (entity *Dlt_0x33363535) Decode(data []byte) (int, error) {
- bytea := data[1:7]
- for i, j := 0, len(bytea)-1; i < j; i, j = i+1, j-1 {
- bytea[i], bytea[j] = bytea[j], bytea[i]
- }
- entity.DeviceID = hex.EncodeToString(bytea)
- //正向总电能每个字节-33,1-4,分别为,小数位,个位,百位,万位
- byteb := make([]byte, 3)
- for i := 0; i < 3; i++ {
- byteb[i] = data[14+i] - 0x33
- }
- var err error
- entity.CurrentC, err = stringToCurrent(hex.EncodeToString(byteb))
- if err != nil {
- return 0, err
- }
- glog.Debugf("数据读取成功:表号:%s,当前C相电流:%2f", entity.DeviceID, entity.CurrentC)
- return len(data), nil
- }
|