Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 1. Анализ предметной области и постановка задач на проектирование



Содержание

 

 

ВВЕДЕНИЕ.. 7

Глава 1. Анализ предметной области.. 8

1. 1. Существующие программные комплексы.. 8

1. 2. Постановка задач на проектирование. 12

Глава 2. Проектирование программного комплекса. 15

2. 1. Разработка структурной схемы.. 16

2. 2. Разработка функциональной схемы.. 16

2. 2. 1. Блок управления схемой.. 20

2. 2. 2. Блок анализа текущих переключений.. 21

2. 2. 3. Интерпретатор сценариев. 22

2. 2. 4. Блок результатов. 23

Глава 3. Программная реализация проекта. 24

3. 1. Операционная система. 24

3. 2. Выбор среды программирования. 24

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

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

3. 5. Постоянная информация. 31

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

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

ЗАКЛЮЧЕНИЕ.. 35

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

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

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


ВВЕДЕНИЕ

 

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

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

В данной работе представлена идеология построения подобной программы – тренажера.


Глава 1. Анализ предметной области и постановка задач на проектирование

 

 

С момента появления персонального компьютера (ПК) и его практичес­кого использования возникла одновременно проблема получения значимого эффекта от компьютеризации процесса обучения. Ежегодно появляются сотни компьютерных обучающих программ.

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

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

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

Колоссальный скачок был сделан и в сфере развития систем контроля, ведь без них, по существу, обучающая система мало чем отличается от справочного пособия. Итак, средства контроля обеспечивают ввод ответа обучаемого, обработку полученной информации и выдачу управляющего воздействия (например, вы вводите ответ, а система одобряет или отвергает его).

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

Глава 2. Проектирование программного комплекса

 

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

Для реализации поставленных требований, необходимо разработать механизм, отрабатывающий оперативные переключения. Основная цель, преследуемая при этом – это упрощение управления коммутационными аппаратами со стороны пользователя.

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

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

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


Блок управления схемой

 

Для реализации функций блока управления схемой необходимо:

- установить коммутационные аппараты в положение соответствующее выбранному режиму;

- при выборе пользователем коммутационного аппарата на схеме обеспечить его переключение в противоположное состояние.

Алгоритм, реализующий функции блока управления схемой, представлен на рис. 3.3.1.

Рис. 3.3.1. Алгоритм обработки оперативных переключений


Интерпретатор сценариев

 

Основное предназначение – формирование последовательности переключений для выбранной задачи и передача информации о начальном положении коммутационных аппаратов. Эти сведения находятся в файле сценария решения поставленной задачи, который и подвергается обработке. Для этого используется алгоритм загрузки, приведенный на рис. 3.3.3.

Рис. 2.2.3. Алгоритм загрузки сценариев.

 


Блок результатов

 

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

Рис 2.2.4. Алгоритм определения оценки

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

Операционная система

 

Программа разрабатывалась под управлением операционной системы Windows 95. Операционная система (ОС) является неотъемлемой частью ПЭВМ. ОС обеспечивает управление всеми аппаратными компонентами и поддержку работы программ пользователя, предоставляя ему возможность общего управления машиной. Можно выделить ряд преимуществ для разработки программного обеспечения под управлением ОС Windows 95:

· Графический пользовательский интерфейс;

· Независимость от внешних устройств;

· Доступность всего объема оперативной памяти;

· Поддержка масштабируемых шрифтов.

Среди недостатков можно отметить:

· Высокие требования к аппаратному обеспечению;

· Менее эффективная работа в приложениях, где критический параметр – время по сравнению с ОС MS-DOS.

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

Алгоритм функционирования основного модуля программы приведен на рис 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. Однолинейная схема электроснабжения

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

 

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

               

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

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

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

   Имя: Павел

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

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

 

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

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

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

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

                  .     .     .

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


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

 

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. Нормальный режим работы электроустановки


Таблица 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»


Таблица 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»


Таблица 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 мВа


Таблица 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 мВа

Таблица 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)


Поделиться:



Последнее изменение этой страницы: 2019-10-03; Просмотров: 346; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.489 с.)
Главная | Случайная страница | Обратная связь