Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МиАПО / SIMC_dorab.doc
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
756.22 Кб
Скачать

Множественные типы данных

Для задания имен в системе определен тип данных typedef array<1,8,char> alfa.

Отметим, что в некоторых функциях в качестве параметров возможна подстановка констант типа alfa.Текстовая стро­ка-параметр типа alfa должна содержать число символов в точности равное восьми!

Перечисляемые ниже множественные типы данных будем опреде­лять по следующей схеме:

- назначение типа;

- спецификация типа в системе моделирования;

- указатель на рассматриваемый тип (если таковой имеется).

При описании полей объектов в разделе "спецификация" назна­чение поля дается комментарием. В комментариях символом "U"от­мечены те из них, которые могут изменяться пользователем по его усмотрению; символом"S"отмечены поля, используемые для систем­ных целей. Их содержимое можно только читать. Изменение значений этих полей может привести к непредсказуемым последствиям.

ТРАНЗАКТ- абстрактный динамический объект, характеризующийся рядом свойств, задаваемых значениями параметров. В ходе моделирования транзакты могут создаваться, перемещаться по моде­ли и уничтожаться.

structtransact{ // транзакт Параметры:

// Устанавливается пользователем при создании собственных функций для работы со списками пользователя. См. пр.

array<1,mptb,bool>pb; // булевскиеUarray<1,mpti,int>pi; // целыеUarray<1,mptr,double>pr; // вещественныеUarray<1,mptf,pfacility>pf; // ссылки на приборыUarray<1,mptq,pqueue>pq; // ссылки на очереди Uarray<1,mpts,pstorage>ps; // ссылки на накопители Uprtyrangeprty; // приоритет Ubooltestprty; // ключ приоритета U

// Все остальные поля используются только системой !

intans, // номер ансамбля

nans, // кол-во членов ансамбля

nom; // номер транзакта

ptransactpredans, // ссылки на пред., след.

sledans, // транзакт в ансамбле

pred, // ссылки на пред., след.

sled; // транзакт в списке

eventeve; // событие инициализации

doublenexttime; // время активизации

plistttranslist; // ссылка на занимаем. список };

typedef struct transact* ptransact; // ссылка на транзакт

ПРИБОР- динамический объект, предназначенный для моделиро­вания обслуживающего аппарата. Транзакт может ожидать входа в прибор, занимать или захватывать прибор, освобождать прибор. По прибору собирается соответствующая статистика.

structfacility{ // прибор

booltest; // признак включенияU

alfaname // символьное имя U

// Все остальные поля используются только системой!

enum{free,seized,preempted}

status; // состояние прибора

pfacilitysled, // ссылки на след. и пред.

pred; // приборы в списке

ptransacttranspoint;// ссылка на обр. транзакт

intp, // число захватов

ci; // число входов

doubletimef, // времена: занятости,

pretime, // предыдущего обращения

mtime, // служебное поле

pro; // загрузка прибора

plisttfl, // ссылки на списки ожидающих

inter; // и прерванных транзактов

};

typedef structfacility*pfacility; // ссылка на прибор

ОЧЕРЕДЬ- динамический объект, предназначенный для регист­рации продвижения транзактов на определенных участках модели, сбора и обработки соответствующей статистики.

structqueue{ // очередь

booltest; // признак включения U

alfaname; // символьное имя U

// Все остальные поля используются только системой!

enum{empty,full}status; // статус(пустая/непустая)

intlq, // длина очереди: текущая,

mq, // максимальная,

size; // предельная

pqueuesled, // ссылки на след.,предыдущую

pred; // очереди в списке очередей

intci, // число входов: общее,

co; // в очередь нулевой длины

doubletimeq, // общее время занятости

pretime, // вр.пред. обращения

lm, // средняя длина

mtime; // служебное поле

};

typedef structqueue*pqueue; // ссылка на очередь

НАКОПИТЕЛЬ(многоканальное устройство) - динамический объ­ект, предназначенный для моделирования одного или нескольких об­служивающих устройств. Транзакт может ожидать входа в накопи­тель, занимать в накопителе одну или несколько ячеек, покидать накопитель.

structstorage{ // накопитель

booltest; // признак включения U

alfaname; // символьное имя U

// Все остальные поля используются только системой!

ints, // емкость накопителя

ss, // текущее содержимое

sf, // остающаяся емкость

sm, // макс. содержимое

ci; // число входов

doubleut, // загрузка накопителя

smean, // среднее содержимое

mtime, // служебное поле

times, // время: занятости,

pretime; // пред. обращения

pstoragepred, // ссылки на предыдущий,

sled; // след. накопители

plisttslt; // ссылка на список ожидающих транзактов

};

typedef struct storage* pstorage; // ссылка на накопитель

Гистограммы в системе имитационного моделирования использу­ются для сбора и накопления статистической информации о любых скалярных вещественных или целых переменных. Все необходимые гистограммы задаются пользователем в части определений, создают­ся в разделе создания модельной среды. Измеряемые значения табу­лируются в гистограммы в событийной части модели.

structhistogram{ // гистограмма

// Значения полей задаются пользователем при создании гистограммы

boolgraf; // ключ печати графика

alfaname; // символьное имя

hint2ihint; // число точек табулирования

doublemaxx,

minx;

// Все остальные поля используются только системой!

unsignedtotal, // общее количество входов

sum,

sumsqr,

phistogramsled,

pred;

harr x;

};

typedef struct histogram* phistogram; // ссылка на гистограмму

Таблицы в системе моделирования являются удобным средством для определения табличных распределений вероятностей.

struct table { // таблица

array<1,hint,double> x; // массив значений

array<1,hint,double>p; // массив вероятностей

hint2ihint; // число интервалов

};

Списковые структуры или списки используются для связывания объектов системы моделирования и создания динамической (изменяе­мой во времени) модельной среды. Ниже определяются списки раз­личных объектов. Общими для них являются следующие параметры:

structparml{ //ПАРАМЕТРЫ СПИСКА

doubletimel, // времена занятости,

pretime; // предыдущего обращения

intci, // число входов: общее,

co, // в пустой список

ll, // длина текущая,

lm; // максимальная

alfaname; // имя списка

};

Важнейшим списком является список транзактов - объектов, перемещающихся в модели. В системе моделирования имеются нес­колько списков транзактов. Определение списка следующее:

structlistt{ // СПИСОК ТРАНЗАКТОВ

ptransactfirst; // ссылка на первый транзакт

parmlp; // поле параметров списка

plisttsled, // ссылки на следующий,

pred; // предыдущий список

};

typedef struct listt* plistt; // ссылка на список транзактов

Некоторые списки транзактов объединяются в общие. Для этого используются следующие типы данных:

structlistl{ // СПИСОК СПИСКОВ ТРАНЗАКТОВ

plisttfirst; // ссылка на первый список тр.

intll; // кол-во списков в списке

};

Определяемые пользователем объекты: приборы, очереди, нако­пители и гистограммы связываются в списки, типы которых опреде­лены ниже.

structlistf{ // СПИСОК ПРИБОРОВ

pfacilityfirst; // ссылка на первый прибор

parmlp; // поле параметров списка

plistfsled, // ссылки на следующий,

pred; // предыдущий список

};

typedef struct listf* plistf; // ссылка на список приборов

structlistq{ // СПИСОК ОЧЕРЕДЕЙ

pqueuefirst; // ссылка на первую очередь

parmlp; // поле параметров списка

plistqsled, // ссылки на следующий,

pred; // предыдущий список

};

typedef struct listq* plistq; ссылка на список очередей

structlists{ // СПИСОК НАКОПИТЕЛЕЙ

pstoragefirst; // ссылка на первый накопитель

parmlp; // поле параметров списка

plistssled, // ссылки на следующий,

pred; // предыдущий список

};

typedef struct lists* plists; // ссылка на список накопителей

structlisth{ // СПИСОК ГИСТОГРАММ

phistogramfirst;//ссылка на первую гистограмму

parmlp; // поле параметров списка

plistssled, // ссылки на следующий,

pred; // предыдущий список

};

typedef struct listh* plisth; // ссылка на список гистограмм

Списки приборов, очередей, накопителей и гистограмм необхо­димы для организации автоматической выдачи результатов моделиро­вания. Указатели (ссылки) на поименованные списки используются системой моделирования.

Соседние файлы в папке МиАПО