Опубликован: 16.11.2010 | Уровень: специалист | Доступ: платный
Лекция 9:

Разработка имитационных моделей в виде приложений с интерфейсом

Аннотация: Подробно рассматривается разработка моделей. Разработка модели в GPSS World. Создание стартовой формы приложения - имитационной модели. Добавление компонент в стартовую форму имитационной модели. События и процедуры обработки событий.

8.1. Применение текстовых объектов и потоков данных

Модель представляет собой набор операторов, содержащихся в одном объекте "Модель" и в любом количестве необязательных текстовых объектов.

Текстовые объекты с наборами операторов модели подключаются к объекту "Модель" командой INCLUDE. Формат команды:

INCLUDE         A

Операнд А - спецификация файла (полный путь доступа к файлу). Допустимые значения - String. Например:

INCLUDE         "DanDon.txt"
INCLUDE          "D:\Primer\DanZad.txt"

В первом примере путь доступа к файлу не приводится, так как предполагается, что файл с указанным именем находится в папке модели. Во втором примере указан путь доступа к файлу.

Команда INCLUDE является срочной командой. При трансляции она заменяется файлом. Поэтому располагать в модели команду INCLUDE нужно там, где должны быть операторы или команды, содержащиеся в файле.

Все дополнительно вводимые файлы нумеруются транслятором целыми числами, начиная с 0. Номер 0 присваивается объекту-модели. Нескольким вводам одного файла также присваиваются уникальные номера, т. е. каждый ввод файла приводит к созданию отличающихся наборов блоков.

Команда INCLUDE допускает пять уровней вложенности файлов модели. Нельзя помещать команду INCLUDE в Plus-процедуру.

Операторы INCLUDE можно также закреплять за функциональными клавишами. Это позволяет одним нажатием клавиши объекту "Процесс моделирования" передать набор команд и (или) Plus-операторов, содержащихся в текстовом файле.

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

Поток данных - это последовательность текстовых строк, используемых процессом моделирования. Существуют два типа потоков данных:

  • потоки ввода-вывода (I/O или "файловые" потоки) для доступа к файлам;
  • потоки в памяти для тестирования или прямого доступа к внутренним данным.

Основной элемент потока данных - текстовая строка, которая является строкой печатных символов, включая пробелы.

Для обработки потоков данных существуют пять блоков GPSS World: OPEN, CLOSE, READ, WRITE, SEEK. Три из них - READ, WRITE, SEEK - выполняют операции только с одной отдельной строкой текста.

Перейдем к рассмотрению блоков обработки потоков данных.

8.1.1. Блок OPEN

Блок OPEN предназначен для инициализации потока данных. Формат блока:

OPEN   A,[B],[C]

Операнд А - дескриптор потока данных. Операнд определяет тип потока данных. Он обрабатывается как строка. Если это нулевая строка, создается поток в памяти. Если это канальное имя, такое как "\pipe\mypipe", создается канальный поток. В противном случае создается поток ввода-вывода и предполагается, что операнд А является спецификацией файла.

Операнд В - номер потока данных, произвольное положительное число, задаваемое пользователем. Нумерация потоков введена с целью использования одновременно в одном процессе моделирования нескольких потоков данных. По умолчанию номер потока данных равен 1.

Операнд С - метка блока, в который направляется транзакт в случае ошибки инициализации потока данных. Коды ошибок:

  • 0 - нет ошибки;
  • 10 - длинное имя файла;
  • 11 - ошибка чтения внешнего файла;
  • 12 - во время попытки открыть файл был запрещен доступ к памяти.
OPEN   ("Plan.txt"),3,Kon1
OPEN   ("G\Model\NorPogr.txt")
OPEN   ("")

В первом примере открывается поток ввода-вывода, потоку присваивается номер 3 и в случае ошибки открытия активный транзакт направляется к блоку с меткой Kon1. Операндом А указан неполный путь доступа к файлу, поэтому подразумевается, что используется папка объекта "Процесс моделирования". Если файл с указанным именем не найден, то предполагается, что файл создается, и ошибка не возникает.

Во втором примере операндом А указан полный путь доступа к файлу, открываемому потоку ввода-вывода по умолчанию присваивается номер один. В случае ошибки открытия активный транзакт направляется к следующему по порядку блоку.

В третьем примере открывается поток в памяти.

Замечание.Если указанный операндом А файл найден, во время обработки блока OPEN он полностью загружается в виртуальную память. Все находившиеся в файле данные хранятся как часть объекта "Процесс моделирования" до тех пор, пока поток данных не будет закрыт. Все изменения данных отражаются в файловой системе только после того, как поток данных закрывается блоком CLOSE или библиотечной Plus-процедурой Close().

8.1.2. Блок CLOSE

Блок CLOSE предназначен для закрытия потока данных. Формат блока:

CLOSE             A,[B],[C]

Операнд А - номер или имя параметра транзакта, в который записывается код ошибки закрытия потока данных. Если такой параметр не существует, он создается.

Операнд В - номер закрываемого потока данных, по умолчанию равен 1, т. е. если операнд В не используется, закрывается поток номер один.

Операнд С - метка блока, в который направляется транзакт в случае ошибки закрытия потока данных. Коды ошибок:

  • 0 - нет ошибки;
  • 41 - запись файла на диск не произведена из-за ошибки ввода-вывода;
  • 42 - файл не был открыт.

Например:

CLOSE             Parm_Error,(P1+1)

В примере блок CLOSE закрывает поток данных, номер которого задан выражением в скобках. Это выражение вычисляется, округляется и используется в качестве номера потока данных (должен быть положительным целым числом).

Блок CLOSE для потоков ввода-вывода записывает данные из виртуальной памяти в дисковый файл.

8.1.3. Блок READ

Блок READ предназначен для считывания из потока данных текстовой строки. Формат блока:

READ   A,[B],[C]

Операнд А - номер или имя параметра транзакта, в который записывается считанная из потока ввода или потока в памяти строка, находящаяся на позиции текущей строки. После считывания позиция текущей строки увеличивается на единицу. Если такой параметр активного транзакта не существует, он создается.

Операнд В - номер потока данных, из которого производится считывание. По умолчанию равен 1, т. е. если операнд В не используется, считывание производится из потока номер один.

Операнд С - метка блока, в который направляется транзакт в случае ошибки считывания. Если операнд С не используется, код ошибки все равно сохраняется. Для его получения нужно использовать блок CLOSE. Коды ошибок:

  • 21 - во время попытки выполнить чтение был запрещен доступ к памяти;
  • 22 - файл не был открыт.

Например:

READ   Stroka_Text,4,Kon5

В примере блок READ считывает текстовую строку из потока данных номер 4 и записывает в параметр транзакта с именем Stro-ka_Text. Если текстовая строка считывается без ошибки, а параметр активного транзакта не существует, он создается. В случае ошибки строка не считывается и активный транзакт направляется к блоку с меткой Kon5.

8.1.4. Блок WRITE

Блок WRITE предназначен для передачи текстовой строки потоку данных. Формат блока:

WRITE             A,[B],[C],[D]

Операнд А - текстовая строка, которая должна быть передана потоку данных.

Операнд В - номер потока данных, по умолчанию равен 1.

Операнд С - метка блока, в который направляется транзакт в случае ошибки записи. Коды ошибок:

  • 0 - нет ошибки;
  • 31 - во время попытки выполнить запись был запрещен доступ к памяти;
  • 32 - файл не был открыт.

Операнд D - задает режим работы блока WRITE. Если операнд D не используется (по умолчанию) или равен ON, блок WRITE работает в режиме вставки. Если операнд D равен OFF - в режиме замены.

Режим вставки:

  • все текстовые строки, находящиеся на или за позицией текущей строки, сдвигаются на одну позицию;
  • если позиция текущей строки находится далеко за последней текстовой строкой, она устанавливается сразу после последней строки потока данных;
  • копия новой текстовой строки помещается на позицию текущей строки;
  • позиция текущей строки увеличивается на единицу. Режим замены:
  • если позиция текущей строки находится далеко за последней текстовой строкой, все промежуточные позиции заполняются нулевыми текстовыми строками;
  • текстовая строка, находящаяся на позиции текущей строки, удаляется;
  • копия новой текстовой строки помещается на позицию текущей строки;
  • позиция текущей строки увеличивается на единицу. Пример:
WRITE     "INITIAL    MX$TDon(1,1),420",5,Met3

В этом примере блок WRITE передает текстовую строку потоку данных с номером 5. Если происходит ошибка, активный транзакт переходит к блоку с меткой Met3. Иначе он переходит к следующему по порядку блоку. Если в данном случае поток данных является потоком вывода или потоком в памяти, запись производится в режиме вставки, так как операнд D не используется.

Замечание 1.Если операнды С блоков OPEN, CLOSE, READ и WRITE не используются, ошибка игнорируется. Обычно эти операнды используются для того, чтобы направить активный транзакт на блок CLOSE, который код ошибки помещает в параметр транзакта. Из параметра можно записать код ошибки в сохраняемую ячейку и завершить моделирование. Значение ячейки будет выведено в стандартном отчете.
Замечание 2.При построчном считывании данных из файла может оказаться, что на позиции текущей строки нет строки данных. Это происходит тогда, когда из файла считаны все текстовые строки. В данном случае активный транзакт входит в блок READ и далее направляется к блоку, метка которого указана операндом С. Код ошибки при этом не сохраняется.
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?

 

Владимир Крюков
Владимир Крюков
Казахстан