1. Высокопроизводительный компилятор в машинный код.

Компилятор, встроенный в Delphi, обеспечивает высокую производительность, необходимую для построения приложений в архитектуре “клиент-сервер”. Этот компилятор в настоящее время является самым быстрым в мире, его скорость компиляции составляет свыше 120 тысяч строк в минуту на компьютере 486DX33. Он предлагает легкость разработки и быстрое время проверки готового программного блока. Кроме того, Delphi обеспечивает быструю разработку, без необходимости писать вставки на Си или ручного написания кода (хотя это возможно).

2. Объектно-ориентированная модель компонент.

Основной упор этой модели в Delphi делается на максимальном ре-использовании кода. Это позволяет разработчикам строить приложения весьма быстро из заранее подготовленных объектов, а также дает им возможность создавать свои собственные объекты для среды Delphi. В стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из более чем 270 базовых классов. Но если возникнет необходимость в решении какой-то специфической проблемы на Delphi, то следует просмотреть список свободно распространяемых или коммерческих компонент, разработанных третьими фирмами. На Delphi можно одинаково хорошо писать как приложения к корпоративным базам данных, так и, к примеру, игровые программы. Во многом это объясняется тем, что традиционно в среде Windows было достаточно сложно реализовывать пользовательский интерфейс. Событийная модель в Windows всегда была сложна для понимания и отладки. Но именно разработка интерфейса в Delphi является самой простой задачей для программиста.

3. Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов.

Среда Delphi включает в себя полный набор визуальных инструментов для скоростной разработки приложений (RAD - rapid application development), поддерживающей разработку пользовательского интерфейса и подключение к корпоративным базам данных. VCL - библиотека визуальных компонент, включает в себя стандартные объекты построения пользовательского интерфейса, объекты управления данными, графические объекты, объекты мультимедиа, диалоги и объекты управления файлами. Delphi 5, в отличие от предыдущих версий, позволяет создавать динамические массивы, длина которых определяется во время выполнения программы.

Но это не значит, что в Delphi могут работать только профессионалы. Среда разработки сохранила простоту и наглядность процесса создания приложений, основанного на использовании технологий визуального программирования. Компонентный подход позволяет легко и быстро создавать не только интерфейс программ, но и достаточно сложные механизмы доступа к данным, а также повторять и тиражировать удачные программные решения.


3. 3. Функционирование программы

1. Программа switchman.exe:

Объем, занимаемый на жестком диске 874 кб

Объем оперативной памяти 3440 кб

2. Условия выполнения программы

Операционная среда Windows 95 или выше

Разрешение экрана (рекомендуется) 800X600 pixels

Свободное место на диске (минимум) 895 кБ для запуска и не менее 1 мБ для создания файлов сценариев.

Никакого дополнительно установленного программного обеспечения и библиотек не требуется.

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

Графический интерфейс построен таким образом, чтобы пользователю было, как можно удобнее и понятней работать с программой. Все необходимые функции доступны через главное меню. Главное меню — это специальная панель инструментов, расположенная в верхней части экрана, которая содержит такие пункты меню, как: Файл, Режим работы, Пользователь, Результаты. Через эти меню становятся доступны основные функции программы.

Рис 3. 3. Пользовательский интерфейс программы.

Пользовательский интерфейс программы делится на три области:

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

Область, на которой отображается схема.

Область управления задачами.

Алгоритм функционирования основного модуля программы приведен на рис 3. 4.

Рис 3.4. Алгоритм функционирования основного модуля программы


3. 4. Входная информация

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

Таблица 1

Формулировка задачи Вывод в ремонт ВЛ 220 кВ «Агломерат 1»
Начальное положение коммутационных аппаратов Нормальный режим
Конечное положение коммутационных аппаратов Режим № 2
№ операции Объект схемы Состояние переключателя Комментарий
01 ABR1 0 Вывести АВР 1,2
02 CMB1 1 Включить СМВ1 яч.9
03 MBB1 0 Отключить МВ ввода В1 яч. 5
04 TRZ1 0 Отключить ТР1 яч. 5
05 SRZ1 0 Отключить ШР1 яч. 5
06 ABR1 0 Вывести АВР 3,4
07 CMB1 1 Включить СМВ2 яч.20
08 MBB3 0 Отключить МВ ввода В3 яч. 25
09 TRZ3 0 Отключить ТР3 яч. 25
10 SRZ3 0 Отключить ШР3 яч. 25
11 PBB2 0 Отключить ВВ 220 кВ яч 12
12 ODT3 0 Отключить ОД 220 кВ Т3
3. 5. Постоянная информация

В качестве постоянной информации используется принципиальная схема участка электроснабжения, изображенная на рис. 3.5.

Рис. 3.5. Однолинейная схема электроснабжения

