Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МГУПБ. Лаб. практ.мод. сист. в печать конечная...doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
4.54 Mб
Скачать

2. Создание процедуры на языке edl, реализующей запуск пользовательского интерфейса и передачу исходных данных переменным модели сводится к следующему.

2.1. В директории Procedures командой New Experiment Description контекстного меню создается новый эксперимент с описанием процедуры на языке Simplex-EDL:.

Для этого вводится оператор открытия процедуры EXPERIMENT и задается имя, например, Experiment.

EXPERIMENT Experiment

2.2. Для объявления внешней программы Delphi и ее вызова в разделе DECLARATION OF PROGRAMS необходимо ввести ссылку на программу Lotka.exe и указать типы входных и выходных параметров в следующей синтаксической форме:

DECLARATION OF PROGRAMS

<имя функции> (<типы входа> --> < типы выхода >)

DECLARATION OF PROGRAMS

Lotka(LOGICAL --> REAL,REAL,REAL,REAL,REAL,REAL,

REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL)

Если внешняя программа используется только для создания интерфейса, то входные параметры отсутствуют, но для соблюдения синтаксиса объявления внешней программы вводится любая фиктивная переменная например, Run (LOGICAL) := TRUE.

2.3. В разделе DECLARATION OF VARIABLES объявляются тип, название и исходное значение. переменных EDL, в которые будут переданы исходные данные из внешней программы

DECLARATION OF VARIABLES

Run (LOGICAL) := TRUE,

XE1(REAL):=0, XE2(REAL):=0, XE3(REAL):=0,

RE1(REAL):=0, RE2(REAL):=0, RE3(REAL):=0,

BE1_1 (REAL) := 0, BE1_2 (REAL) := 0, BE1_3 (REAL) := 0,

BE2_1 (REAL) := 0, BE2_2 (REAL) := 0, BE2_3 (REAL) := 0,

BE3_1 (REAL) := 0, BE3_2 (REAL) := 0, BE3_3 (REAL) := 0,

TE (REAL) := 2

2.4. Оператором BODY OF EXPERIMENT открывается тело процедуры с последовательным включением команд:

- снятия выбора модели UNSELECT,

- обнуления банка моделей RESETBANK <priv/LotkaVolterra>;

- проверки синтаксиса компонента

CHECK <priv/LotkaVolterra/BiosystemProc/Version0>;

- выбора банка моделей SELBANK<priv/LotkaVolterra>;

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

LotkaVolterra - CRMODEL< ModBiosystem>, < LotkaVolterra >;

2.5. Активация модели осуществляется при помощи команды ACTIVATE, например ACTIVATE < ModBiosystem>;

2.6.  Создание эксперимента.

Для этого необходимо ввести команду CREXP и название эксперимента. Например, CREXP BiosystemEx.

Выбор эксперимента осуществляется командой SELEXP. Например, SELEXP BiosystemEx.

2.7. Организация запуска эксперимента следует по команде CRRUN с указанием номера запуска и названия инсталлированной модели, например, CRRUN Run1, ModBiosystem.

Выбор запуска осуществляется командой SELEXP, например SELRUN Run1.

2.8. Создание обсервера эксперимента.

Для этого с помощью команды ADDVAR OBSCOMPLETE необходимо ввести название наблюдателя, исходную и конечную точки наблюдения и временной шаг. Далее оператором ADDVAR выбираются наблюдаемые переменные модели (в случае многоуровневой модели указывается полный путь доступа к данной переменной).

ADDVAR OBSCOMPLETE < ObsVol >, 0, 100, 0.1;

ADDVAR <ObsVol>, <X1>, <X2>, <X3>;

2.9. Присвоение значений переменных из внешней программы переменным EDL.

Для этого каждой переменной эксперимента присвоить соответствующее значение, полученное от внешней программы. В случае необходимости, воспользоваться оператором цикла LOOP. Синтаксис присвоения выглядит следующим образом:

(XE1, XE2, XE3, RE1, RE2, RE3, BE1_1, BE1_2, BE1_3,

BE2_1, BE2_2, BE2_3, BE3_1, BE3_2, BE3_3, TE):=Lotka(Run);

2.10. Присвоение переданных значений EDL переменным MDL-модели.

Для этого необходимо прописать полный путь до переменной MDL модели и присвоить ей значение соответствующей переменной EDL с помощью команды SETVAR.

SETVAR <X1>, XE1; SETVAR <X2>, XE2; SETVAR <X3>, XE3;

SETVAR <R1>, RE1; SETVAR <R2>, RE2; SETVAR <R3>, RE3;

