Программирование в GPSS - Изменение параметров транзактовОсновным средством задания параметров транзактов является блок ASSIGN (назначить). В поле A этого блока указывается номер параметра, в поле В определяется записываемое в параметр значение. Приписывая к номеру параметра в поле A символ + или -, можно обеспечить не запись значения поля В в параметр, а добавление или вычитание этого значения из значения параметра. Если в поле C указано какое-либо имя, оно интерпретируется как имя функции. В этом случае вычисляется указанная функция и значение поля В модифицируется путем умножения на значение функции. Примеры:
ASSIGN 1,475 ;ЗАНЕСТИ 475 В Р1 ASSIGN 12+,45 ;ДОБАВИТЬ 45 В Р1 ASSIGN 11,С1 ;ЗАПИСАТЬ ВРЕМЯ В Р11 ASSIGN 8,42,FFF ;ЗАПИСАТЬ 42*FN$FFF В Р8.
В блоке ASSIGN P1,P2 содержимое второго параметра будет записано в параметр, номер которого нужно прочесть в первом параметре. В блоке ASSIGN P*1,P2 содержимое второго параметра будет записано в параметр, номер которого записан в другом параметре, номер которого нужно прочесть в параметре Р1. При моделировании на GPSS часто возникают случаи, когда нужно менять стандартные числовые атрибуты транзактов. К атрибутам транзактов относятся приоритет и отметка времени. Для задания приоритетов транзактов кроме блока GENERATE можно использовать блок PRIORITY. Поле A этого блока определяет значение присваиваемого приоритета. Например, при прохождении через блок
PRIORITY 3
транзакту будет присвоен приоритет 3. Отметка времени — это запись в транзакте текущего момента времени, которая автоматически производится в момент порождения транзакта блоком GENERATE и может меняться только в блоке MARK. Если транзакт не проходил блока MARK, то время существования транзакта в модели может быть определено как разность между текущим значением модельного времени и отметкой времени транзакта. При прохождении блока MARK с пустым полем A отметка времени транзакта заменяется на новую, равную моменту прохождения этого блока. Если в поле A указано некоторое значение, то оно рассматривается как номер параметра транзакта и текущее время записывается в этот параметр. Отметка времени транзакта при этом не меняется, т.е. сохраняет свое старое значение. Например, блок
MARK
записывает текущее время в отметку времени проходящего через него транзакта, а блок MARK 1
записывает текущее время только в Р1. Блок MARK можно применять для измерения времени прохождения транзактом определенного участка модели. В начале этого участка блоком MARK делается отметка времени в транзакте, а в конце участка определяется разность между текущим модельным временем и отметкой времени, сделанной в транзакте.
|
