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(); } }
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]); } }
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(); }