SETVAR <B1_1>, BE1_1; SETVAR <B1_2>, BE1_2;

SETVAR <B1_3>, BE1_3; SETVAR <B2_1>, BE2_1;

SETVAR <B2_2>, BE2_2; SETVAR <B2_3>, BE2_3;

SETVAR <B3_1>, BE3_1; SETVAR <B3_2>, BE3_2;

SETVAR <B3_3>, BE3_3;

2.11. Запуск процесса моделирования.

Для этого необходимо ввести команду SIMULATE TO и количество машинных тактов, в течение которых должна проходить имитация.

SIMULATE TO, TE; # До времени TE

2.12. Вывод наблюдаемых данных.

Для это при помощи команды DRAW, необходимо ввести полный путь к переменной с указанием созданного наблюдателя и указать вариант представления present=Line - для графического представления, или present=Table - для представления результатов в виде таблицы. Например: DRAW <ObsVol#/BiosystemProc/X1>, <ObsVol#/BiosystemProc/X2>,

<ObsVol#/BiosystemProc/X3>, present=Line;

Также можно использовать оператор DISPLAY, синтаксис которого аналогичен Simplex-MDL

2.13. Удаление эксперимента и модели

Если с моделью и экспериментом в дальнейшем не предполагается производить каких либо действий ее возможно удалить посредством команд DELEXP и DELMODEL. Например:

SELEXP BiosystemEx;

DELEXP BiosystemEx;

SELMODEL ModBiosystem;

DELMODEL ModBiosystem;

2.14. Закрытие тела процедуры.

Для этого необходимо ввести оператор END OF и название процедуры, которое должно совпадать с названием в п. 2.1.

Полное описание эксперимента для ввода исходных данных через интерфейс внешней программы Delphi на языке EDL представлено в листинге 1.

EXPERIMENT Experim

DECLARATION OF PROGRAMS

Lotka(LOGICAL --> REAL,REAL,REAL,REAL,REAL,REAL,

REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL)

DECLARATION OF VARIABLES

Run (LOGICAL) := TRUE,

XE1(REAL):=0, XE2(REAL):=0, XE3(REAL):=0,

RE1(REAL):=0, RE2(REAL):=0, RE3(REAL):=0,

BE1_1 (REAL) := 0, BE1_2 (REAL) := 0, BE1_3 (REAL) := 0,

BE2_1 (REAL) := 0, BE2_2 (REAL) := 0, BE2_3 (REAL) := 0,

BE3_1 (REAL) := 0, BE3_2 (REAL) := 0, BE3_3 (REAL) := 0,

TE (REAL) := 2

BODY OF EXPERIMENT

UNSELECT;

RESETBANK <priv/LotkaVolterra>;

CHECK <priv/LotkaVolterra/BiosystemProc/Version0>;

SELBANK <priv/LotkaVolterra>;

CRMODEL <ModBiosystemProc>, <BiosystemProc>;

ACTIVATE <ModBiosystemProc>;

CREXP BiosystemProcEx;

SELEXP BiosystemProcEx;

CRRUN Run1, ModBiosystemProc;

SELRUN Run1;

OBSCOMPLETE <ObsVol>, 0, 100, 0.001;

ADDVAR <ObsVol>, <X1>, <X2>, <X3>;

(XE1, XE2, XE3, RE1, RE2, RE3, BE1_1, BE1_2, BE1_3,

BE2_1, BE2_2, BE2_3, BE3_1, BE3_2, BE3_3, TE):=Lotka(Run);

SETVAR <X1>, XE1; SETVAR <X2>, XE2; SETVAR <X3>, XE3;

SETVAR <R1>, RE1; SETVAR <R2>, RE2; SETVAR <R3>, RE3;

SETVAR <B1_1>, BE1_1; SETVAR <B1_2>, BE1_2;

SETVAR <B1_3>, BE1_3; SETVAR <B2_1>, BE2_1;

SETVAR <B2_2>, BE2_2; SETVAR <B2_3>, BE2_3;

SETVAR <B3_1>, BE3_1; SETVAR <B3_2>, BE3_2;

SETVAR <B3_3>, BE3_3;

SIMULATE TO, TE;

DRAW <ObsVol#/BiosystemProc/X1>, <ObsVol#/BiosystemProc/X2>,

<ObsVol#/BiosystemProc/X3>, present=Line;

SELEXP BiosystemProcEx;

DELEXP BiosystemProcEx;

SELMODEL ModBiosystemProc;

DELMODEL ModBiosystemProc;

END OF Experim