Передача по сети

prN EQU 33		;ширина окна - в пакетах
prLoss EQU 5		;процент потерь
prAverage EQU 20		;среднее время отправки пакетов
prArrive EQU 10		;интервал отправок пакетов
PERIOD TABLE M1,5,10,10	

GENERATE (Exponential(1,0,prArrive))	;создание пакетов
	TEST L Q$BUFER,prN,REFUSE	;проверяем не заполнен ли буфер на 100%
AGAIN	ASSIGN TIME,(Exponential(2,0,prAverage))	;получаем время передачи и записываем в параметр транзакта
	TEST L P$TIME,2,NEXTEST	;проверяем время передачи меньше 2 мс
	ASSIGN TIME,2	;если да, то ставим 2мс время передачи и записываем в параметр транзакта

NEXTEST   TEST E (P$TIME'g'25),1,NEXT2TEST	;проверяем время передачи больше 25мс и по вероятности обойдётся без потери 
	ASSIGN TIME,25	;если да, то ставим 25мс время передачи и записываем в параметр транзакта

NEXT2TEST TEST E (uniform(3,0,100)'le'prLoss),1,TRANSMIT ;проверяем не выйдет ли потеря пакета
	ASSIGN TIME,34	;да потеря будет, поэтому время отправки устанавливаем >25мс
TRANSMIT	QUEUE BUFER	;пакет - в буфер
	SEIZE WINDW	;начинаем отправку
	DEPART BUFER	;пакет - из буфера
	ADVANCE (P$TIME@26)	;отправка не больше 25мс
	RELEASE WINDW	;пакет отправлен
	TEST G P$TIME,25,FINISH	;проверяем должен ли был пакет отправляться дольше 25мс
	TRANSFER ,AGAIN	;если да, то пакет нужно отправить снова
FINISH	TERMINATE 1	;если нет, то считаем, что пакет успешно передан и удаляем транзакт
REFUSE 	TERMINATE 1	;здесь удаляются лишние транзакты при переполнение буфера

start 10000		;пока не отправлены 10000 пакетов, моделирование не закончится

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *