mo.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package zz
  2. import (
  3. "encoding/xml"
  4. "io/ioutil"
  5. "math"
  6. "wb/lg"
  7. )
  8. type szzInfo struct {
  9. Model string
  10. Registers []zzReg ` xml:"Registers>Register"`
  11. Binarys []zzReg `xml:"Binarys>Register"`
  12. }
  13. type zzReg struct {
  14. Dec float64 `xml:"Dec,attr"`
  15. No string `xml:"No,attr"`
  16. Name string `xml:",innerxml"`
  17. Key string `xml:"Key,attr"`
  18. Model string `xml:"Model,attr"`
  19. }
  20. func (zg *zzReg) GetValue(v float64) float64 {
  21. if zg.Dec <= 0 {
  22. return v
  23. }
  24. return v / math.Pow(10, zg.Dec)
  25. }
  26. var zzInfo szzInfo
  27. var zzRegMap map[string]zzReg
  28. var zzBinMap map[string]zzReg
  29. var zzWarnList []zzReg
  30. func LoadModelInfo(path string) {
  31. readZzInfoFromXml(path)
  32. zzRegMap = make(map[string]zzReg)
  33. zzBinMap = make(map[string]zzReg)
  34. zzWarnList = make([]zzReg, 0)
  35. for _, zzReg := range zzInfo.Registers {
  36. if zzReg.No == "" {
  37. continue
  38. }
  39. zzRegMap[zzReg.No] = zzReg
  40. }
  41. for _, r := range zzInfo.Binarys {
  42. if r.No == "" {
  43. continue
  44. }
  45. zzBinMap[r.No] = r
  46. if r.Model == "w" {
  47. zzWarnList = append(zzWarnList, r)
  48. }
  49. }
  50. }
  51. func readZzInfoFromXml(path string) {
  52. lg.Info("readZzInfoFromXml: Read zzInfo from:", path)
  53. content, err := ioutil.ReadFile(path)
  54. if err != nil {
  55. panic(err)
  56. }
  57. err = xml.Unmarshal(content, &zzInfo)
  58. if err != nil {
  59. panic(err)
  60. }
  61. }