| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package iotDownService
- import (
- "IotAdmin/core/logger"
- "IotAdmin/core/tools/utils"
- iotMap "IotAdmin/iot/map"
- iotProtocolHandler "IotAdmin/iot/protocol/handler"
- iotRtuService "IotAdmin/iot/service/rtuService"
- iotStruct "IotAdmin/iot/struct"
- )
- func collectData(sn string, config *iotStruct.DtuConfig) *[]*iotStruct.CollectData {
- array := make([]*iotStruct.CollectData, 0)
- logger.Debugf("开始采集数据【%s】 %v", sn, config)
- client, ok := iotMap.MapDtuClient.Get(sn)
- if !ok {
- logger.Debugf("采集数据失败,[%s]客户端不存在", sn)
- return &array
- }
- if !config.Enable {
- client.Logger.Info("网关未激活!")
- return &array
- }
- if config.Cycle < 1 {
- client.Logger.Error("网关采集周期错误!")
- return &array
- }
- if !client.Online {
- client.Logger.Error("采集数据失败,客户端离线")
- }
- client.MLock.Lock()
- defer client.MLock.Unlock()
- client.Logger.Info("【开始采集数据】 \r\n")
- for _, cfg := range *config.SlaveConfig {
- if !cfg.Enable {
- client.Logger.Infof("表计[%s]未激活 Addr: %d", cfg.No, cfg.Addr)
- continue
- }
- client.Logger.Debugf("[- %s -]开始采集 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol)
- if cfg.Addr < 1 || cfg.Addr > 254 {
- client.Logger.Errorf("[%s]采集数据失败,客户端地址错误: %d", cfg.No, cfg.Addr)
- continue
- }
- bAddr := utils.IntoByte(cfg.Addr)
- w := iotRtuService.NewRtuNetPgr(bAddr)
- w.SetClientState(client)
- w.SetSerialNumber(sn)
- collectHandler, err := iotProtocolHandler.GetMeterHandler(cfg.Protocol)
- if err != nil {
- client.Logger.Errorf("[%s]未识别采集器协议: %s", cfg.No, cfg.Protocol)
- continue
- }
- newCfg := cfg
- colData := &iotStruct.CollectData{
- SlaveConfig: &newCfg,
- Logger: client.Logger,
- }
- err = collectHandler.Collect(w, colData)
- if err != nil {
- client.Logger.Errorf("[%s] 采集数据失败,[Addr:%d] %s客户端采集数据错误: %s", cfg.No, cfg.Addr, cfg.Protocol, err.Error())
- continue
- }
- array = append(array, colData)
- client.Logger.Debugf("[- %s -]采集完成 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol)
- }
- client.Logger.Info(" \r\n【采集数据完成】")
- logger.Debugf("采集数据完成【%s】 %v", sn, array)
- return &array
- }
|