Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИЖКА_Моделювання систем у GPSS World.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.15 Mб
Скачать
    1. Вбудована бібліотека процедур

Існує два типи бібліотек: бібліотека користувача і вбудована бібліотека GPSS World. Бібліотека користувача створюється самим користувачем. Вбудована бібліотека містить готові до використання в будь-якому Plus-виразі наступні процедури:

  • обслуговуючі;

  • файлові;

  • динамічного виклику;

  • математичні;

  • ймовірнісних розподілів;

  • рядкові;

  • запиту стану транзакту.

Обслуговуючі процедури використовуються для керування імітацією та аналізом експериментів. До них належать:

  • DoCommand – компілює і виконує оператор GPSS:

DoCommand (CommandString)

де CommandString – рядкове представлення оператора GPSS. Процедура викликається лише з експериментів. Оскільки компіляція рядка здійснюється у глобальній області видимості, змінні та аргументи процедури є недоступними, тому вони не можуть використовуватися у командному рядку;

  • Anova – здійснює багатофакторний дисперсійний аналіз:

StandartError=Anova(ResultMatrixName,ReplicateDimension, InteractionLimit)

де ResultMatrixName – назва матриці, яка містить дані для дисперсійного аналізу; ReplicateDimension – вимір матриці, яка використовується для реплік; InteractionLimit – обмеження в дисперсійному аналізі щодо взаємодій між факторами, може приймати значення 1, 2, 3. Anova повертає значення Standard Еrror, що є значенням стандартної помилки у дисперсійному аналізі. Якщо знайдена помилка, то повертається 0;

  • Exit – завершує сеанс роботи з GPSS World:

Exit(ExitCode)

де ExitCode приймає значення-1, 0, і 1, які відповідно означають “не зберігати нічого”, “дати запит на збереження змінених файлів” і “Зберігати все” (відкриті об’єкти “Модель” і “Процес моделювання”).

Файлові процедури використовуються для керування потоками даних у PLUS-процедурах. До них належать:

  • Open – відкриває файл:

ReturnCode=Open(DataStream,FileNameString)

де DataStream – номер нового файлу, що відкривається (потоку даних); FileNameString – назва файлу, що відкривається; ReturnCode – код результату виконання операції (0 – немає помилки; 10 – довга назва файлу; 11 – помилка читання зовнішнього файлу; 12 – під час спроби відкрити файл був заборонений доступ до пам’яті);

  • Close – закриває файл і вказує код помилки:

ReturnCode=Close(DataStream)

де DataStream – номер файлу, що закривається (потоку даних); ReturnCode – ре­зультат виконання операції (0 – немає помилки, 41 – запис файлу на диск не здійснений через помилку введення-виведення; 42 – файл не був відкритий);

  • Read – зчитує текстовий рядок з файлу:

ReturnString=Read(DataStream)

де DataStream – номер файлу (потоку даних), з якого здійснюється зчитуван­ня; коди результату виконання операції (0 – немає помилки; 21 – під час спроби здійснити читання був заборонений доступ до пам’яті; 22 – файл не був відкритий);

  • Write – записує текстовий рядок у файл

ReturnCode=Write(DataStream,SourceString)

де DataStream – номер файлу, в який здійснюється запис; SourceString – рядок, який записується у файл; ReturnCode – код результату виконання операції (0 – немає помилки; 31 – під час спроби здійснити запис був заборонений доступ до пам’яті; 32 – файл не був відкритий);

  • Seek – встановлює позицію поточного рядка файлу:

PreviousLinePosition=Seek(DataStream,NewLinePosition)

де DataStream – номер файлу, в якому встановлюється нова позиція поточного рядка; NewLinePosition – нове значення позиції поточного рядка; PreviousLinePosition – попереднє значення поточного рядка; 51 – код помилки: файл не був відкритий;

Процедури динамічного виклику використовуються для виклику функцій, що зберігаються на зовнішніх виконавчих файлах, включаючи бібліотеку DLL:

  • Call – викликає зовнішню CDECL-функцію без аргументів:

ReturnCode=Call(ExecutabFileName,FunctionName)

  • Call_Integer викликає зовнішню CDECL-функцію з цілочи­сельним аргументом:

ReturnCode=Call_Integer(ExecutabFileName,FunctionName,Argument)

  • Call_String викликає зовнішню CDECL-функцію з одним символьним аргументом (char):

ReturnCode=Call_String(ExecutabFileName,FunctionName,Argument)

  • Call_Real викликає зовнішню CDECL-функцію з одним дійсним аргументом (double):

ReturnCode=Call_Real(ExecutabFileName,FunctionName,Argument)

Тут всюди ExecutableFileName – назва модуля (.DLL або .EXE файлу), що містить функцію, яка викликається; FunctionName – назва функції, яка викликається.

