Добавил:
kaslp1939@mail.ru Казимиров Леонид Петрович , инженер- механик по летательным аппаратам Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СТАТИСТИЧЕСКОЕ МОДЕЛИРОВАНИЕСЛОЖНЫХ СИСТЕМ(АЛГОРИТМ И ПРОГРАММА).docx
Скачиваний:
0
Добавлен:
23.10.2021
Размер:
5.69 Mб
Скачать

Использование буфера обмена (бо)

Обмен данными с внешней процедурой происходит через буфер обмена БО. Порядок обмена происходит по следующей схеме.

За один цикл – одна реализация входного вектора

Пояснения к рисунку.

В программе ОБОЛОЧКА сформированный вектор входных параметров запоминается в БО. Внешняя процедура (счёт процесса) считывает данные из БО, производит расчёт и данные расчёта в виде выходного вектора снова записывает в БО. В программе ОБОЛОЧКА данные из БО считываются и обрабатываются.

Для обмена с БО используется файл CopyToClipboardTextQN.pas. Он содержит процедуры:

procedure TextCopyToClipbrdQ( BXStatProm:raX0_101); // копирование в буфер

procedure TextCopyFromClipbrdN(var BUX:raX); // копирование из буфера

Без ошибок обмен проходит только с использованием задержки. Она формируется в процедуре procedure Delay(Value: Cardinal); - входит в CopyToClipboardTextQN. Pas.

Для задания задержки используется переменная delayZ (описана в unit Global_ID_Data;).

Величина задержки была подобрана опытным путём и равна delayZ = 45;//задержка в 45 миллисекунд для обмена с буфером. При меньших значениях возникают сбои обмена (счёт просто не идёт). В случае возникновения сбоев (на другом компьютере), значение delayZ можно увеличить.

//Пример использования: Delay(delayZ );

//Delay(1000); //Задержка на одну секунду

Пояснение как создать необходимый exe-файл к программе «Оболочка» прилагается папка «Создание ехе Процесс».

В этой папке находятся файлы программы - program ProjectOfflineProcess;

Первое, что надо сделать – создать пустую папку. В папку помещаем

program ProjectOfflineProcess;

uses

Winapi.Windows,

Clipbrd,

Winapi.Messages,

System.SysUtils,

System.Classes,

Vcl.Graphics,

Vcl.Controls,

Vcl.Forms,

Vcl.Dialogs,

Vcl.Buttons,

shellAPi,

System.Math,

System.IOUtils,

Vcl.Grids,

Vcl.StdCtrls,

Vcl.ComCtrls,

Vcl.ExtCtrls,

System.Variants,

typeDATA,

Global_ID_Data,

OfflineProcess,

vektor,

CopyToClipboardTextQN ;

begin

TextCopyFromClipbrdQ( BXStat,Q,Nvux); // копирование из буфера

ShetModeli(BXStat ,BUX);

TextCopyToClipbrdN(BUX); // копирование в буфер

end.

Как создать ProjectOfflineProcess.

Запускаем программу (например LAZARUS) и открываем OfflineProcess.PAS. Корректируем этот файл «под себя». Файл содержит три процедуры (пример )

procedure ShetModeli(BX:raX; var BUX:raX );

(вспомогательные procedure ShetRami( BX:raX; var Rr :vekt);

procedure ShetShini(BX:raX; Rressor:vekt; var Rs :vekt);)

Главная – это- procedure ShetModeli(BX:raX; var BUX:raX );

Остальные – вспомогательные, количество их - не ограничено. Они используются в основной procedure ShetModeli. Структура procedure ShetModeli(BX:raX; var BUX:raX ); может быть различной, главное – НАЗВАНИЕ и ПАРАМЕТРЫ ИЗМЕНЯТЬ НЕЛЬЗЯ.

Что касается unit typeDATA; и unit Global_ID_Data. Первая – содержит описания типов переменных, вторая – понятно из названия - названия глобальных переменных. Можно их менять? Можно, желательно добавлять своими, не удаляя , которые есть.

Сохраняем.

Program ProjectOfflineProcess; Сама программа содержит 3 процедуры:

……..

begin

TextCopyFromClipbrdQ( BXStat,Q,Nvux); // копирование из буфера

ShetModeli(BXStat ,BUX);

TextCopyToClipbrdN(BUX); // копирование в буфер

end.

(Здесь - число входов Q; число выходов Nvux;)

Как видим, процедура счёта процесса ShetModeli(BXStat ,BUX);

входит в program ProjectOfflineProcess;

Кладём в папку подготовленные файлы

  1. Название папки результатов счёта.rtf

  2. Название входного вектора.rtf

  3. Название выходного вектора.rtf

  4. пусто.rtf

  5. Равномерный шаг.rtf

  6. Равномерное распределение.rtf

  7. Нормальный закон.rtf

  8. beta-распределение.rtf

  9. Гамма-распределение.rtf

Кладём файлы

TYPEDATA.PAS ,

VEKTOR.PAS, (содержит процедуры для работы с векторами и матрицами)

Global_ID_Data.pas,

OfflineProcess.PAS (счёт модели).

Компилируем и создаём EXE – файл.

Листинг program ObchijSTATModeling

program ObchijSTATModeling;

uses

Vcl.Forms,

VEKTOR in 'VEKTOR.PAS',

TYPEDATA in 'TYPEDATA.PAS',

Global_ID_Data in 'Global_ID_Data.pas',

ServisProcess in 'ServisProcess.PAS',

Unit1graf in 'Unit1graf.pas' {Form1Graf},

STATUNITProcess in 'STATUNITProcess .PAS',

Start in 'Start.pas' {Form1Start},

Strexplode in 'Strexplode.pas',

ProOtladka in 'ProOtladka.PAS',

Unit1TT in 'Unit1TT.pas' {Form1},

CopyToClipboardTextQN in 'CopyToClipboardTextQN.pas',

MainStatProcess in 'MainStatProcess.pas' {IdStatMode};

{$R *.res}

begin

Application.Initialize;

Application.MainFormOnTaskbar := True;

Application.CreateForm(TForm1Start, Form1Start);

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm1Graf, Form1Graf);

Application.CreateForm(TIdStatMode, IdStatMode);

Application.Run;

end.