3. 6. Выходная информация

Выходные данные — протокол тренировки либо протокол экзамена.

П Р О Т О К О Л Э К З А М Е Н А

-------------------------------------

Фамилия: Егоров

Имя: Павел

Отчество: Николаевич.

Дата сдачи экзамена: 27.06.2001 г.

ЗАДАЧА : Вывод в ремонт ВЛ «Агломерат 1».

-------------------------------------------------------

АВР 1,2 выведено.

Ошибка, Включить СМВ 1 яч. 9

. . .

Оценка: Удовлетворительно


3. 7. Инструкция для пользователя

1. Вхождение в курс и регистрация обучаемого.

1.1.    Запустите файл Switchman.exe.

1.2.    После запуска файла Switchman.exe введите с клавиатуры Ваши Фамилию, Имя, Отчество и нажмите кнопку "ОК".

1.3.    Выберите режим работы и задачу согласно п. 2.2. и нажмите кнопку "Начать".

2. Решение задачи.

Решение задачи начинается с предъявления обучаемому схемы п/станции. Опираясь на помощь тренажера, пользователь должен перевести коммутационное оборудование в состояние, сформулированное в названии задачи. Правила работы на компьютере при решении задач даны в п.п. 2.1. – 2.3.

2.1. Общее правило по работе с коммутационным оборудованием:

Курсор "мыши" - "стрелка" при подводе к коммутационному аппарату, который можно переключить должен перейти в мишень - "пальчик".

2.2. Выбор задач из списка.

Для выбора задачи, подведите курсор "мыши" к требуемой задаче, и либо нажмите левую клавишу "мыши" и кнопку "Начать", либо дважды щелкните по названию задачи.

2.3. Производство оперативных переключений

Выберите согласно п. 2.1. выберите нужный объект и нажмите левую клавишу "мыши".

3. Результаты.

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

Протокол переключений хранится в каталоге Info в файле Report.txt


ЗАКЛЮЧЕНИЕ

В результате можно сделать следующие выводы:

Разработанный тренажер прост в освоении. Обучаемый при работе с программой не испытывает никаких затруднений. Запуск программы максимально упрощен. Требования к аппаратному обеспечению минимальны. Наглядное изображение схем электроснабжения, использование всплывающих подсказок, дружественный интерфейс Windows, использование манипулятора "мышь" делают процесс обучения приятной работой.

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


СПИСОК ЛИТЕРАТУРЫ

1. Головинский И.А. Диагностика квалификации персонала на тренажере оперативных переключений. - =Вестник ВНИИЭ-99°, М., "ЭНАС", 1999.

2. Головинский И.А. КОРВИН - тренажер оперативных переключений с расчетом потокораспределения. - "Вестник ВНИИЭ-98", М., "ЭНАС", 1998, с. 127-132.

3. Головинский И.А. Понимание электрических схем компьютером. - "Вестник ВНИИЭ-99", М., "ЭНАС", 1999.

4. Коммутационные узлы энергосистем/Под ред. А.В. Шунтова. М.:Энерготомиздат,1997.

5. Культин Н. Delphi 4. Программирование на Object Pascal. BHV, Санкт-Петербург, 1999. – 480 с., ил.

6. Дэн Оузьер и др. Delphi 3. Освой самостоятельно. М.: “Издательство БИНОМ”, 1998 г. – 560 с.: ил.

7. Бондарев В. М., Рублинецкий В. И., Качко Е. Г. Основы программирования. Харьков: Фолио; Ростов н/Д: Феникс, 1998 – 368 с.

8. Справочная система Delphi

9. Фаронов В. В. Delphi 4. Учебный курс. М.: «Нолидж», 1999 – 464 с.:ил.

10. Дарахвелидзе П. Г., Марков Е. П., Котенок О. А. Программирование в Delphi 5. – СПб.:БХВ – Санкт-Петербург, 2000. – 784 с.: ил.


Приложение А. Сценарии решения задач

Разработанная система моделирует оперативные переключения обслуживающего персонала в действующих электроустановках (ДЭУ), переводящие технологическое оборудование из одного режима работы в другой. Рассматриваются следующие режимы работы:

·     Режим №1. Нормальный режим.

·     Режим №2. Выведена в ремонт ВЛ «Агломерат 2».

·     Режим №3. Выведена в ремонт ВЛ «Агломерат 1».

·     Режим №4. Выведен в ремонт Т1 63 мВа.

·     Режим №5. Выведен в ремонт Т2 63 мВа.

·     Режим №6. Выведен в ремонт Т3 100 мВа.

Нормальный режим.

Электроснабжение осуществляется от всех имеющихся источников электроэнергии и введенных в работу устройствах автоматического включения резерва (АВР).


Рис. 6.1. Нормальный режим работы электроустановки
Режим №2. Выведена в ремонт ВЛ 220 кВ «Агломерат 1»

