collect.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package iotDownService
  2. import (
  3. "IotAdmin/core/logger"
  4. "IotAdmin/core/tools/utils"
  5. iotMap "IotAdmin/iot/map"
  6. iotProtocolHandler "IotAdmin/iot/protocol/handler"
  7. iotRtuService "IotAdmin/iot/service/rtuService"
  8. iotStruct "IotAdmin/iot/struct"
  9. )
  10. func collectData(sn string, config *iotStruct.DtuConfig) *[]*iotStruct.CollectData {
  11. array := make([]*iotStruct.CollectData, 0)
  12. logger.Debugf("开始采集数据【%s】 %v", sn, config)
  13. client, ok := iotMap.MapDtuClient.Get(sn)
  14. if !ok {
  15. logger.Debugf("采集数据失败,[%s]客户端不存在", sn)
  16. return &array
  17. }
  18. if !config.Enable {
  19. client.Logger.Info("网关未激活!")
  20. return &array
  21. }
  22. if config.Cycle < 1 {
  23. client.Logger.Error("网关采集周期错误!")
  24. return &array
  25. }
  26. if !client.Online {
  27. client.Logger.Error("采集数据失败,客户端离线")
  28. }
  29. client.MLock.Lock()
  30. defer client.MLock.Unlock()
  31. client.Logger.Info("【开始采集数据】 \r\n")
  32. for _, cfg := range *config.SlaveConfig {
  33. if !cfg.Enable {
  34. client.Logger.Infof("表计[%s]未激活 Addr: %d", cfg.No, cfg.Addr)
  35. continue
  36. }
  37. client.Logger.Debugf("[- %s -]开始采集 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol)
  38. if cfg.Addr < 1 || cfg.Addr > 254 {
  39. client.Logger.Errorf("[%s]采集数据失败,客户端地址错误: %d", cfg.No, cfg.Addr)
  40. continue
  41. }
  42. bAddr := utils.IntoByte(cfg.Addr)
  43. w := iotRtuService.NewRtuNetPgr(bAddr)
  44. w.SetClientState(client)
  45. w.SetSerialNumber(sn)
  46. collectHandler, err := iotProtocolHandler.GetMeterHandler(cfg.Protocol)
  47. if err != nil {
  48. client.Logger.Errorf("[%s]未识别采集器协议: %s", cfg.No, cfg.Protocol)
  49. continue
  50. }
  51. newCfg := cfg
  52. colData := &iotStruct.CollectData{
  53. SlaveConfig: &newCfg,
  54. Logger: client.Logger,
  55. }
  56. err = collectHandler.Collect(w, colData)
  57. if err != nil {
  58. client.Logger.Errorf("[%s] 采集数据失败,[Addr:%d] %s客户端采集数据错误: %s", cfg.No, cfg.Addr, cfg.Protocol, err.Error())
  59. continue
  60. }
  61. array = append(array, colData)
  62. client.Logger.Debugf("[- %s -]采集完成 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol)
  63. }
  64. client.Logger.Info(" \r\n【采集数据完成】")
  65. logger.Debugf("采集数据完成【%s】 %v", sn, array)
  66. return &array
  67. }