У меня проблема с тем, что значение sendInterval, которое я устанавливаю, превышает установленный мной предел.
Ниже я только что добавил две строчки, которые комментирую
void EtherTrafGen::scheduleNextPacket(simtime_t previous)
{
simtime_t next;
if (previous == -1) {
next = simTime() <= startTime ? startTime : simTime();
timerMsg->setKind(START);
}
else {
next = previous + sendInterval->doubleValue();
EV << "THE PREVIOUS TIME IS " << previous << " THE SEND INTERVAL IS " << sendInterval->doubleValue() << endl; // Testing
timerMsg->setKind(NEXT);
}
if (stopTime < SIMTIME_ZERO || next < stopTime)
{
scheduleAt(next, timerMsg);
emit(sigSendInterval,sendInterval->doubleValue()); // Vector collect Send Interval Time
}
}
Сначала я тестировал с фиксированным значением sendInterval
**.Host5.app.sendInterval = 1ms
ПРЕДЫДУЩЕЕ ВРЕМЯ 0,001 ИНТЕРВАЛ ОТПРАВКИ 0,001
ПРЕДЫДУЩЕЕ ВРЕМЯ 0,002 ИНТЕРВАЛ ОТПРАВКИ 0,001
ПРЕДЫДУЩЕЕ ВРЕМЯ 0,003 ИНТЕРВАЛ ОТПРАВКИ 0,001
Исходя из этого, я предположил, что Предыдущее время 2 = Предыдущее время 1 + Интервал отправки
Второй Я предположил, что интервал времени такой же, как и в таблице в разделе «Значение» (строка, показанная в коде)
Затем со случайным значением sendInterval
**.Host5.app.sendInterval = uniform(0.99ms,1.01ms)
ПРЕДЫДУЩЕЕ ВРЕМЯ 0,001001856892 ИНТЕРВАЛ ОТПРАВКИ 0,000998752
ПРЕДЫДУЩИЙ ВРЕМЯ 0,001999544526 ИНТЕРВАЛ ОТПРАВКИ 0,00100136
ПРЕДЫДУЩИЙ ВРЕМЯ 0,002999144069 ИНТЕРВАЛ ОТПРАВКИ 0,000997365
Предыдущее время 2 не равно Предыдущее время 1 + интервал отправки
0,001001856892 + 0,000998752 = 0,002000608892
0,002000608892 - 0,001999544526 = 1,064366 мксек.
Интервал времени отличается от значения в поле "Значение", как показано в таблице ниже.
Это приводит к тому, что хост отправляет сообщения за пределы диапазона 0,99 мс, 1,01 мс.