Для перевода электроустановки в режим №2 и, обратно, в нормальный режим работы, пользователь должен выполнить операции согласно последовательности, указанной в таблице 3.

Таблица 3

Порядок перехода

с режима №1 на режим №2

Порядок перехода

с режима №2 на режим №1

1 Вывести АВР 1,2 Включить ОД3 220 кВ Т3
2 Включить СМВ1 яч.9 Включить ВВ 220 кВ яч 12
3 Отключить МВ ввода В1 яч. 5 Включить ШР1 яч 5
4 Отключить ТР1 яч. 5 Включить ТР1 яч 5
5 Отключить ШР1 яч. 5 Включить МВ ввода В1 яч 5
6 Вывести АВР 3,4 Отключить СМВ1 яч.9
7 Включить СМВ2 яч.20 Ввести АВР 1,2
8 Отключить МВ ввода В3 яч. 25 Включить ШР3 яч 25
9 Отключить ТР3 яч. 25 Включить ТР3 яч 25
10 Отключить ШР3 яч. 25 Включить МВ ввода В3 яч 25
11 Отключить ВВ 220 кВ яч 12 Отключить СМВ2 яч.20
12 Отключить ОД 220 кВ Т3 Ввести АВР 3,4

Состояние коммутационных аппаратов должно соответствовать схеме, приведенной на рис. 6.2.

Рис. 6.2. Выведена в ремонт ВЛ 220 кВ «Агломерат 1»


Режим №3. Выведена в ремонт ВЛ 220 кВ «Агломерат 2»

Для перевода электроустановки в режим №3 и, обратно, в нормальный режим работы, пользователь должен выполнить операции, согласно последовательности, указанной в таблице 4.

Таблица 4

Порядок перехода

с режима №1 на режим №3

Порядок перехода

с режима №3 на режим №1

1 Вывести АВР 1,2 Включить ОД1 220 кВ
2 Включить СМВ1 яч.9 Включить ОД2 220 кВ
3 Отключить МВ ввода В2 яч.14 Включить ВВ 220 кВ яч 10
4 Отключить ТР2 яч.14 Включить ТР2 яч.14
5 Отключить ШР2 яч.14 Включить ШР2 яч.14
6 Вывести АВР 3,4 Включить МВ ввода В2 яч.14
7 Включить СМВ2 яч.20 Отключить СМВ1 яч.9
8 Отключить МВ ввода В4 яч.31 Ввести АВР 1,2
9 Отключить ТР4 яч.31 Включить ТР4 яч.31
10 Отключить ШР4 яч.31 Включить ШР4 яч.31
11 Отключить. ВВ 220 кВ яч 10 Включить МВ ввода В4 яч.31
12 Отключить ОД1 220 кВ Отключить СМВ2 яч.20
13 Отключить ОД2 220 кВ Ввести АВР 3,4

Состояние коммутационных аппаратов должно соответствовать схеме, приведенной на рис. 6.3.

Рис. 6.3. Выведена в ремонт ВЛ 220 кВ «Агломерат 2»


Режим №4. Выведен в ремонт Т1 63 мВа

Для перевода электроустановки в режим №4 и, обратно, в нормальный режим работы, пользователь должен выполнить операции, согласно последовательности, указанной в таблице 5.

Таблица 5

Порядок перехода

с режима №1 на режим №4

Порядок перехода

с режима №4 на режим №1

1 Вывести АВР 3,4 Вывести АВР 1,2
2 Включить СМВ2 яч. 20 Включить СМВ1 яч. 9
3 Отключить МВ ввода В4 яч. 31 Отключить МВ ввода В2 яч. 14
4 Отключить ТР4 яч. 31 Отключить ВВ 220 кВ яч 10
5 Отключить ШР4 яч. 31 Включить ОД1 220 кВ
6 Вывести АВР 1,2 Включить ВВ 220 кВ яч 10
7 Включить СМВ1 яч. 9 Включить ШР4 яч. 31
8 Отключить МВ ввода В2 яч. 14 Включить ТР4 яч. 31
9 Отключить. ВВ 220 кВ яч 10 Включить МВ ввода В4 яч. 31
10 Отключить ОД1 220 кВ Отключить СМВ2 яч. 20
11 Включить. ВВ 220 кВ яч 10 Ввести АВР 3,4
12 Включить МВ ввода В2 яч. 14 Включить МВ ввода В2 яч. 14
13 Отключить СМВ1 яч. 9 Отключить СМВ1 яч. 9
14 Ввести АВР 1,2 Ввести АВР 1,2

Состояние коммутационных аппаратов должно соответствовать схеме, приведенной на рис. 6.4.

Рис. 6.4. Выведен в ремонт Т1 63 мВа


Режим №5. Выведен в ремонт Т2 63 мВа

Для перевода электроустановки в режим №5 и, обратно, в нормальный режим работы, пользователь должен выполнить операции, согласно последовательности, указанной в таблице 6.

Таблица 6

Порядок перехода

с режима №1 на режим №5

Порядок перехода

с режима №5 на режим №1

1 Вывести АВР 1,2 Вывести АВР 3,4
2 Включить СМВ1 яч. 9 Включить СМВ2 яч. 20
3 Отключить МВ ввода В2 яч. 14 Отключить МВ ввода В4 яч. 31
4 Отключить ТР2 яч. 14 Отключить ВВ 220 кВ яч 10
5 Отключить ШР2 яч. 14 Включить ОД2 220 кВ
6 Вывести АВР 3,4 Включить ВВ 220 кВ яч 10
7 Включить СМВ2 яч. 20 Включить ШР2 яч. 14
8 Отключить МВ ввода В4 яч. 31 Включить ТР2 яч. 14
9 Отключить. ВВ 220 кВ яч 10 Включить МВ ввода В2 яч. 14
10 Отключить ОД2 220 кВ Отключить СМВ1 яч. 9
11 Включить. ВВ 220 кВ яч 10 Ввести АВР С1,2
12 Включить МВ ввода В4 яч. 31 Включить МВ ввода В4 яч. 31
13 Отключить СМВ2 яч. 20 Отключить СМВ2 яч. 20
14 Ввести АВР 3,4 Ввести АВР 3,4

Состояние коммутационных аппаратов должно соответствовать схеме, приведенной на рис. 6.5.

Рис. 6.5. Выведен в ремонт Т2 63 мВа

Режим №6. Выведен в ремонт Т3 100 мВа

Для перевода электроустановки в режим №6 и, обратно, в нормальный режим работы, пользователь должен выполнить операции, согласно последовательности, указанной в таблице 7.

Таблица 7

Порядок перехода

с режима №1 на режим №6

Порядок перехода

С режима №6 на режим №1

1 Вывести АВР 1,2 Отключить ВВ 220 кВ яч 12 РПП 2
2 Включить СМВ1 яч. 9 Включить ОД3 220 кВ
3 Отключить МВ ввода В1 яч. 5 Включить ВВ 220 кВ яч 12 РПП 2
4 Вывести АВР 3,4 Включить ШР1 яч 5
5 Включить СМВ2 яч. 20 Включить ТР1 яч 5
6 Отключить МВ ввода В3 яч. 25 Включить МВ ввода В1 яч. 5
7 Отключить. ВВ 220 кВ яч 12 РПП2 Отключить СМВ1 яч. 9
8 Отключить ОД3 220 Кв Ввести АВР 1,2
9 Отключить ТР1 яч 5 Включить ШР3 яч 25
10 Отключить ШР1 яч 5 Включить ТР3 яч 2
11 Отключить ТР3 яч 25 Включить МВ ввода В3 яч. 25
12 Отключить ШР3 яч 25 Отключить СМВ2 яч. 20
13 Включить ВВ-220 кВ яч. 12 РПП2 Ввести АВР 3,4

Состояние коммутационных аппаратов должно соответствовать схеме, приведенной на рис. 6. 6.

Рис. 5.6. Выведен в ремонт Т3 100 мВа

Приложение Б. Листинг основного модуля программы

unit MainMenu;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, Gauges, Menus, ComCtrls, User1, Report,

NewScen, ImgList,Report1;

type

TForm1 = class(TForm)

TaskList: TListBox;

RunBtn: TButton;

ExtBtn: TButton;

MainMenu1: TMainMenu;

Menu1: TMenuItem;

Menu4: TMenuItem;

Menu41: TMenuItem;

Menu5: TMenuItem;

Bevel1: TBevel;

StatusBar1: TStatusBar;

Image1: TImage;

ODT2: TImage;

ODT1: TImage;

BB50: TImage;

ODT3: TImage;

PBB2: TImage;

MBB2: TImage;

CMB1: TImage;

MBB1: TImage;

ABR1: TImage;

TRZ2: TImage;

TRZ1: TImage;

TRZ4: TImage;

TRZ3: TImage;

MBB4: TImage;

CMB2: TImage;

MBB3: TImage;

SRZ2: TImage;

SRZ9: TImage;

SR10: TImage;

SRZ1: TImage;

SRZ4: TImage;

SR37: TImage;

SR20: TImage;

SRZ3: TImage;

ABR2: TImage;

ResultBtn: TButton;

Label1: TLabel;

HelpBtn: TButton;

New: TMenuItem;

N2: TMenuItem;

Exit: TMenuItem;

Image2: TImage;

StaticText1: TStaticText;

Menu52: TMenuItem;