Математичні процедури:

  • ABS – абсолютне значення: ABS(Expression);

  • ATN – арктангенс: ATN(Expression);

  • COS – косинус: COS(Expression);

  • EXP – експонента: EXP(Expression);

  • INT – виділяє цілу частину з відкиданням дробової частини: INT(Expression);

  • LOG – натуральний алгоритм: LOG(Expression);

  • SIN – синус: SIN(Expression);

  • SQR – здобуває квадратний корінь: SQR(Expression);

  • TAN – тангенс: TAN(Expression), де всюди Expression – Plus-вираз.

Рядкові процедури виконують операції з рядками:

  • Align – вставляє один рядок у інший з вирівнюванням за правим краєм

ReturnString=Align(InsertString, SourceString,Offset)

де InsertString – рядок, який потрібно вставити; SourceRtring – рядок, в який буде вставлений перший рядок; Offset – зміщення у рядку SourceString для першого символа рядка InsertString, починаючи з якого буде вставля­тись рядок. Процедура повертає значення Return String, що є результатом запису рядка Insert String у рядок SourceString зі зміщенням Offset;

  • Catenate – об’єднує два рядки String 1 i String 2:

ReturnString=Catenate(String1,String2)

  • Copies – створює один рядок із декількох копій вихідного рядка:

ReturnString=Copies(SourceString,Count)

де SourceString – рядок, який буде розмножений; Count – кількість копій;

  • Datetype – визначає тип даних аргумента;

ReturnString=Datatype(Datum),

де Datum – дані, типи яких необхідно визначити;

  • Find – обчислює зміщення одного рядка, що міститься в іншому рядку:

ReturnInteger=Find(TestString, SourceString)

де TestString – рядок для пошуку; SourceString – рядок, в який буде здійснений пошук рядка TestString;

  • Left – повертає ліву частину заданого рялдка:

ReturnString=Left(SourceString,MaxCount)

де SourceString – вихідний рядок; MaxCount – максимальна кількість символів у кінцевому рядку.

  • Length – підраховує кількість символів у рядку:

ReturnInteger=Length(SourceString)

де SourceString – вихідний рядок;

  • Lowercase – переводить усі прописні літери у рядкові:

ReturnString=Lowercase(SourceString)

де SourceString – вихідний рядок;

  • Place – вставляє один рядок у інший з вирівнюванням по лівому краю:

ReturnString=Place(InsertString,SourceString,Offset)

де InsertString – рядок, який потрібно вставити; SourceString – рядок, в який буде вставлений перший рядок; Offset – зміщення у рядку SourceString для найлівішого символа рядка InsertString, починаючи з якого буде вставлятись рядок;

  • PolyCatenate здійснює об’єднання двох і більше рядків в один рядок:

ReturnString=PolyCatenate(String1,...)

де String1, ... – рядки, які об’єднуються послідовно;

  • Right –повертає праву частину заданого рядка:

ReturnString=Right(SourceString,MaxCount)

де SourceString –вихідний рядок; MaxCount – максимальна кількість символів у кінцевому рядку

  • String – перетворює дані у їх рядковий еквівалент:

ReturnString=String(Datum)

де Datum – вихідні дані;

  • StringCompare – порівнює два рядка:

ReturnInteger=StringCompare(String1,String2)

де String1,String2 – рядки, що порівнюються;

  • Substring – повертає частину рядка:

ReturnString=Substring(SourceString,Offset,MaxCount)

де SourceString – вихідний рядок; Offset – зміщення першого символу підряд­ка; MaxCount – максимальна кількість символів у підрядку, що виділяється;

  • Trim – видалення пробілів з початку і з кінця рядків:

ReturnString=Trim(SourceString)

де SourceString –вихідний рядок;

  • Uppercase – перетворює рядкові літери у великі:

ReturnString=Uppercase(SourceString)

де SourceString –вихідний рядок;

  • Value – перетворює рядок у числовий еквівалент:

ReturnReal=Value(Datum)

де Datum – елемент даних, які підлягають перетворенню;

  • Word – виймає слово із рядка:

ReturnString=Word(SourceString,WordNumber)

де SourceString – вихідний рядок; WordNumber – порядковий номер слова в рядку SourceString.

Процедури запиту стану транзакта повертають інформацію про стан транзакта, що є у моделі:

  • QueryXNExist – повертає 1, якщо транзакт є в моделі, інакше – 0:

QueryXNExist(TransactionNumber);

  • QueryXNParameter – повертає значення параметра транзакту:

QueryXNParameter (TransactionNumber,Parameter);

де Parameter – номер або назва параметра транзакту;

  • QueryXNAssemblySet – повертає номер сімейства транзакту:

QueryXNAssemblySet (TransactionNumber);

  • QueryXNPriority – повертає пріоритет транзакту:

QueryXNPriority (TransactionNumber);

  • QueryXNМ1– повертає час входу транзакту в систему:

QueryXNМ1(TransactionNumber)

Всюди TransactionNumber – це номер транзакта.