diff --git a/third_party/interlock/beijing12/interlock.go b/third_party/interlock/beijing12/interlock.go index 0af4c7a..13e8198 100644 --- a/third_party/interlock/beijing12/interlock.go +++ b/third_party/interlock/beijing12/interlock.go @@ -53,7 +53,7 @@ type interlockProxy struct { // 驱动信息进行转发 func (i *interlockProxy) handleDriverInfo(b []byte) { - slog.Info("收到联锁驱动继电器数据:", fmt.Sprintf("%x", b)) + slog.Info(fmt.Sprintf("收到联锁驱动继电器数据:%x", b)) handler := i.manager if handler != nil { handler.HandleInterlockDriverInfo(i.runConfig.Code, b) @@ -106,7 +106,7 @@ func (i *interlockProxy) collectInfoStateTask(ctx context.Context) { if err != nil { slog.Error("向联锁发送继电器状态失败:", err) } else { - slog.Error("向联锁发送继电器数据成功:", fmt.Sprintf("%x", collectInfoState.Encode())) + slog.Error(fmt.Sprintf("向联锁发送继电器数据成功:%x", collectInfoState.Encode())) } } time.Sleep(time.Millisecond * InterlockMessageSendInterval) diff --git a/third_party/message/interlock.go b/third_party/message/interlock.go index 305eccf..2e077a4 100644 --- a/third_party/message/interlock.go +++ b/third_party/message/interlock.go @@ -1,6 +1,9 @@ package message -import "fmt" +import ( + "fmt" + "math" +) // 消息包头解析 type interlockMsgPkgHeader struct { @@ -81,15 +84,25 @@ func (m *InterlockSendMsgPkg) SetSerialNumber(serialNumber uint8) { func (m *InterlockSendMsgPkg) Encode() []byte { var data []byte data = append(data, m.header.encode()...) - for index, length, cycles := 0, len(m.info), len(m.info)/boolsToByteArrLen; index < cycles; index++ { - startIndex := index * boolsToByteArrLen - toByteArr := [8]bool{} - for i := 0; i < boolsToByteArrLen && startIndex < length; i++ { - startIndex = startIndex + i - toByteArr[i] = m.info[startIndex+i] + bitLen := len(m.info) + byteLen := int(math.Ceil(float64(bitLen) / 8)) + infoBytes := make([]byte, byteLen) + for i, b := range m.info { + if b { + infoBytes[i/8] = infoBytes[i/8] + (1 << (i % 8)) } - data = append(data, boolsToByte(toByteArr)) } + data = append(data, infoBytes...) + + //for index, length, cycles := 0, len(m.info), len(m.info)/boolsToByteArrLen; index < cycles; index++ { + // startIndex := index * boolsToByteArrLen + // toByteArr := [8]bool{} + // for i := 0; i < boolsToByteArrLen && startIndex < length; i++ { + // startIndex = startIndex + i + // toByteArr[i] = m.info[startIndex+i] + // } + // data = append(data, boolsToByte(toByteArr)) + //} data = append(data, m.tail.encode()...) return data }