Label2: TLabel;

Menu2: TMenuItem;

Menu21: TMenuItem;

Menu22: TMenuItem;

procedure ExtBtnClick(Sender: TObject);

procedure TaskListMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormActivate(Sender: TObject);

procedure RunBtnClick(Sender: TObject);

procedure Menu41Click(Sender: TObject);

procedure MBB1Click(Sender: TObject);

procedure MBB2Click(Sender: TObject);

procedure MBB3Click(Sender: TObject);

procedure MBB4Click(Sender: TObject);

procedure CMB1Click(Sender: TObject);

procedure CMB2Click(Sender: TObject);

procedure BB50Click(Sender: TObject);

procedure PBB2Click(Sender: TObject);

procedure TRZ1Click(Sender: TObject);

procedure TRZ2Click(Sender: TObject);

procedure TRZ3Click(Sender: TObject);

procedure TRZ4Click(Sender: TObject);

procedure SRZ1Click(Sender: TObject);

procedure SRZ2Click(Sender: TObject);

procedure SRZ3Click(Sender: TObject);

procedure SRZ4Click(Sender: TObject);

procedure SRZ9Click(Sender: TObject);

procedure SR10Click(Sender: TObject);

procedure SR20Click(Sender: TObject);

procedure SR37Click(Sender: TObject);

procedure ODT1Click(Sender: TObject);

procedure ODT2Click(Sender: TObject);

procedure ODT3Click(Sender: TObject);

procedure ABR1Click(Sender: TObject);

procedure ABR2Click(Sender: TObject);

procedure ResultBtnClick(Sender: TObject);

procedure HelpBtnClick(Sender: TObject);

procedure NewClick(Sender: TObject);

procedure Menu52Click(Sender: TObject);

procedure Menu21Click(Sender: TObject);

procedure Menu22Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

TStringList1 = class (TStringList);

TMyZap=class(TObject)

FNo:Integer;

FImage:ShortString;

FState:Integer;

FComment:ShortString;

constructor Create(No:Integer;Image:ShortString;State:Integer;Comment:ShortString);

end;

var

Form1: TForm1;

TaskNumber:Integer;

WorkMode:Integer;

List1:TStringList1;

ActList:TList;

Prot:TStringList;

Zap:TMyZap;

Switch:TImage;

 TaskName:string;

Error:integer;

Help:integer;

Count:Integer;

F: array [0..24] of boolean;

E: array [0..24] of boolean;

implementation

uses Results;

{$R *.DFM}

constructor TMyZap.Create(No:Integer;Image:ShortString;State:Integer;Comment:ShortString);

begin

inherited Create;

FNo:=No;

FImage:=Image;

FState:=State;

FComment:=Comment;

end;

procedure SWState(AOwner:TImage;i:integer);

begin

if F[i]=false then begin

with AOwner.Canvas do begin

Pen.Color:=clWhite;

MoveTo(6,1);

LineTo(6,17);

Pen.Width:=2;

Pen.Color:=clBlack;

Rectangle(1,1,17,17);

MoveTo(6,17);

LineTo(15,1);

end;

F[i]:=true;

end

else begin

with AOwner.Canvas do begin

Pen.Color:=clWhite;

MoveTo(6,17);

LineTo(15,1);

Pen.Width:=2;

 Pen.Color:=clBlack;

Rectangle(1,1,17,17);

MoveTo(6,1);

LineTo(6,17);

end;

F[i]:=false;

end;

end;

procedure ABRState(AOwner:TImage;i:integer);

begin

if F[i]=False then begin

 with AOwner.Canvas do begin

Brush.Color:=clWhite;

FloodFill(8,8,clBlack,fsSurface);

Pen.Width:=2;

Pen.Color:=clBlack;

MoveTo(1,15);

LineTo(8,1);

 MoveTo(8,1);

LineTo(17,15);

MoveTo(17,15);

LineTo(1,15);

end;

F[i]:=True;

end

else begin

with AOwner.Canvas do begin

FloodFill(8,8,clWhite,fsSurface);

Pen.Width:=2;

Pen.Color:=clBlack;

MoveTo(1,15);

LineTo(8,1);

MoveTo(8,1);

LineTo(17,15);

MoveTo(17,15);

LineTo(1,15);

Brush.Color:=clBlack;

FloodFill(8,8,clBlack,fsBorder);

end;

F[i]:=False;

end;

end;

procedure MVState(AOwner:TImage;i:integer);

begin

if F[i]=false then begin

with AOwner.Canvas do begin

Pen.Color:=clWhite;

MoveTo(9,6);

LineTo(9,11);

Pen.Width:=2;

Pen.Color:=clBlack;

Rectangle(1,1,17,17);

MoveTo(6,8);

LineTo(11,8);

end;

 F[i]:=true;

end

else begin

with AOwner.Canvas do begin

Pen.Color:=clWhite;

MoveTo(6,8);

LineTo(11,8);

Pen.Width:=2;

Pen.Color:=clBlack;

 Rectangle(1,1,17,17);

MoveTo(9,6);

LineTo(9,11);

end;

F[i]:=false;

end;

end;

function Analyze(AOwner:TComponent):boolean;

begin

Zap:=ActList.First;

if WorkMode=0 then

if (Zap.FImage=AOwner.Name)

then begin

if Zap.FImage<>'0' then ActList.Delete(ActList.IndexOf(ActList.First));

Result:=true;

Form1.Label1.Caption:='';

Prot.Append(Zap.FComment);

end

else begin

Form1.Label1.Caption:=' Ошибка';

Prot.Append('Ошибка, '+Zap.FComment);

Error:=Error+1;

Result:=false;

end

else Count:=Count+1;

Form1.ResultBtn.Visible:=True;

end;

{Считывание информации дла решения задач}

procedure Read;

var Fil:textfile;

s:string;

j:integer;

begin

for j:=1 to 10 do begin

s:='Info\'+IntToStr(j)+'.str';

assign(fil,s);

reset(fil);

readln(fil,s);

Form1.TaskList.Items.Insert(j-1,s);

end;

end;

procedure ReadInfo(Num:integer);

var Fil:textfile;

s,s1:string;

i,j:integer;

begin

ActList:=TList.Create;

s:='Info\'+IntToStr(Num)+'.str';

assign(fil,s);

reset(fil);

readln(fil,s);

readln(fil,s);

for i:=0 to 24 do

if s[i+1]='1' then F[i]:=true

else F[i]:=false;

readln(fil,s);

for i:=0 to 24 do

if s[i+1]='1' then E[i]:=true

else E[i]:=false;

for i:=1 to 15 do begin

readln(fil,s);

s1:=s;

for j:=1 to 7 do s1[j]:=' ';

ActList.Add(TMyZap.Create(StrToInt(s[1]+s[2]),s[3]+s[4]+s[5]+s[6],StrToInt(s[7]),s1));

end;

closefile(fil);

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Form1.ResultBtn.Visible:=False;

Form1.HelpBtn.Visible:=False;

Form1.Label2.Visible:=false;

Image1.Visible:=False;

 Image2.Visible:=False;

StaticText1.Visible:=False;

Label2.Visible:=False;

StatusBar1.Panels[2].Text:='Выберите режим работы и задачу.';

StatusBar1.Panels[3].Text:='Режим работы: ';

TaskList.ItemIndex:=0;

TaskNumber:=0;

Read;

User1.User.ShowModal;

end;

procedure TForm1.ExtBtnClick(Sender: TObject);

begin

 if Prot<>nil then Prot.Clear;

 if ActList<>nil then ActList.Clear;

 if Prot<>nil then Prot.Clear;

 Application.Terminate;

end;

procedure TForm1.TaskListMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var Point:TPoint;

begin

Point.X:=Y;Point.Y:=Y;

TaskNumber:=TaskList.ItemAtPos(Point,true);

StatusBar1.Panels[2].Text:=Form1.TaskList.Items.Strings[TaskNumber];

StatusBar1.Panels[1].Text:='№'+IntToStr(1+TaskList.ItemAtPos(Point,true));

end;

procedure TForm1.RunBtnClick(Sender: TObject);

var s:string;

begin

TaskList.Visible:=False;

if WorkMode=0 then begin

StatusBar1.Panels[3].Text:='Режим работы: Тренировка';

Form1.HelpBtn.Visible:=true;

Form1.Label1.Visible:=true;

Form1.Label2.Visible:=true;

ResultBtn.Caption:='Результаты';

end;

Image1.Visible:=true;

Image2.Visible:=true;

StaticText1.Visible:=true;

ReadInfo(TaskNumber+1);

Error:=0;

Help:=0;

Form1.Caption:=TaskList.Items[TaskNumber];

{Начальные условия}

SWState(ODT2,0);

SWState(ODT1,1);

SWState(ODT3,3);

MVState(MBB1,10);

MVState(MBB2,7);

MVState(MBB3,19);

MVState(MBB4,17);

MVState(CMB1,8);

MVState(CMB2,18);

MVState(PBB2,4);

MVState(BB50,2);

SWState(TRZ1,6);

SWState(TRZ2,5);

SWState(TRZ3,16);

SWState(TRZ4,15);

SWState(SRZ1,14);

SWState(SRZ2,11);

SWState(SRZ3,24);

SWState(SRZ4,20);

SWState(SRZ9,12);

SWState(SR10,13);

SWState(SR20,23);

SWState(SR37,21);

ABRState(ABR1,9);

ABRState(ABR2,22);

