Beispiel #1
0
        public void beat(Object obj)
        {
            trList.RemoveAll((item) => item.nextTime == DateTime.MaxValue);
            // trList.Sort((a, b) => a.nextTime.CompareTo(b.nextTime));
            trList.OrderBy(a => a.nextTime);
            for (int i = 0; i < trList.Count; i++)
            {
                TimedRule t1 = trList[i];
                if (DateTime.Now >= t1.nextTime)
                {
                    //符合定时条件
                    for (int j = 0; j < t1.cmdList.Count; j++)
                    {
                        BaseCmd     bcm       = t1.cmdList[j];
                        BaseStation bastation = baseStationDic.Values.Where(item => item.stationEntity.Md_ID == bcm.stationId).FirstOrDefault();
                        if (bastation != null)
                        {
                            bastation.runtimeComand.Enqueue(bcm);
                        }
                    }

                    t1.SetNextTime();
                }
                else
                {
                    break;
                }
            }

            bool istosend = false;

            //第一次发送的时候
            if (sendTime == DateTime.MinValue)
            {
                istosend         = true;
                pollingStartTime = DateTime.Now;
            }
            else
            {
                TimeSpan interval = DateTime.Now - sendTime;
                //单个指令延迟
                if (interval.TotalMilliseconds > dtu.polling_delay_time)
                {
                    istosend = true;
                }
            }
            if (istosend)
            {
                istosend = false;
                sendPollingCMD();
            }
        }
Beispiel #2
0
 private void InitSendCmd(BaseStation baseStation)
 {
     //先考虑初始化指令
     for (int i = 0; i < baseStation.initComand.Count; i++)
     {
         sendCmd.Enqueue(baseStation.initComand[i]);
     }
     //再考虑轮询指令
     for (int i = 0; i < baseStation.pollingComand.Count; i++)
     {
         sendCmd.Enqueue(baseStation.pollingComand[i]);
     }
 }
Beispiel #3
0
        public BaseDTU(DTUEntity dtu, Dictionary <string, BaseStation> baseStationDic)
            : this(dtu, IntPtr.Zero, null)
        {
            this.baseStationDic = baseStationDic;
            /// this.trList = trList;
            StationEntity se = new StationEntity();

            se.DTU_ID   = dtu.DTU_ID;
            se.Address  = dtu.Address;
            selfStation = new BaseStation(se);
            InitTimedRule();
            InitBaseStationDic();
            InitSendCmd();
        }