public void Run() { uint lastResponseCheckTime = Primitives.GetBabelMilliTicker(); for (; ;) { if (!Master.Started) { break; } try { uint curTime = Primitives.GetBabelMilliTicker(); if (LnkPrt.HasTasks && (LnkPrt.NumTasks > 0)) { LnkPrt.ServiceTasks(curTime, LinkTaskKind.Service); } if (LnkPrt.DoesIO) { if ((curTime - lastResponseCheckTime) > LnkPrt.ResponseInterval) { lastResponseCheckTime = curTime; if (LnkPrt.HasRead) { LnkPrt.HasRead = false; if (LnkPrt.IoNetIfDevice.GetComponentState() == ComponentState.Unresponsive) { LnkPrt.IoNetIfDevice.NotifyStateChange(ComponentState.Working); } } else if (LnkPrt.IoNetIfDevice.GetComponentState() == ComponentState.Working) { LnkPrt.IoNetIfDevice.NotifyStateChange(ComponentState.Unresponsive); } } if (LnkPrt.IoNetIfDevice.HasHeartBeat()) { if (LnkPrt.GetWriteQueueSize() == 0) { LnkPrt.LinkPing(); } } if (LnkPrt.LinkMissingQueue.Size() != 0) { LnkPrt.Monitor.LinkProtocol(); } } Thread.Sleep(LnkPrt.SchedulerInterval); } catch (ThreadInterruptedException) { break; } catch (Exception) { } } }
public void PingLink() { IoNetIf.LinkPing(); }