Prot:=TStringList.Create;

if WorkMode=0 then s:=(' тренировки')

else s:=(' экзамена');

Prot.Append('  Протокол'+s);

Prot.Append(' ---------------------------');

Prot.Append('Фамилия: '+User1.N1);

Prot.Append('Имя: '+User1.N2);

Prot.Append('Отчество: '+User1.N3);

Prot.Append(' ЗАДАЧА: '+TaskList.Items[TaskNumber]);

Prot.Append(' --------------------------------------------');

if WorkMode=0 then s:=(' прохождения тренировки: ')

else s:=(' сдачи экзамена: ');

Prot.Append('Дата '+s+DateToStr(Date));

end;

procedure TForm1.Menu41Click(Sender: TObject);

begin

User.ShowModal;

end;

procedure TForm1.MBB1Click(Sender: TObject);

begin

if Analyze(MBB1)=True then MVState(MBB1,10)

 else MVState(MBB1,10);

if F[10]=true then

end;

procedure TForm1.MBB2Click(Sender: TObject);

begin

if Analyze(MBB2)=True then MVState(MBB2,7)

else MVState(MBB2,7);

end;

procedure TForm1.MBB3Click(Sender: TObject);

begin

if Analyze(MBB3)=True then MVState(MBB3,19)

else MVState(MBB3,19);

end;

procedure TForm1.MBB4Click(Sender: TObject);

begin

if Analyze(MBB4)=True then MVState(MBB4,17)

else MVState(MBB4,17);

end;

procedure TForm1.CMB1Click(Sender: TObject);

begin

if Analyze(CMB1)=True then MVState(CMB1,8)

else MVState(CMB1,8);

end;

procedure TForm1.CMB2Click(Sender: TObject);

begin

if Analyze(CMB2)=True then MVState(CMB2,18)

else MVState(CMB2,18);

end;

procedure TForm1.BB50Click(Sender: TObject);

begin

if Analyze(BB50)=True then MVState(BB50,2)

else MVState(BB50,2);

end;

procedure TForm1.PBB2Click(Sender: TObject);

begin

if Analyze(PBB2)=True then MVState(PBB2,4)

 else MVState(PBB2,4);

end;

procedure TForm1.TRZ1Click(Sender: TObject);

begin

if Analyze(TRZ1)=True then SWState(TRZ1,6)

else SWState(TRZ1,6);

end;

procedure TForm1.TRZ2Click(Sender: TObject);

begin

if Analyze(TRZ2)=True then SWState(TRZ2,5)

else SWState(TRZ2,5);

end;

procedure TForm1.TRZ3Click(Sender: TObject);

begin

if Analyze(TRZ3)=True then SWState(TRZ3,16)

else SWState(TRZ3,16);

end;

procedure TForm1.TRZ4Click(Sender: TObject);

begin

if Analyze(TRZ4)=True then SWState(TRZ4,15)

else SWState(TRZ4,15);

end;

procedure TForm1.SRZ1Click(Sender: TObject);

begin

if Analyze(SRZ1)=True then SWState(SRZ1,14)

else SWState(SRZ1,14);

end;

procedure TForm1.SRZ2Click(Sender: TObject);

begin

if Analyze(SRZ2)=True then SWState(SRZ2,11)

else SWState(SRZ2,11);

end;

procedure TForm1.SRZ3Click(Sender: TObject);

begin

if Analyze(SRZ3)=True then SWState(SRZ3,24)

 else SWState(SRZ3,24);

end;

procedure TForm1.SRZ4Click(Sender: TObject);

begin

if Analyze(SRZ4)=True then SWState(SRZ4,20)

else SWState(SRZ4,20);

end;

procedure TForm1.SRZ9Click(Sender: TObject);

begin

if Analyze(SRZ9)=True then SWState(SRZ9,12)

else SWState(SRZ9,12);

end;

procedure TForm1.SR10Click(Sender: TObject);

begin

if Analyze(SR10)=True then SWState(SR10,13)

else SWState(SR10,13);

end;

procedure TForm1.SR20Click(Sender: TObject);

begin

if Analyze(SR20)=True then SWState(SR20,23)

else SWState(SR20,23);

end;

procedure TForm1.SR37Click(Sender: TObject);

begin

if Analyze(SR37)=True then SWState(SR37,21)

else SWState(SR37,21);

end;

procedure TForm1.ODT1Click(Sender: TObject);

begin

if Analyze(ODT1)=True then SWState(ODT1,1)

else SWState(ODT1,1);

end;

procedure TForm1.ODT2Click(Sender: TObject);

begin

if Analyze(ODT2)=True then SWState(ODT2,0)

else SWState(ODT2,0);

end;

procedure TForm1.ODT3Click(Sender: TObject);

begin

