package zz import ( "encoding/xml" "io/ioutil" "math" "wb/lg" ) type szzInfo struct { Model string Registers []zzReg ` xml:"Registers>Register"` Binarys []zzReg `xml:"Binarys>Register"` } type zzReg struct { Dec float64 `xml:"Dec,attr"` No string `xml:"No,attr"` Name string `xml:",innerxml"` Key string `xml:"Key,attr"` Model string `xml:"Model,attr"` } func (zg *zzReg) GetValue(v float64) float64 { if zg.Dec <= 0 { return v } return v / math.Pow(10, zg.Dec) } var zzInfo szzInfo var zzRegMap map[string]zzReg var zzBinMap map[string]zzReg var zzWarnList []zzReg func LoadModelInfo(path string) { readZzInfoFromXml(path) zzRegMap = make(map[string]zzReg) zzBinMap = make(map[string]zzReg) zzWarnList = make([]zzReg, 0) for _, zzReg := range zzInfo.Registers { if zzReg.No == "" { continue } zzRegMap[zzReg.No] = zzReg } for _, r := range zzInfo.Binarys { if r.No == "" { continue } zzBinMap[r.No] = r if r.Model == "w" { zzWarnList = append(zzWarnList, r) } } } func readZzInfoFromXml(path string) { lg.Info("readZzInfoFromXml: Read zzInfo from:", path) content, err := ioutil.ReadFile(path) if err != nil { panic(err) } err = xml.Unmarshal(content, &zzInfo) if err != nil { panic(err) } }