package Adl400Impl import ( "encoding/binary" "tgk-touch/internal/library/ADL400" "time" ) func (a *Adl400Impl) WriteYear(commUid string, addr byte, year int) error { // 1. 先读取当前月份(假设月份在低字节,年份在高字节) result, err := ADL400.H003E.Read(commUid, addr) if err != nil { return err } value := result[0] // 低字节为月份 bytes := []byte{byte(value >> 8), byte(value)} month, yearRead := int(bytes[0]), int(bytes[1]) yearRead = year data := uint16(month)<<8 | uint16(yearRead) // 3. 写入合并后的数据 return ADL400.H003E.Write(commUid, addr, []uint16{data}) } func (a *Adl400Impl) WriteMonth(commUid string, addr byte, month int) error { // 1. 先读取当前月份(假设月份在低字节,年份在高字节) result, err := ADL400.H003E.Read(commUid, addr) if err != nil { return err } value := result[0] // 低字节为月份 bytes := []byte{byte(value >> 8), byte(value)} monthRead, year := int(bytes[0]), int(bytes[1]) monthRead = month data := uint16(monthRead)<<8 | uint16(year) // 3. 写入合并后的数据 return ADL400.H003E.Write(commUid, addr, []uint16{data}) } func (a *Adl400Impl) WriteDay(commUid string, addr byte, day int) error { read, err := ADL400.H003D.Read(commUid, addr) if err != nil { return err } value := read[0] hour := int(value >> 8) // 高字节=小时(9) data := make([]byte, 2) data[0] = byte(hour) // 高字节 = 时 data[1] = byte(day) // 低字节 = 日 writeData := binary.BigEndian.Uint16(data) err = ADL400.H003D.Write(commUid, addr, []uint16{writeData}) if err != nil { return err } return nil } func (a *Adl400Impl) WriteHour(commUid string, addr byte, hour int) error { read, err := ADL400.H003D.Read(commUid, addr) if err != nil { return err } value := read[0] day := value & 0xFF // 高字节=小时(9) data := make([]byte, 2) data[0] = byte(hour) // 高字节 = 时 data[1] = byte(day) // 低字节 = 日 writeData := binary.BigEndian.Uint16(data) err = ADL400.H003D.Write(commUid, addr, []uint16{writeData}) if err != nil { return err } return nil } func (a *Adl400Impl) WriteMinute(commUid string, addr byte, minute int) error { read, err := ADL400.H003C.Read(commUid, addr) if err != nil { return err } value := read[0] //log.Printf("value = %04X", value) second := value >> 8 // 高字节=小时(9) //minuteRead := value & 0xFF // 低字节=日(27) data := make([]byte, 2) data[0] = byte(second) // 高字节 = 时 data[1] = byte(minute) // 低字节 = 日 writeData := binary.BigEndian.Uint16(data) //log.Printf("writeData = %04X", writeData) return ADL400.H003C.Write(commUid, addr, []uint16{writeData}) } func (a *Adl400Impl) WriteSecond(commUid string, addr byte, second int) error { read, err := ADL400.H003C.Read(commUid, addr) if err != nil { return err } value := read[0] //second := value >> 8 // 高字节=小时(9) minute := value & 0xFF // 低字节=日(27) data := make([]byte, 2) data[0] = byte(second) // 高字节 = 时 data[1] = byte(minute) // 低字节 = 日 writeData := binary.BigEndian.Uint16(data) err = ADL400.H003C.Write(commUid, addr, []uint16{writeData}) if err != nil { return err } return nil } func (a *Adl400Impl) WriteTime(commUid string, addr byte, t time.Time) error { err := a.WriteYear(commUid, addr, t.Year()-2000) if err != nil { return err } err = a.WriteMonth(commUid, addr, int(t.Month())) if err != nil { return err } err = a.WriteHour(commUid, addr, t.Hour()) if err != nil { return err } err = a.WriteMinute(commUid, addr, t.Minute()) if err != nil { return err } err = a.WriteSecond(commUid, addr, t.Second()) if err != nil { return err } return nil } func (a *Adl400Impl) WriteMsgAddr(commUid string, addr byte, newAddr byte) error { // 1. 先读取当前003FH寄存器的完整值 read, err := ADL400.H003F.Read(commUid, addr) if err != nil { return err } // 2. 解析当前值(假设返回uint16) currentValue := read[0] currentBaud := byte(currentValue & 0xFF) // 低字节=波特率 // 3. 构建新值:新地址(高8位) + 原波特率(低8位) newValue := uint16(newAddr)<<8 | uint16(currentBaud) // 4. 写入新值 writeData := []uint16{newValue} return ADL400.H003F.Write(commUid, addr, writeData) }