Система управления производством - GPSS World

Пусть имеем некую систему управления производством, в которой ЭВМ циклически опрашивает три датчика информации. Информация в датчиках возникает через 10 плюс-минус 3 с и имеет размер 3000 плюс-минус 1000 символов; ЭВМ по очереди каждому датчику дает 3 с: В первые 3с обрабатывается информация с первого датчика; Во вторые 3с обрабатывается информация со второго датчика; В третье 3с обрабатывается информация с третьего датчика; В четвертые 3с обрабатывается информация с первого датчика и т.д. Если на момент начала опрашивания у датчика нету информации для обработки, имеем свободный цикл. Если за соответствующие 3 с ЭВМ успевает обработать информацию датчика, то обслуживание завершается, если нет, то остаток необработанной информации стает в специальную очередь. Задание, что находятся в этой очереди, обрабатываются во время свободных циклов. Скорость обработки информации ЭВМ равна 1000 символов за секунду. Смоделируйте 5 часов работы ЭВМ.

Листинг программы:
 VRazmer VARIABLE 2000+INT(RN1#2000/1000) ;размер от 2000 до 4000
 INITIAL X$XDatchik,1 ;какой датчик обслуживается
 INITIAL X$XNa1,0 ;сколько ждут на 1
 INITIAL X$XNa2,0 ;сколько ждут на 2
 INITIAL X$XNa3,0 ;сколько ждут на 3
 GENERATE 10,3 ;датчик 1
 ASSIGN PRazmer,V$VRazmer ;задать размер
 SAVEVALUE XNa1+,1 ;увеличить колво на 1
 TEST E X$XDatchik,1 ;ждать обслуживания датчика 1
 SAVEVALUE XNa1-,1 ;уменьшить колво на 1
 TRANSFER ,LabO ;перейти на обслуживание
 GENERATE 10,3 ;датчик 2
 ASSIGN PRazmer,V$VRazmer ;задать размер
 SAVEVALUE XNa2+,1 ;увеличить колво на 1
 TEST E X$XDatchik,2 ;ждать обслуживания датчика 2
 SAVEVALUE XNa2-,1 ;уменьшить колво на 1
 TRANSFER ,LabO ;перейти на обслуживание
 GENERATE 10,3 ;датчик 3
 ASSIGN PRazmer,V$VRazmer ;задать размер
 SAVEVALUE XNa3+,1 ;увеличить колво на 1
 TEST E X$XDatchik,3 ;ждать обслуживания датчика 3
 SAVEVALUE XNa3-,1 ;уменьшить колво на 1
 TRANSFER ,LabO ;перейти на обслуживание
 LabO SEIZE EOM ;занять устройство
 ADVANCE 3 ;имитация цикла
 RELEASE EOM ;освободить устройство
 ASSIGN PRazmer-,3000 ;уменьшить размер
 TEST LE P$PRazmer,0,LabLink ;проверить размер
 SAVEVALUE XDatchik+,1 ;перейти к след датчику
 TEST E X$XDatchik,4,LabD1 ;проверить датчик
 SAVEVALUE XDatchik,1 ;перейти к датчику 1
 LabD1 TEST E X$XDatchik,1,LabD2 ;проверить,свобод цикл
 TEST E X$XNa1,0,LabTerm ;
 UNLINK Line,LabO,1 ;вытащить из очереди
 TRANSFER ,LabTerm ;перейти на уничтожение
 LabD2 TEST E X$XDatchik,2,LabD3 ;проверить,свобод цикл
 TEST E X$XNa2,0,LabTerm ;
 UNLINK Line,LabO,1 ;вытащить из очереди
 TRANSFER ,LabTerm ;перейти на уничтожение
 LabD3 TEST E X$XDatchik,3,LabTerm ;проверить,свобод цикл
 TEST E X$XNa3,0,LabTerm ;
 UNLINK Line,LabO,1 ;вытащить из очереди
 TRANSFER ,LabTerm ;перейти на уничтожение 
 LabTerm TERMINATE ;уничтожить
 LabLink LINK Line,FIFO ;занять место в очереди
 GENERATE 3600 ;сегмент таймера
 TERMINATE 1 ;
 START 5 ;на 5 часов
Онлайн всего: 5
Гостей: 5
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте