private void AddGatewayTransmission(EndNodeTransmissionLog endNodeTransmission) { var gatewayTransmissionLog = new GatewayTransmissionLog(); if (Settings.IsRx1GatewayEnabled) { // Передача в RX1 gatewayTransmissionLog.Rx1Channel = endNodeTransmission.ChannelNumber; gatewayTransmissionLog.Rx1StartTimeMs = endNodeTransmission.EndMs + Settings.Rx1PeriodS * 1000; gatewayTransmissionLog.Rx1EndTimeMs = gatewayTransmissionLog.Rx1StartTimeMs + GetRx1DownlinkTimeMs(); } if (Settings.IsRx2GatewayEnabled) { // Передача в RX2 gatewayTransmissionLog.Rx2StartTimeMs = endNodeTransmission.EndMs + Settings.Rx2PeriodS * 1000; gatewayTransmissionLog.Rx2EndTimeMs = gatewayTransmissionLog.Rx2StartTimeMs + GetRx2DownlinkTimeMs(); } _gatewayTransmissionLog.Add(gatewayTransmissionLog); }
/// <summary> /// Возвращает следующую сессию передачи конечного устройства. /// Пропускаются пакеты, которые попали во взаимную коллизию /// с другими конечными устройствами и те, которые не будут услышаны БС, /// из-за того, что БС занята передачей downlink-пакетов. /// </summary> /// <param name="startTime">Дата начала поиска</param> /// <returns></returns> public static EndNodeTransmissionLog GetNextReceivedPacket(IEndNode[] endNodes, uint startTime) { var minimumTransmissionLog = new EndNodeTransmissionLog(); minimumTransmissionLog.StartMs = uint.MaxValue; for (uint i = 0; i < endNodes.Length; i++) { var endNode = endNodes[i]; var endNodeTransmissionLog = endNode.GetTransmissionLog(); for (uint j = 0; j < endNodeTransmissionLog.Length; j++) { if (!endNodeTransmissionLog[j].IsPacketCollisionsWithOtherEndNodes) { // Этот пакет не попал в коллизию с остальными var currentTransmissionLog = endNodeTransmissionLog[j]; if (currentTransmissionLog.IsPacketCanBeListenByGateway && currentTransmissionLog.StartMs >= startTime) { // Этот пакет был отправлен позже даты поиска, // ищем наименьший по дате пакет среди тех, // которые не были проигнорированы БС if (currentTransmissionLog.StartMs < minimumTransmissionLog.StartMs) { minimumTransmissionLog = currentTransmissionLog; } } } } } return(minimumTransmissionLog); }
public void CalculateTransmitTime() { _transmissionLogs = new EndNodeTransmissionLog[ Settings.GetPacketsCountFromOneNode()]; uint transmitPeriodMs = Settings.MS_IN_HOUR / Settings.PacketsPerHour; uint slotTimeMs = 0; for (uint i = 0; i < Settings.GetPacketsCountFromOneNode(); i++) { var random = RandomAccessPoint.GetRandomObject(); uint randomWait = (uint)random.Next((int)transmitPeriodMs); _transmissionLogs[i].StartMs = slotTimeMs + randomWait; _transmissionLogs[i].EndMs = _transmissionLogs[i].StartMs + GetOnePacketTransmitTimeMs(); _transmissionLogs[i].ChannelNumber = GetRandomChannelNumber(); _transmissionLogs[i].IsPacketCanBeListenByGateway = true; slotTimeMs += transmitPeriodMs; } }