Разработка программы- тренажера Управление электросетями

Содержание

		

	

	ВВЕДЕНИЕ	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. Анализ предметной области и постановка задач на проектирование





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

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

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

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

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

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

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



Тренажер оперативных переключений ОПТИМЭС" – Оперативно-Переключательный Тренажер с Интеллектуальной Моделью Электрической Сети

Тренажер ОПТИМЭС работает в операционных средах WINDOWS 3.1, WINDOWS 95 и WINDOWS 98 и может эксплуатироваться на любом компьютере, на котором установлена какая-либо из них. Программный комплекс тренажера включает 3 функциональные компоненты:

Компонента Конструктор схем включает редактор коммутационных схем и функции их разметки, реализующие построение в базе данных модели первичных и вторичных цепей. =Конструктор схем° содержит также функции управления библиотекой схем.

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

Компонента Тренировка реализует выполнение тренируемым операций по схеме с контролем их правилами переключений. Практика показывает, что освоение специалистом по переключениям программы Тренировка требует не более 15 - 20 минут, если он знаком с общими приемами работы под WINDOWS. 

2. Тренажер оперативных переключений  КОРВИН

(КОммутационно-Режимный тренажер для WINdows), включающая расчет установившегося режима с автоматическим преобразованием расчетной схемы при любых коммутациях [2]. Расчет установившегося режима производится модулем КУРС разработки ЦДУ. Результаты расчета - перетоки активной и реактивной мощности и ток, а также напряжения в узлах, - контролируются на нарушения заданных режимных пределов по ветвям и узлам и отображаются непосредственно на схеме и в форме таблиц. Поддерживается разделение схемы на любое число изолированных районов. Подготовка исходных данных расчетной схемы максимально автоматизирована. Функциональная компонента Сервер потокораспределений, входящая в состав тренажера КОРВИН, содержит:

- функции автоматического построения графа узлов и ветвей расчетной схемы путем стягивания графа коммутационной модели;

- редактор исходных значений электрических параметров для расчета и режимных пределов по узлам и ветвям;

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

2. Тренажер оперативных переключений  КОРВИН 3 – трехуровневый  тренажер оперативных переключений с расчетом потокораспределения и расширенной моделью РЗА. Верхний уровень модели в тренажере "КОРВИН-3" включает схему энергообъектов и соединяющих их ВЛ. Число энергообъектов в модели одной электросети - до 150. Средний уровень модели реализует схему соединений первичных цепей и логические ограничения на коммутации в них. На этом уровне каждый энергообъект имеет свою схему, которая посредством линий электропередачи на верхнем уровне модели соединяется со схемами других энергообъектов. Схема одного энергообъекта может входить одновременно в несколько схем электросетей, охватывающих большую или меньшую территорию. Промежуточное положение между верхним и средним уровнями занимает схема замещения для расчета установившегося режима. Нижний уровень воспроизводит состояния устройств РЗА и правила их переключения с учетом положения коммутационных аппаратов. С каждым устройством первичных цепей связывается набор устройств РЗА.



Однако, все рассмотренные системы имеют общие недостатки:



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

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

Достаточно высокие требования к системе (объем оперативной памяти и размер жесткого диска).

 Очень высокая цена (как правило, она составляет несколько тысяч долларов).

Не совместимость версий одной и той же программы и форматов данных. 


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



Главное направление деятельности ЦЭС – обеспечение электроэнергией производств и цехов ОАО «Северсталь». Получая электрическую энергию от системы по воздушным линиям напряжением 110, 220 кВ и преобразуя на главных понизительных подстанциях (ГПП) до уровня 35, 10 и 6 кВ, цех электроснабжения по воздушным и кабельным линиям  распределяет ее потребителям. В настоящее время девять ГПП обеспечивают ОАО «Северсталь» и одна (ГПП-9) – город. От ТЭЦ-1 и ТЭЦ-2 ОАО «Северсталь» электроэнергия непосредственно передается напряжением 10 кВ по кабельным линиям. 

Для управления схемой электроснабжения ОАО «Северсталь» в ЦЭС организовано круглосуточное дежурство оперативного персонала, действия  которого подчинены диспетчеру цеха.

Система оперативного управления выполняет следующие задачи:

ведение требуемого режима работы, в том числе заданного энергосистемой;

производство переключений в электроустановках;

- ликвидация аварийных нарушений и восстановление требуемого режима энергопотребления;

- подготовка к производству ремонтных работ в электроустановках.

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

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

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

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

Проведение тренировок в самих системах электроснабжения нежелательно по ряду причин:

перебои в подаче электроэнергии

возможность создания аварийных ситуаций

повышенная опасность поражения электрическим током и др.

Компьютерный тренажер устраняет эти сложности.

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

Тренажер должен обладать следующими функциями:

тpениpовка;

проведение экзамена;

формирование протокола переключений;

создание сценария тренировки;

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

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

По завершении выполнения поставленных условий задачи должна выставляться оценка и составляться пpотокол переключений. 

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

         - имя и фоpмулиpовку задачи для тpениpовки;

         - исходное состояние объекта 

         - эталонный путь pешения задачи;

         - конечное состояние схемы сети по данной задаче.

Таким образом, разрабатываемая система должна отвечать следующим требованиям:

Обеспечить интуитивно-понятный графический интерфейс, как для инструктора, так и для тренируемого;

Внедрить механизм производства оперативных переключений

Обеспечить возможность наращивания количества задач за счет использования средств инструктора, которые могут быть дополнительно написаны;

Обеспечить проведение тренировок и сдачу экзамена с протоколированием оценок;

Программа должна иметь невысокие системные требования.


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



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

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

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

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

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


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







Рис. 2.1. Структурная схема программы-тренажера



Для описания структуры разрабатываемого программного комплекса его можно разделить на два основных блока: 

Блок, обеспечивающий работу пользователя со схемой;

Блок работы с файлами сценариев.

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

Второй блок программного комплекса является средством инструктора и служит для создания и редактирования файлов сценариев.

“Настройки” -   блок, предназначенный для указания начального и конечного состояния коммутационных аппаратов электроустановки 

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


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



Исходной информацией для разработки является однолинейная схема электроснабжения подстанции и инструкции по оперативным переключениям.

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

отображение функциональной схемы подстанции с использованием  средств отображения информации;

обеспечение переключения коммутационных аппаратов представленных на однолинейной схеме;

организация взаимодействия производимых переключений и предписаний инструкции.

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

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

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

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

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

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

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

Блок анализа текущих переключений  предназначен для определения правильности производства текущих переключений и формирования протокола переключений.

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

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





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



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

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

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

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



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




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



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



Рис 2.2.2 Алгоритм анализа текущих переключений


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



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



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




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



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



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

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

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

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



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

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

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

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

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

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

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

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

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

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



Последним достижением в технике создания программ стали появившиеся относительно недавно визуальные средства программирования и системы быстрой разработки (Rapid Application Development, RAD).

	Быстрая разработка приложений (RAD - Rapid Application Development) характерна для нового поколения систем программирования. Первым языком в мире более простого и наглядного интерфейса была среда Visual Basic (VB). Новый стиль взаимодействия с компьютером позволяет разработчику программы наглядно конструировать пользовательский интерфейс с помощью мыши. Но VB сам по себе не способствует хорошему проектированию. Этот язык испытывает недостаток в механизмах, обеспечивающих хорошее структурирование, компактность и прозрачность программ. В нем отсутствует строгость объектно ориентированного языка. Delphi - это следующий шаг в развитии среды RAD, это мощное и удобное средство создания 32-битных приложений для Windows 95 и Windows NT. 

	Концепция Delphi была реализована в конце 1994 года, когда вышла первая версия среды разработки. В основу этого программного продукта легли концепции объектно-ориентированного программирования на базе языка Object Pascal и визуального подхода к построению приложений.

	Delphi объединил несколько важнейших технологий:

	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. Вхождение в курс и регистрация обучаемого.

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

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

Выберите режим работы и задачу согласно п. 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.





5