if Analyze(ODT3)=True then SWState(ODT3,3)

else SWState(ODT3,3);

end;

procedure TForm1.ABR1Click(Sender: TObject);

begin

if Analyze(ABR1)=True then ABRState(ABR1,9)

else ABRState(ABR1,9);

end;

procedure TForm1.ABR2Click(Sender: TObject);

begin

if Analyze(ABR2)=True then ABRState(ABR2,22)

else ABRState(ABR2,22);

end;

procedure TForm1.ResultBtnClick(Sender: TObject);

var i:integer;

s:string;

begin

Error:=0;

Count:=0;

if WorkMode=1 then begin

for i:=0 to 24 do if E[i]=F[i] then Error:=Error+1;

if Error=0 then s:='Хорошо';

if Error=1 then s:='Удовлетворительно';

if Error>2 then s:='Неудовлетворительно';

Results.Result.Label1.Caption:='Оценка: '+s;

Prot.Append('Оценка: '+s);

Results.Result.ShowModal;

TaskList.Visible:=True;

end;

if (WorkMode=0)and(Zap.FNo=0)and(Zap.FImage='0000')and(Zap.FState=0) then begin

Prot.Append('Количество ошибок: '+IntToStr(Error));

Prot.Append('Количество обращений к подсказке: '+IntToStr(Help));

Results.Result.Label1.Caption:='Количество ошибок: '+IntToStr(Error);

Results.Result.Label2.Caption:='Количество обращений к подсказке: '+IntToStr(Help);

Results.Result.ShowModal;

Actlist.Clear;

TaskList.Visible:=True;

end;

end;

procedure TForm1.HelpBtnClick(Sender: TObject);

begin

if StatusBar1.Panels[1].Text='№'

then

Label1.Caption:=' Выберите задачу'

else

begin

Zap:=ActList.First;

Label1.Caption:=Zap.FComment;

Help:=Help+1;

end;

end;

procedure TForm1.NewClick(Sender: TObject);

begin

FormScene.Position:=poScreenCenter;

FormScene.ShowModal;

end;

procedure TForm1.Menu52Click(Sender: TObject);

var s:string;

i:integer;

begin

Report.ReportForm.ProtList.Clear;

if Prot<>nil then begin

for i:=0 to Prot.Count-1 do

Report.ReportForm.ProtList.Items.Append(Prot.Strings[i]);

s:=TimeToStr(Now);

if FileExists('Info\Report.txt') then Prot.SaveToFile('Info\Report'+s[7]+'.txt')

else Prot.SaveToFile('Info\Report.txt');

ReportForm.ShowModal;

end;

end;

procedure TForm1.Menu21Click(Sender: TObject);

begin

WorkMode:=0;

StatusBar1.Panels[3].Text:='Режим работы: Тренировка';

Form1.HelpBtn.Visible:=true;

Form1.Label1.Visible:=true;

Form1.Label2.Visible:=true;

ResultBtn.Caption:='Результаты';

end;

procedure TForm1.Menu22Click(Sender: TObject);

begin

WorkMode:=1;

StatusBar1.Panels[3].Text:='Режим работы: Экзамен';

Form1.HelpBtn.Visible:=false;

Form1.Label1.Visible:=false;

Form1.Label2.Visible:=false;

ResultBtn.Caption:='Готово';

end;

end.


Информация о работе «Разработка программы- тренажера Управление электросетями»
Раздел: Информатика, программирование
Количество знаков с пробелами: 50931
Количество таблиц: 6
Количество изображений: 14

Похожие работы

Скачать
137602
41
21

... 400/400 ПН-2-250/200 ПН-2-250/200 ПН-2-100/100 ПН-2-250/150 ПН-2-250/150 ПН-2-250/150 ПН-2-250/150 13 Технико-экономическое сравнение двух вариантов схемы электроснабжения микрорайона   Выбор вариантов схемы электроснабжения производится на основе сопоставления двух вариантов: I – кольцевая схема (рисунок 8) и II - двухлучевая магистральная схема (рисунок 9). Расчет производится по ...

Скачать
195938
7
27

... М.Н. ________________ «___»__________1996г. Д И П Л О М Н А Я Р А Б О Т А «Возможности радиолокационного тренажера NMS-90 и его использование для решения задач расхождения в условиях ограниченной видимости» ШИФР _________________ ИСПОЛНИТЕЛЬ ...

Скачать
255323
33
27

... в помещении представлена на рисунке 4.1 Рисунок 4.1 - Схема размещения светильников в аудитории № 209. Заключение В работе проведено исследование использования программ дистанционного обучения для подготовки учебно-методической документации, описаны их положительные стороны и выявлены основные проблемы. В результате проведенного исследования разработано web-приложение "R@Learning ...

Скачать
155526
18
13

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

0 комментариев


Наверх