Разработка программы- тренажера Управление электросетями
с.:ил.
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.
-----------------------
[pic]
[pic]
[pic]
[pic]
[pic]
[pic]
[pic]
Страницы: 1, 2, 3
|