Модернизация автоматизированной системы управления расходом топлива газовой котельной промышленного предприятия ООО Альфа

Заказать уникальную дипломную работу
Тип работы: Дипломная работа
Предмет: Автоматизация
  • 127 127 страниц
  • 30 + 30 источников
  • Добавлена 26.05.2018
2 500 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
ВВЕДЕНИЕ 4
1 ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ 6
1.1 Описание технологического процесса 6
1.2 Анализ газовой котельной как объекта автоматизации 8
1.3 Функции комплекса автоматизации 11
2 ОБЗОР И АНАЛИЗ СУЩЕСТВУЮЩИХ СРЕДСТВ АВТОМАТИЗАЦИИ ГАЗОВЫХ КОТЕЛЬНЫХ 15
2.1 Общие сведения 15
2.2 Обзор существующих средств автоматизации 17
2.2.1 Автоматизация на базе контроллера «СПЕКОН СК» 17
2.2.2 Автоматизация на базе контроллера «АГАВА-6432» 21
2.3 Автоматизированная система контроля и управления газовой котельной 23
2.3.1 Назначение и основные функции АСУ ГК 23
2.3.2 Характеристика объекта автоматизации 25
2.3.3 Характеристика системы в целом 25
2.3.3.1 Структура АСУ ГК 25
2.3.3.2 Верхний уровень 26
2.3.3.3 Средний уровень 30
2.3.3.4 Подсистемы контроля и управления котлами 31
2.3.3.5 Подсистема контроля и управления вспомогательным оборудованием и средствами измерения 33
2.3.3.6 Подсистема коммерческого учета 36
2.3.3.7 Полевая информационная шина 38
2.3.3.8 Нижний уровень 38
2.4 Описание алгоритма функционирования системы 39
2.5 Моделирование системы автоматического регулирования расхода газа 47
2.5.1 Выбор контура регулирования 47
2.5.2 Выбор технических средств автоматизации 47
2.5.3 Измерительный элемент (датчик расхода) 48
2.5.4 Регулирующий элемент (промышленный контроллер) 52
2.5.5 Исполнительный механизм (сервомотор) 52
2.5.6 Регулирующий орган (отсекающий клапан) 55
2.6. Структурная схема контура регулирования 56
2.7 Выбор закона регулирования 57
2.8 Выбор передаточных функций для каждого элемента системы 62
2.8.1 Передаточная функция объекта регулирования 62
2.8.2 Передаточная функция регулирующего элемента 62
2.8.3 Передаточная функция исполнительного механизма 63
2.8.4 Передаточная функция измерительного элемента 63
2.9 Создание модели системы 64
2.9.1 Исследование качества процесса регулирования 66
2.9.2 Анализ устойчивости по ЛАЧХ и ЛФЧХ 68
2.9.3 Анализ устойчивости системы по корням характеристического уравнения 69
2.9.4 Анализ устойчивости по критерию Найквиста 70
3 ЭКОНОМИЧЕСКИЙ РАЗДЕЛ 73
3.1 Расчет капитальных вложений 74
3.1.1 Амортизация оборудования 75
3.2 Заработная плата 76
3.2.1 Отчисления во внебюджетные фонды 77
3.3 Затраты на обслуживание оборудования 77
3.4 Затраты на электроэнергию 77
4 ОХРАНА ТРУДА И ТЕХНИКА БЕЗОПАСНОСТИ 81
4.1 Требования по охране труда и технике безопасности котельной 81
4.2 Мероприятия по обеспечению охраны труда газовых котельных 83
4.3 Противопожарная техника безопасности при работе с котлами 85
ЗАКЛЮЧЕНИЕ 87
СПИСОК ЛИТЕРАТУРЫ 89


Фрагмент для ознакомления

FieldByName('ID_REJIM').asFloat;
RecalcQuery.Close;

if Page > 0 then
begin
{Закрываем старый лист}
NewPListForm.EditList(Page);
{Проверяем на закрытие}
if not NewPListForm.ifClosedList(Page) then
begin
MessageDlg('Вы не закрыли путевой лист, рекомендую повторить операцию...' ,mtError, [mbYes], 0);
end
else
begin
{Копируем информацию}
NewPListForm.CarNumer := Num;
NewPListForm.OldPage := Page;
NewPListForm.IdRejim := Rejim;
NewPListForm.PriNumer := Pricep;
{Открываем новый лист}
NewPListForm.NewList;
end;
end
else MessageDlg('Открытых путевых листов не обнаружено...' ,mtInformation, [mbYes], 0);
end;
end;

procedure TMainDialog.FormActivate(Sender: TObject);
begin
AlTable.Open;
SetFirstAlarm; {Установить начальное событие...}
if SetProbeg = 1 then RecalcMenu.Enabled := False
else RecalcMenu.Enabled := True;
Caption := Application.Title;
if FirstStart then
begin
IdTask := 21;
RegistrationInSystem;
FirstStart := False;
end;
if IdLevel <> 2 then begin
RecalcMenu.Enabled := false;
OpenButton.Enabled := false;
NewListButton.Enabled := false;
RecalcButton.Enabled := false;
PricepItem.Enabled := false;
OpenPLMenu.Enabled := false;
AlarmItem.Enabled := false;
ConfigMenu.Enabled := false;
end;
if IdLevel = 4 then begin
DriversButton.Enabled := false;
BtnMehanizator.Enabled := false;
N1.Enabled := false;
N4.Enabled := false;
GSMReports.Enabled := false;
end;
PLTable.Open;
end;


procedure TMainDialog.FindListButtonClick(Sender: TObject);
var str: string;
begin
str := InputBox('Найти маршрутный лист по его номеру', 'Укажите номер листа', '');
if str <> '' then FrmNewJurnalRec2.EditList(StrToFloat(str));
end;

procedure TMainDialog.ZakrepItemClick(Sender: TObject);
begin
ZakrepForm.ShowModal;
end;

procedure TMainDialog.MedicalItemClick(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\MEDICAL.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.mn_Rep_PravaClick(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\PRAVA.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.GSMReportsClick(Sender: TObject);
begin
// GSMForm.STUserGSM := STUser;
// GSMForm.ShowModal;
end;

procedure TMainDialog.RubberReportClick(Sender: TObject);
begin
// if RecalcMenu.Enabled then MessageForm.SetRubber;
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
// Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
Connect(7,'AV6_SIGM', 'avtopark3', 'ap3','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\RUBBER.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.TOReportClick(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\TO1.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.KartaItemClick(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\KARTA.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.PricepItemClick(Sender: TObject);
begin
// PricepDlg.ShowModal;
end;

procedure TMainDialog.EconomItemClick(Sender: TObject);
begin
{ if PeriodDlg.ShowModal = mrOK then
begin }
{ with Report do
begin
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'TAB_ECON.RPT';
Run;
end;}
{ end;}
end;

procedure TMainDialog.TO21Click(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\TO2.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.mnTO3Click(Sender: TObject);
begin
with Report do
begin
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\TO3.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.PrognozItemClick(Sender: TObject);
begin
PrognozForm.ShowModal;
end;

procedure TMainDialog.PowerItemClick(Sender: TObject);
begin
with Report do
begin
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\POWER.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.PerronItemClick(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\ELECTRO.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.SpGSMItemClick(Sender: TObject);
begin
SpGSMDlg.ShowModal;
end;

procedure TMainDialog.DriversItemClick(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\DRIVERS.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.mnPlanClick(Sender: TObject);
begin
with Report do
begin
// Connect(7,'RP1','AVTOPARK2', 'USPM','RP1');
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\PlanTO_RMU.rpt';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;

end;

procedure TMainDialog.mnTO1_300Click(Sender: TObject);
begin
with Report do
begin
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\TO1-01.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.mnTO2_300Click(Sender: TObject);
begin
with Report do
begin
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\TO2-01.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.mnTO3_50Click(Sender: TObject);
begin
with Report do
begin
Connect(7,'AV6_SIGM', 'atestv', 'viewer','AV6_SIGM');
ReportDir := ExtractFilePath(Application.ExeName);
ReportName := 'RPT\TO3-01.RPT';
Run;
ShowWindow(ReportHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(ReportHandle);
end;
end;

procedure TMainDialog.RegistrationInSystem;
var i: integer;
begin
{ PasswordDlg.ShowModal;
if PasswordDlg.ModalResult = mrOk then
begin
with PassQuery do
begin
ParamByName('PASSWORD').asString := PasswordDlg.Password.Text;
ParamByName('ID_TASK').asFloat := IdTask;
Open;
if (IdUser = 0) then
begin
MessageDlg('Пользователь с таким паролем в системе не зарегестрирован!',
mtInformation, [mbYes], 0);
Close;
MainDialog.Close;
end;
if PasswordDlg.Password.Text = 'KJ' then begin
for i := 0 to (ConfigDialog.ComponentCount - 1) do
if ConfigDialog.Components[i] is TControl then
with ConfigDialog.Components[i] as TControl do Visible := true;
end;
end;
end
else Close;}
with PassQueryNew do begin
Open;
If RecordCount = 0 then begin
for i := 0 to (MainDialog.ComponentCount - 1) do
if MainDialog.Components[i] is TControl then
with MainDialog.Components[i] as TControl do Visible := false;
for I := 0 to MainMenu.Items.Count-1 do
MainMenu.Items[I].Visible := False;
Label1.Visible := true;
Label1.Top := 10;
Label1.Left := 10;
end;
Close;
end;
end;

procedure TMainDialog.PassQueryAfterOpen(DataSet: TDataSet);
begin
IdUser := PassQueryNew.FieldByName('ID_USER').asFloat;
NaUser := PassQueryNew.FieldByName('EXECUTOR').asString;
Dolgnost:= PassQueryNew.FieldByName('DOLGNOST').asString;
FIO := PassQueryNew.FieldByName('FIO').asString;
IdGroup := PassQueryNew.FieldByName('ID_GROUP').asFloat;
IdLevel := PassQueryNew.FieldByName('ID_LEVEL').asFloat;
WorkNow := PassQueryNew.FieldByName('WORK_NOW').asFloat;
CurDate := PassQueryNew.FieldByName('CUR_DATE').asDateTime;
UserLabel.Caption := NaUser;
LevelLabel.Caption := 'Код доступа -> ' + PassQueryNew.FieldByName('ID_LEVEL').asString;
end;

procedure TMainDialog.FormClose(Sender: TObject; var Action: TCloseAction);
begin
PLtable.Close;
AlTable.Close;
Config.Close;
end;

procedure TMainDialog.PasswordItemClick(Sender: TObject);
begin
ChangePForm.NaUser := UserLabel.Caption;
ChangePForm.IdUser := IdUser;
ChangePForm.ShowModal;
end;

procedure TMainDialog.AlarmItemClick(Sender: TObject);
begin
AlarmForm.ShowModal;
end;

procedure TMainDialog.SetFirstAlarm;
var t: TDateTime;
Hour, Min, Sec, MSec: Word;
begin
t := Time;
DecodeTime(t, Hour, Min, Sec, MSec);
AlTable.Refresh;
AlTable.FindNearest([IntToStr(Hour), IntToStr(Min)]);
SetAlarm;
end;

procedure TMainDialog.MainClockAlarm(Sender: TObject);
begin
MessageBeep(MB_OK);
MessageDlg(AlTable.FieldByName('EVENTS').asString, mtInformation,
[mbOk], 0);
AlTable.Next;
if AlTable.EOF then AlTable.First;
SetAlarm;
end;

procedure TMainDialog.SetAlarm;
begin
AlarmRxLabel.Caption := AlTable.FieldByName('HOUR').asString + '-' +
AlTable.FieldByName('MIN').asString;
MainClock.AlarmHour := AlTable.FieldByName('HOUR').asInteger;
MainClock.AlarmMinute := AlTable.FieldByName('MIN').asInteger;
MainClock.AlarmEnabled := AlarmBox.Checked;
end;

procedure TMainDialog.mnInfoClick(Sender: TObject);
begin
FormInfo.ShowModal
end;

procedure TMainDialog.mnStatistClick(Sender: TObject);
begin
frmStatist.ShowModal;
end;

procedure TMainDialog.mnAboutClick(Sender: TObject);
var pp: PChar;
begin
pp := PChar({'Информация о прграмме ' + }Application.Title
+ '#Standard Information of ');
ShellAbout(handle, pp, #13 + 'Ver ' + Ver + ' от ' +VerDate
{+ #13 + 'Добавлен запрет на редактирование DBGrida в складе'}
, application.Icon.handle);
end;

procedure TMainDialog.ADatabaseLogin(Database: TDatabase;
LoginParams: TStrings);
begin
LoginParams.Values['USER NAME'] := STUser;
LoginParams.Values['PASSWORD'] := STPass;
end;

procedure TMainDialog.mnPowerTypeClick(Sender: TObject);
begin
FrmTypeAKB.ShowModal;
end;

procedure TMainDialog.mnPwManufactureClick(Sender: TObject);
begin
FrmPowerManufacture.ShowModal;
end;

procedure TMainDialog.BtnParkAKBClick(Sender: TObject);
begin
if IdLevel = 4 then begin
FrmParkAKB.CurrentButton.Enabled := false;
FrmParkAKB.BtnNewAKB.Enabled := false;
FrmParkAKB.DelCarButton.Enabled := false;
end;
FrmParkAKB.ShowModal;
end;
end.
Приложение 4. Листинг программы. Модуль журнала выездов
unit NJurnal2;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, DBTables, DB, DBCtrls, Mask,
DBLookup, Report,Printers, Grids, Outline, CurrEdit, ToolEdit, RXDBCtrl,
QuickRpt, Qrctrls;

{++++++++++++++++++++++++++++++++++}
type
TData = class(TObject)
public
mid: Real;
fio: String[30];
saveCode: Boolean;
CreateCode: String[8];
Dolgnost: String[40];
Fam_IO: String[20];
end;
{++++++++++++++++++++++++++++++++++}
type
TFrmNewJurnalRec2 = class(TForm)
MainPanel: TPanel;
PListSource: TDataSource;
AutoBox: TGroupBox;
TimeBox: TGroupBox;
Label6: TLabel;
DriBox: TGroupBox;
Query: TQuery;
QuerySource: TDataSource;
ModelText: TDBText;
NumerText: TDBText;
Label14: TLabel;
Label22: TLabel;
Label23: TLabel;
DStartEdit: TMaskEdit;
DEndEdit: TMaskEdit;
NewListQuery: TQuery;
DriverQuery: TQuery;
Label11: TLabel;
Label1: TLabel;
Label21: TLabel;
GSMPanel: TPanel;
OperatBox: TGroupBox;
SaveButton: TBitBtn;
TStartEdit: TMaskEdit;
TEndEdit: TMaskEdit;
Label5: TLabel;
NumPLLabel: TLabel;
TypeCarLabel: TLabel;
AddButton: TBitBtn;
DelButton: TBitBtn;
PrintButton: TBitBtn;
CancelButton: TBitBtn;
Label25: TLabel;
Label29: TLabel;
CarNumButton: TSpeedButton;
AlgorBox: TGroupBox;
Label34: TLabel;
Label35: TLabel;
Label37: TLabel;
Label36: TLabel;
Label38: TLabel;
Label41: TLabel;
RejimButton: TSpeedButton;
Spidometr: TLabel;
DateButton: TSpeedButton;
PListQuery: TQuery;
AddPList: TQuery;
CustBox: TGroupBox;
CustomButton: TSpeedButton;
DriversOutline: TOutline;
PListQueryID_PAGE: TFloatField;
PListQuerySetDateTime: TDateTimeField;
PListQueryID_CUSTOM: TFloatField;
PListQueryCUR_DATE: TDateTimeField;
PListQueryFT_START: TDateTimeField;
PListQueryFT_END: TDateTimeField;
PListQueryFD_START: TDateTimeField;
PListQueryFD_END: TDateTimeField;
PListQueryID_CAR: TFloatField;
PListQueryID_PWUNIT: TFloatField;
PListQuerySPID_IN: TFloatField;
PListQuerySPID_OUT: TFloatField;
PListQueryRUB_SET: TFloatField;
PListQueryCLOSE: TFloatField;
QueryID_CAR: TFloatField;
QueryNUM_GARAGE: TFloatField;
QueryID_TYPE: TFloatField;
QueryNA_NUM: TStringField;
QueryCUR_PROBEG: TFloatField;
QuerySPIDOMETR: TFloatField;
QuerySET_TO1: TFloatField;
QuerySET_TO2: TFloatField;
QueryPROBEG_IN_DAY: TFloatField;
QueryPLACE: TFloatField;
QueryAC_CAR: TFloatField;
QueryIN_REPORT: TStringField;
QueryID_TYPE_1: TFloatField;
QueryNA_TYPE: TStringField;
QueryBIG_SMALL: TFloatField;
QuerySALE_GAS: TFloatField;
QueryTO1: TFloatField;
QueryTO2: TFloatField;
QueryWHEELS_FRONT: TFloatField;
QueryCATEGORY: TFloatField;
DelDriverQuery: TQuery;
SaveOLQuery: TQuery;
UCarQuery: TQuery;
SaveNLQuery: TQuery;
ClosePLQuery: TQuery;
CarCloseQuery: TQuery;
IDQuery: TQuery;
CEditPri: TCurrencyEdit;
QryIsPListClosed: TQuery;
CBxJobType: TComboBox;
QryUpDriverFirstPL: TQuery;
STxt_WithoutCheck: TStaticText;
STxt_CarNum: TStaticText;
ResultBox: TGroupBox;
Label10: TLabel;
ProbegLabel: TLabel;
Label17: TLabel;
TimeButton: TSpeedButton;
CEditTime: TCurrencyEdit;
GrBoxAKB: TGroupBox;
Label4: TLabel;
Label7: TLabel;
Label12: TLabel;
Label13: TLabel;
Label2: TLabel;
Label19: TLabel;
Label20: TLabel;
EdIdPwUnit: TDBEdit;
EdGarNum: TDBEdit;
EdNomenklatNum: TDBEdit;
EdNaType: TDBEdit;
EdVolt: TDBEdit;
EdCapacity: TDBEdit;
DBDateEdit2: TDBDateEdit;
QryAKB: TQuery;
QryAKBID_PWUNIT: TFloatField;
QryAKBGAR_NUM: TFloatField;
QryAKBNOMENKLAT_NUM: TFloatField;
QryAKBDT_BEGIN_USE: TDateTimeField;
QryAKBNA_TYPE: TStringField;
QryAKBVOLT: TFloatField;
QryAKBCAPACITY: TFloatField;
DtSrcAkb: TDataSource;
PListQueryWORK_TIME: TFloatField;
Label46: TLabel;
Label47: TLabel;
QryAKB_PL: TQuery;
FloatField1: TFloatField;
FloatField2: TFloatField;
FloatField3: TFloatField;
DateTimeField1: TDateTimeField;
StringField1: TStringField;
FloatField4: TFloatField;
FloatField5: TFloatField;
CEdSpidomIn: TCurrencyEdit;
CEdProbeg: TCurrencyEdit;
Label16: TLabel;
Label15: TLabel;
CloseButton: TBitBtn;
QRpPListRMU: TQuickRep;
TitleBand1: TQRBand;
QRLabel2: TQRLabel;
QRLabel6: TQRLabel;
QRLabel3: TQRLabel;
QRLabel4: TQRLabel;
QRDBTxNA_TYPE: TQRDBText;
QRDBTxID_CAR: TQRDBText;
QRLabel5: TQRLabel;
QRLabel1: TQRLabel;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
QRShape1: TQRShape;
QRShape2: TQRShape;
QRShape3: TQRShape;
QRShape4: TQRShape;
QRShape5: TQRShape;
QRShape6: TQRShape;
QRShape7: TQRShape;
QRShape8: TQRShape;
QRShape9: TQRShape;
QRShape10: TQRShape;
QRShape11: TQRShape;
QRShape12: TQRShape;
QRLabel9: TQRLabel;
QRLabel10: TQRLabel;
QRLabel11: TQRLabel;
QRLabel12: TQRLabel;
QRLabel13: TQRLabel;
QRLbDateOUT: TQRLabel;
QRLbTimeOUT: TQRLabel;
QRLbMthOUT: TQRLabel;
QRLabel17: TQRLabel;
QRShape13: TQRShape;
QRShape14: TQRShape;
QRShape15: TQRShape;
QRLabel19: TQRLabel;
QRLabel20: TQRLabel;
QRLabel21: TQRLabel;
QRLabel22: TQRLabel;
QRShape16: TQRShape;
QRLabel23: TQRLabel;
QRShape17: TQRShape;
QRLabel24: TQRLabel;
QRShape18: TQRShape;
QRLabel25: TQRLabel;
QRLabel26: TQRLabel;
QRShape19: TQRShape;
QRLabel27: TQRLabel;
QRShape20: TQRShape;
QRLabel28: TQRLabel;
QRShape21: TQRShape;
QRLabel29: TQRLabel;
QRLabel30: TQRLabel;
QRShape22: TQRShape;
QRLabel31: TQRLabel;
QRShape23: TQRShape;
QRLabel32: TQRLabel;
QRShape24: TQRShape;
QRLabel33: TQRLabel;
QRLbPlistN: TQRLabel;
QRLbCustomName: TQRLabel;
QRLbDispetcherDolgnost: TQRLabel;
QRLbDispetcherFIO: TQRLabel;
QRLbDriverDolgnost1: TQRLabel;
QRLbDriverFIO1: TQRLabel;
QRLbDriverDolgnost2: TQRLabel;
QRLbDriverFIO2: TQRLabel;
QRShape25: TQRShape;
QRLabel14: TQRLabel;
PListQueryNEED_REMONT: TFloatField;
PnlCondition: TPanel;
Label3: TLabel;
RdBtnTehGoodYES: TRadioButton;
RdBtnTehGoodNO: TRadioButton;
QRLabel15: TQRLabel;
QRShape26: TQRShape;
QRLabel16: TQRLabel;
QRShape27: TQRShape;
QRLabel35: TQRLabel;
QRShape28: TQRShape;
QRLabel36: TQRLabel;
QRShape29: TQRShape;
QRLabel18: TQRLabel;
QRShape30: TQRShape;
QRLabel34: TQRLabel;
QRShape31: TQRShape;
QRLabel37: TQRLabel;
QRLabel38: TQRLabel;
QRLabel39: TQRLabel;
QRShape32: TQRShape;
QRLabel40: TQRLabel;
QRShape33: TQRShape;
QRLabel41: TQRLabel;
QRShape34: TQRShape;
QRLabel42: TQRLabel;
QRShape35: TQRShape;
QRLabel43: TQRLabel;
QRShape36: TQRShape;
QRLabel44: TQRLabel;
QRLabel45: TQRLabel;
QRLabel46: TQRLabel;
procedure RejimComboChange(Sender: TObject);
procedure SaveOpenList;
procedure SaveNewList ;
procedure ClosePList;
procedure ReadList;
procedure PrintListRMU;
procedure CarChange;
procedure SetButtons(Flag: Boolean);
procedure SetCloseField;
procedure SetDrivers(Page: Real);
procedure DelCurrentDriver;
procedure InsertCurrentDriver;
function ValidList(DTControl: Boolean): Boolean;
function ifClosedList(Page: Real): Boolean;
procedure DataTimeChange;
procedure DateEditChange(Sender: TObject);
procedure NumerCarEditDblClick(Sender: TObject);
procedure DriverEditDblClick(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure TimeButtonClick(Sender: TObject);
procedure NewList; {Новый лист}
procedure EditList(Numer: Real);
procedure FormActivate(Sender: TObject);
procedure DelButtonClick(Sender: TObject);
procedure CalcProbeg;
function CalcWorkTime: Boolean;
procedure CloseButtonClick(Sender: TObject);
procedure PrintButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CustomButtonClick(Sender: TObject);
procedure RejimButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DriversOutlineClick(Sender: TObject);
procedure CEditPriChange(Sender: TObject);
procedure RdBtnTehGoodYESClick(Sender: TObject);
procedure RdBtnTehGoodNOClick(Sender: TObject);
private
{ Private declarations }
isNew: Boolean;
isClose: Boolean;
isPrint: Boolean;
isCloseOperation: Boolean;
isVisible: Boolean;
public
{ Public declarations }
IdList: Real;
IdCar, IdPwunit: Real;
DrLimit: Real;
CarNumer{, PriNumer}: Real;
OldPage: Real;
IdRejim, IdCustom: Real;
HourInDay: Real;
// Norma: Real;
// IdOil: Real;
IdCarForNewPList: String;
CreateCodeCar: String[3];
end;

var
FrmNewJurnalRec2: TFrmNewJurnalRec2;

implementation

{$R *.DFM}
uses Main, Park, CarDrv, MControl, Custom, NRejim, Calend, SpGSM,
DrEdit;
function TFrmNewJurnalRec2.ValidList(DTControl: Boolean): Boolean;
begin
ValidList := True;
if pos(' ', DStartEdit.Text + TStartEdit.Text + DEndEdit.Text + TEndEdit.Text)
+ pos('_', DStartEdit.Text + TStartEdit.Text + DEndEdit.Text + TEndEdit.Text) <> 0 then begin
MessageDlg('Дата или время заведены с ошибокй...',mtError, [mbOK], 0);
ValidList := False;
end;
if (StrToDate(DEndEdit.Text) > Date) and DTControl then
begin
MessageDlg('Дата возврата в гараж еще не наступила...',mtError, [mbOK], 0);
ValidList := False;
end;
if (StrToDate(DStartEdit.Text) > Date + 1) and (isNew) then
begin
if MessageDlg('Указанная дата выезда позже,'
+ ' чем следующий день! Если Вы согласны с ней, нажмите YES.'
, mtInformation, [mbYes, mbNo], 0) = mrNo then ValidList := False;
end;
if (StrToDate(DStartEdit.Text) < Date) and (isNew) then
begin
if MessageDlg('Запись в журнал заносится задним числом,'
+ ' Если Вы согласны, нажмите YES.'
, mtInformation, [mbYes, mbNo], 0) = mrNo then ValidList := False;
end;
if (Query.FieldByName('PLACE').asFloat = 2) and (isNew) then
begin
MessageDlg('У механизма имеется незакрытая запись в журнал, отмените заполнение! (кнопка "Отменить")',mtError, [mbOK], 0);
ValidList := False;
end;
{ if (StrToFloat(OstFillLabel.Caption) < 0) and (not isNew) then
begin
MessageDlg('В баке не осталось ГСМ!',mtError, [mbOK], 0);
ValidList := False;
end; }
if Query.FieldByName('ID_CAR').asFloat < 1 then
begin
MessageDlg('Не определен механизм!', mtError, [mbOK], 0);
ValidList := False;
end;
if DriversOutline.ItemCount < 1 then
begin
MessageDlg('Не назначен водитель!', mtError, [mbOK], 0);
ValidList := False;
end;
if isCloseOperation and not(RdBtnTehGoodYES.Checked or RdBtnTehGoodNO.Checked) then
begin
MessageDlg('Не указано состояние технической исправности механизма!', mtError, [mbOK], 0);
ValidList := False;
end;
{ if Query.FieldByName('BIG_SMALL').asInteger = 4 then
begin
MessageDlg('Прицеп не может быть тягячем!', mtError, [mbOK], 0);
ValidList := False;
end; }
end;

function TFrmNewJurnalRec2.ifClosedList(Page: Real): Boolean;
begin
ifClosedList := False;
with PListQuery do
begin
if Active then Close;
ParamByName('PAGE').asFloat := Page;
Open;
if FieldByName('CLOSE').asFloat = 1 then ifClosedList := True;
Close;
end;
end;

procedure TFrmNewJurnalRec2.PrintListRMU;
var,page_type: string[50];
nu_car, ty_car, gnu_car, pr_numer: string[50];
k_norma: string;
s: Boolean;
d: TData;
begin
page_type := TypeCarLabel.Caption;
nu_car := Query.FieldByName('NA_NUM').asString;
gnu_car := FloatToStr(IdCar);
ty_car := Query.FieldByName('NA_TYPE').asString;

SetDrivers(IdList);

QRLbPlistN.Caption := FloatToStr(IdList);
QRLbDateOUT.Caption := DStartEdit.Text;
QRLbTimeOUT.Caption := TStartEdit.Text;
QRLbMthOUT.Caption := CEdSpidomIn.Text;
QRLbCustomName.Caption := CustomButton.Caption;
QRLbDispetcherDolgnost.Caption := MainDialog.Dolgnost;
QRLbDispetcherFIO.Caption := MainDialog.FIO;
d := DriversOutline[1].Data;
QRLbDriverDolgnost1.Caption := d.Dolgnost;
QRLbDriverFIO1.Caption := d.Fam_IO;
QRLbDriverDolgnost2.Caption := d.Dolgnost;
QRLbDriverFIO2.Caption := d.Fam_IO;
QRpPListRMU.Prepare;
QRpPListRMU.Print;

Close;
end;

procedure TFrmNewJurnalRec2.NewList;
var CurDate: TDate;
begin
isNew := True;
isClose := False;
IdCar := 0;
IdPwunit := 0;
STxt_WithoutCheck.Visible := CreateCodeCar <> '**-';

{ if MainDialog.SetRasxod = 1 then SezonBox.Checked := True
else SezonBox.Checked := False;
}
DriversOutline.Clear;

{Get New ID_LIST}
{NEW_ID_PLIST.NEXTVAL}
NewListQuery.Open;
IdList := NewListQuery.Fields[0].asFloat;
CurDate := NewListQuery.Fields[1].Value;
NewListQuery.Close;
NumPLLabel.Caption := FloatToStr(IdList);
FrmNewJurnalRec2.Caption := 'Новая запись в журнал';
DateButton.Caption := DateToStr(CurDate);
SetButtons(True);
SetCloseField;
CloseButton.Enabled := False;
PrintButton.Enabled := True;
CEditPri.Visible := False;
DStartEdit.Visible := True;
TStartEdit.Visible := True;
DEndEdit.Visible := False;
TEndEdit.Visible := False;
RdBtnTehGoodYES.Visible := False;
RdBtnTehGoodNO.Visible := False;

if CarNumer > 0 then
begin
SetDrivers(OldPage);
IdCar := CarNumer;
CarChange;
DataTimeChange;
end;

//---------------------------------------------------------
if Query.Active then Query.Close;
{ Query.Prepare;}
Query.Params[0].asString := IdCarForNewPList;
Query.Open;
if QryAKB.Active then QryAKB.Close;
DtSrcAkb.DataSet := QryAKB;
QryAKB.Open;
IdPwunit := QryAKB.FieldByName('ID_PWUNIT').Value;
//------------------------------------------------------------
CalcProbeg;

ShowModal;
end;
procedure TFrmNewJurnalRec2.EditList(Numer: Real);
begin
isNew := False;
IdList := Numer;

HourInDay := 8;

CEditPri.Visible := True;
DEndEdit.Visible := True;
TStartEdit.Visible := True;
TEndEdit.Visible := True;

with PListQuery do
begin
if Active then Close;
ParamByName('PAGE').asFloat := Numer;
Open;
if not EOF then
begin
ReadList;
CEdProbeg.Value := 0;
CalcProbeg;
FrmNewJurnalRec2.Caption := 'Запись в журнале № ' + FieldByName('ID_PAGE').asString +
', занесена ' + FieldByName('SetDateTime').asString;
ShowModal;
end
else
MessageDlg('Запись в журнале № ' + FloatToStr(Numer) + ' не обнаружена...',
mtError, [mbYes], 0);
Close;
end;
end;
procedure TFrmNewJurnalRec2.CarChange;
var TypeCar: Real;
begin
if Query.Active then Query.Close;
{ Query.Prepare;}
Query.Params[0].asFloat := IdCar;
Query.Open;
if IsNew then begin
if QryAKB.Active then QryAKB.Close;
QryAKB.Open;
if VarIsNull(QryAKB.FieldByName('ID_PWUNIT').Value) then
IdPwunit := -1000
else IdPwunit := QryAKB.FieldByName('ID_PWUNIT').Value;
end else begin
if QryAKB_PL.Active then QryAKB_PL.Close;
QryAKB_PL.Open;
if VarIsNull(QryAKB_PL.FieldByName('ID_PWUNIT').Value) then
IdPwunit := -1000
else IdPwunit := QryAKB_PL.FieldByName('ID_PWUNIT').Value;
end;

CarNumButton.Caption := FloatToStr(IdCar);
STxt_CarNum.Caption := CarNumButton.Caption;

{Определяем параметры путевого листа}
if IdCar > 0 then
begin
AddButton.Enabled := True;
end
else
begin
AddButton.Enabled := False;
end;

if (IdCar > 0) and (isNew) then begin
CEdSpidomIn.Value := Query.FieldByName('SPIDOMETR').asFloat;
CEditPri.Value := Query.FieldByName('SPIDOMETR').asFloat;
CEdProbeg.Value := 0;
CalcProbeg;
end else begin
CEdSpidomIn.Value := 0;
end;

TypeCar := Query.FieldByName('BIG_SMALL').asFloat;
if TypeCar = 1 then TypeCarLabel.Caption := 'поломоечной машины';
if TypeCar = 2 then TypeCarLabel.Caption := 'вилочного электропогрузчика';
if TypeCar = 3 then TypeCarLabel.Caption := 'вилочного электроштабелера';
if TypeCar = 4 then TypeCarLabel.Caption := 'электротягача';
if TypeCar = 5 then TypeCarLabel.Caption := 'электрокары';
if TypeCar = 6 then TypeCarLabel.Caption := 'ручной вилочной эл.тележки';
if TypeCar = 7 then TypeCarLabel.Caption := 'ручной вилочной тележки';

CustomButton.Caption := CustomForm.IdSearch(IdCustom);
end;

procedure TFrmNewJurnalRec2.DataTimeChange;
var D,Dz:TDateTime;
begin
if (isNew) then
begin
D := StrToDate(DateButton.Caption);
DStartEdit.Text := DateButton.Caption;
DEndEdit.Text := DateButton.Caption;

TStartEdit.Text := TimeToStr(Time);//'08:00:00'; //GStartEdit.Text;
TEndEdit.Text := '23:59:59'; //GEndEdit.Text;
end;
end;

procedure TFrmNewJurnalRec2.RejimComboChange(Sender: TObject);
begin
DataTimeChange;
end;

procedure TFrmNewJurnalRec2.DateEditChange(Sender: TObject);
begin
{ if isNew then
begin
CalendarDlg.MonthBox.Text := copy(DateButton.Caption, 4, 2);
CalendarDlg.YearEdit.Text := copy(DateButton.Caption, 7, 4);
CalendarDlg.Date := StrToDate(DateButton.Caption);
CalendarDlg.ShowModal;
if CalendarDlg.ModalResult = mrOK then
begin
DateButton.Caption := DateToStr(CalendarDlg.Date);
DataTimeChange;
end;
end; }
end;

procedure TFrmNewJurnalRec2.NumerCarEditDblClick(Sender: TObject);
begin
if isNew then
//REM, for otherwise all checks from the MAIN before create PL need to be placed here (ver 3.03.01)
begin
{ ParkDialog.SmallBtn.Checked := True;
ParkDialog.PListButton.Visible := False;
if ParkDialog.Tip = 4 then ParkDialog.Tip := 1;
ParkDialog.Mesto1 := 1;
ParkDialog.Mesto2 := 4;
ParkDialog.ShowModal;
ParkDialog.PListButton.Visible := True;
if ParkDialog.ModalResult = mrOK then
begin
IdCar := ParkDialog.IdCar;
CarChange;
DriversOutline.Clear;
AddButton.Enabled := True;
end;}
end;
end;

procedure TFrmNewJurnalRec2.DriverEditDblClick(Sender: TObject);
var d: TData;
begin
if DriversOutline.ItemCount >= DrLimit then
begin
AddButton.Enabled := False;
end
else
begin
CarDrvForm.GarNLabel.Caption := Query.FieldByName('ID_CAR').asString;
CarDrvForm.InvNLabel.Caption := Query.FieldByName('NA_NUM').asString;
CarDrvForm.TypeLabel.Caption := Query.FieldByName('NA_TYPE').asString;
{ case Query.FieldByName('NORMA_SCALE').asInteger of
1: CarDrvForm.LbVidTtranspt.Caption := 'МЕХАНИЗМ';
100: CarDrvForm.LbVidTtranspt.Caption := 'АВТОМОБИЛЬ';
end; }
CarDrvForm.LbVidTtranspt.Caption := 'МЕХАНИЗМ';
CarDrvForm.IdCar := IdCar;
CarDrvForm.ShowModal;
if (CarDrvForm.ModalResult = mrOK) and (CarDrvForm.IdDriver <>0) then
begin
{Для нового листа}
d := TData.Create;
d.mid := CarDrvForm.IdDriver;
d.CreateCode := CreateCodeCAR + CarDrvForm.CreateCode;
d.Dolgnost := CarDrvForm.Dolgnost;
d.Fam_IO := CarDrvForm.Fam_IO;
DriversOutline.AddObject(0,CarDrvForm.NameDriver, d);
IdRejim := CarDrvForm.IdRejim;
RejimButton.Caption := RejimForm.IdSearch(IdRejim);
// DataTimeChange;
end;
end;
end;

procedure TFrmNewJurnalRec2.SaveButtonClick(Sender: TObject);
begin
if ValidList(False) then
begin
MainDialog.ADatabase.StartTransaction;
try
isVisible := False;
if isNew then SaveNewList
else SaveOpenList;
MainDialog.ADatabase.Commit; {if all sucsesful then commit}
except
MainDialog.ADatabase.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end; {try }
Close;
end;
end;

procedure TFrmNewJurnalRec2.TimeButtonClick(Sender: TObject);
begin
if not IsNew then CalcWorkTime;
end;

procedure TFrmNewJurnalRec2.SaveOpenList;
var info: string[100];
begin
if not isClose then
begin
with SaveOLQuery do
begin
ParamByName('ID_PAGE').asFloat := IdList;
ParamByName('USER_SAVE').asFloat := Main.MainDialog.IdUser;
ParamByName('ID_CUSTOM').asFloat := IdCustom;
ParamByName('SPID_OUT').asFloat := CEditPri.Value;
{Время фактическое}
ParamByName('FT_START').asDateTime := StrToTime(TStartEdit.Text);
ParamByName('FT_END').asDateTime := StrToTime(TEndEdit.Text);
{Фактические даты работы}
ParamByName('FD_END').asDateTime := StrToDate(DEndEdit.Text);
ExecSQL;
end;
end;
end;

procedure TFrmNewJurnalRec2.SaveNewList;
var i: Integer;
d: TData;
begin
// MainDialog.ADatabase.StartTransaction;
try
with AddPList do
begin
ParamByName('PAGE').asFloat := IdList;
ParamByName('CAR').asFloat := IdCar;
ParamByName('ID_PWUNIT').Value := IdPwunit;
ParamByName('USER').asFloat := Main.MainDialog.IdUser;
ParamByName('CUSTOM').asFloat := IdCustom;
ExecSQL;
end;

with SaveNLQuery do
begin
ParamByName('ID_PAGE').asFloat := IdList;
ParamByName('SPID_IN').asFloat := CEdSpidomIn.Value;
ParamByName('SPID_OUT').asFloat := CEdSpidomIn.Value;
// ParamByName('SPID_IN').asFloat := StrToFloat(Spidometr.Caption);
// ParamByName('SPID_OUT').asFloat := StrToFloat(Spidometr.Caption);
ParamByName('CUR_DATE').asDateTime := StrToDateTime(DateButton.Caption);
{Время фактическое}
ParamByName('FT_START').asDateTime := StrToTime(TStartEdit.Text);
ParamByName('FT_END').asDateTime := StrToTime(TEndEdit.Text);
{Фактические даты работы}
ParamByName('FD_START').asDateTime := StrToDate(DStartEdit.Text);
ParamByName('FD_END').asDateTime := StrToDate(DEndEdit.Text);
ExecSQL;
end;

with UCarQuery do
begin
ParamByName('PLACE').asFloat := 2;
ParamByName('ID_CAR').asFloat := IdCar;
ExecSQL;
end;

with IDQuery do begin
for i := 1 to DriversOutline.ItemCount do begin
d := DriversOutline[i].Data;
ParamByName('ID_PAGE').asFloat := IdList;
ParamByName('ID_DRIVER').asFloat := d.mid;
ParamByName('CREATE_CODE').asString := d.CreateCode;
try
ExecSQL;
except
on EDataBaseError do begin
MessageDlg('Водитель ' + DriversOutline[i].Text + ' будет указан один раз...', mtWarning, [mbYes], 0);
end;
end;
end; {for i := 1 to Dri...}
end;
// MainDialog.ADatabase.Commit; {if all sucsesful then commit}
except
// MainDialog.ADatabase.Rollback; {on failure, undo the changes};
// raise; {raise the exception to prevent a call to CommitUpdates!}
end; {try }

end;
procedure TFrmNewJurnalRec2.SetButtons(Flag: Boolean);
var color: TColor;
begin
if Flag then {Разрешено} color := clWindow
else {Запрещено} color := clSilver;

DStartEdit.ReadOnly := not Flag;
DStartEdit.TabStop := Flag;
DStartEdit.Color := color;
TStartEdit.ReadOnly := not Flag;
TStartEdit.TabStop := Flag;
TStartEdit.Color := color;
AddButton.Enabled := Flag;
DelButton.Enabled := Flag;
DriversOutline.Color := color;
SaveButton.Enabled := Flag;
// CancelButton.Enabled := Flag;
end;

procedure TFrmNewJurnalRec2.SetCloseField;
var color: TColor;
flag: Boolean;
begin
if not isClose then {Разрешено} color := clWindow
else {Запрещено} color := clSilver;

flag := isClose;

CEditPri.ReadOnly := Flag;
CEditPri.Color := color;
DEndEdit.ReadOnly := Flag;
DEndEdit.Color := color;
// FStartEdit.ReadOnly := Flag;
// FStartEdit.Color := color;

TEndEdit.ReadOnly := Flag;
TEndEdit.Color := color;


CEditTime.ReadOnly := Flag;
CEditTime.Color := color;


// CBxJobType.Enabled := not Flag;
// CBxJobType.Color := color;

end;
procedure TFrmNewJurnalRec2.ReadList;
var tmp: String;
begin
IdCar := PListQuery.FieldByName('ID_CAR').asFloat;
//---------------------------------------------------------
if Query.Active then Query.Close;
{ Query.Prepare;}
Query.Params[0].asFloat := IdCar;
Query.Open;
if QryAKB_PL.Active then QryAKB_PL.Close;
DtSrcAkb.DataSet := QryAKB_PL;
QryAKB_PL.Open;
if VarIsNull(QryAKB_PL.FieldByName('ID_PWUNIT').Value) then
IdPwunit := -1000
else IdPwunit := QryAKB_PL.FieldByName('ID_PWUNIT').Value;
//------------------------------------------------------------
isClose := (PListQuery.FieldByName('CLOSE').asFloat = 1);
NumPLLabel.Caption := PListQuery.FieldByName('ID_PAGE').asString;
CEditPri.Value := PListQuery.FieldByName('SPID_OUT').asFloat;
CarChange;
IdCustom := PListQuery.FieldByName('ID_CUSTOM').asFloat;
CustomButton.Caption := CustomForm.IdSearch(IdCustom);
// CBxJobType.ItemIndex := PListQuery.FieldByName('JOBTYPE').asInteger - 1;
// IdRejim := PListQuery.FieldByName('ID_REJIM').asFloat;
// RejimButton.Caption := RejimForm.IdSearch(IdRejim);
DateButton.Caption := DateToStr(PListQuery.FieldByName('CUR_DATE').asDateTime);
CEditTime.Value := PListQuery.FieldByName('WORK_TIME').asFloat;
CEdSpidomIn.Value := PListQuery.FieldByName('SPID_IN').asFloat;
// Spidometr.Caption := PListQuery.FieldByName('SPID_IN').asString;

{Читаем две пары времен...}

with PListQuery do
begin

{Время фактическое}
TStartEdit.Text := FieldByName('FT_START').asString;
if IsClose then TEndEdit.Text := FieldByName('FT_END').asString
else TEndEdit.Text := TimeToStr(Time);

{Фактические даты работы}
DStartEdit.Text := FieldByName('FD_START').asString;
if IsClose then DEndEdit.Text := FieldByName('FD_END').asString
else DEndEdit.Text := DateToStr(Date);

// if IsClose then RdBtnTehGoodYES.Checked := FieldByName('NEED_REMONT').asBoolean
// else RdBtnTehGoodYES.Checked := false;

{Спидометр}
CEditPri.Value := FieldByName('SPID_OUT').asFloat;

end;

if PListQuery.FieldByName('CLOSE').asFloat = 0 then
begin
AddButton.Enabled := True;
CloseButton.Enabled := True;
PrintButton.Enabled := True;
PnlCondition.Enabled := True;
isClose := False;
end
else
begin
AddButton.Enabled := False;
CloseButton.Enabled := False;
PrintButton.Enabled := False;
PnlCondition.Enabled := False;
isClose := True;
end;
SetDrivers(IdList);
SetButtons(False);

SetCloseField;
end;

procedure TFrmNewJurnalRec2.FormActivate(Sender: TObject);
var str, strPlistNum: String;
begin
isVisible := True;

ClientWidth := MainPanel.Left + MainPanel.Width;
ClientHeight := GSMPanel.Top + GSMPanel.Height;

if isNew then
begin
if IdCar = 0 then
begin
// str := InputBox('Новый путевой лист', 'Укажите гаражный номер автомобиля', '');
// Str := IdCarForNewPList;
IdCar := StrToFloat(IdCarForNewPList);
DataTimeChange;
CarChange;
TStartEdit.SetFocus;
end;
end
else
begin
if not isClose then begin
RdBtnTehGoodYES.Font.Style := [];
RdBtnTehGoodYES.Checked := false;
RdBtnTehGoodNO.Visible := true;
RdBtnTehGoodNO.Font.Style := [];
RdBtnTehGoodNO.Checked := false;
RdBtnTehGoodYES.Visible := true;
CEditPri.SetFocus;
end else begin
RdBtnTehGoodYES.Checked := PListQuery.FieldByName('NEED_REMONT').asInteger = 0;
RdBtnTehGoodNo.Checked := not RdBtnTehGoodYES.Checked;
CancelButton.SetFocus;
end;
end;

DrLimit := 2; {Макс. кол-во водителей в листе}

{ CEditTime.Value := 0;}
end;
procedure TFrmNewJurnalRec2.DelButtonClick(Sender: TObject);
begin
if DriversOutline.ItemCount > 0 then
begin
if MessageDlg('Удаляем указанного водителя?',
mtWarning, [mbYes, mbNo], 0) = mrYes then
begin
{ DelCurrentDriver;}
DriversOutline.Delete(DriversOutline.SelectedItem);
AddButton.Enabled := True;
{ SetDrivers(IdList);}
end;
end;
end;

function TFrmNewJurnalRec2.CalcWorkTime: Boolean;
var Hours, HStart, HEnd: TDateTime;
Days: Real;
Hour, Min, Sec, MSec: Word;
WTime: Real;
str: String;
begin
CalcWorkTime := False;
try
if pos(' ', DStartEdit.Text + TStartEdit.Text + DEndEdit.Text + TEndEdit.Text)
+ pos('_', DStartEdit.Text + TStartEdit.Text + DEndEdit.Text + TEndEdit.Text) = 0 then begin
HStart := StrToDateTime(DStartEdit.Text + ' ' + TStartEdit.Text);
HEnd := StrToDateTime(DEndEdit.Text + ' ' + TEndEdit.Text);
end else begin
CalcWorkTime := False;
HStart := 0;
HEnd := 0;
end;
except
on EConvertError do begin
CalcWorkTime := False;
HStart := 0;
HEnd := 0;
end;
end;

if HEnd >= HStart then begin
Hours := HEnd - HStart;
DecodeTime(Hours, Hour, Min, Sec, MSec);
WTime := Int(Hours)*24 + Hour + (Min/0.6)*0.01;
if WTime <> 0 then CEditTime.Value := WTime
else begin
CEditTime.Value := 1000;
CEditTime.Value := 0;
CEditTime.Text := '0';
end;
CalcWorkTime := True;
end else begin
CEditTime.Value := 0;
if IsNew then MessageDlg('Фактическое время возвращения раньше времени выезда!',
mtInformation, [mbOK], 0);
CalcWorkTime := False;
end;
end;

procedure TFrmNewJurnalRec2.CalcProbeg;
var PCur,PEnd, Tmp: Real;
begin
{Считаем пробег и расход топлива}
if (CEditPri.Value + CEdSpidomIn.Value = 0) then CEdProbeg.Value := 0;
if (CEditPri.Value > 0) then
begin
PCur := CEdSpidomIn.Value; //StrToFloat(Spidometr.Caption);
PEnd := CEditPri.Value;

CEdProbeg.Value := PEnd - PCur;
end;
end;

procedure TFrmNewJurnalRec2.ClosePList;
var probeg: Real;
i: Integer;
d: TData;
begin
{ MainDialog.ADatabase.StartTransaction;}
with ClosePLQuery do
begin
ParamByName('ID_PAGE').asFloat := IdList;
ParamByName('CLOSE').asFloat := 1;
ParamByName('WORK_TIME').asFloat := CEditTime.Value;
ParamByName('NEED_REMONT').asInteger := Integer(not RdBtnTehGoodYES.Checked);
ExecSQL;
end;

with CarCloseQuery do
begin
ParamByName('ID_CAR').asFloat := IdCar;
ParamByName('PLACE').asFloat := 1; {Вернулась в гараж}
ParamByName('PROBEG').asFloat := CEdProbeg.Value;
// ParamByName('PROBEG').asFloat := StrToFloat(ProbegLabel.Caption);
ParamByName('SPIDOMETR').asFloat := CEditPri.Value;
ExecSQL;
end;

// CloseButton.Enabled := False;

with QryUpDriverFirstPL do begin
for i := 1 to DriversOutline.ItemCount do begin
d := DriversOutline[i].Data;
ParamByName('ID_PAGE').asFloat := IdList;
ParamByName('ID_DRIVER').asFloat := d.mid;
try
ExecSQL;
except
on EDataBaseError do begin
// MessageDlg('Водитель ' + DriversOutline[i].Text + ' будет указан один раз...', mtWarning, [mbYes], 0);
end;
end;
end; {for i := 1 to Dri...}
end;

{ MainDialog.ADatabase.Commit;}
end;

procedure TFrmNewJurnalRec2.CloseButtonClick(Sender: TObject);
begin
isCloseOperation := True;
// if ValidList({True} False) then
// begin
// with ControlForm do
// begin
// if (CEditTime.Value = 0) then CalcWorkTime;
// ProbegLabel.Caption := FrmNewJurnalRec2.CEdProbeg.Text;
//// ProbegLabel.Caption := FrmNewJurnalRec.ProbegLabel.Caption;
// LbVyezd.Caption := DStartEdit.Text + ' ' + FStartEdit.Text;
// LbVozvrat.Caption := DEndEdit.Text + ' ' + FEndEdit.Text;
// TimeLabel.Caption := FrmNewJurnalRec2.CEditTime.Text;
// ShowModal;
// if ModalResult = mrOK then
// begin
// ClosePList;
// SaveOpenList;
// FrmNewJurnalRec2.Close;
// end;
// end;
// end;
if ValidList({True} False) then
begin
with ControlForm do
begin
{if (CEditTime.Value = 0) then}
if not CalcWorkTime then begin
CEditTime.Value := 1000;
CEditTime.Value := 0;
end;
if FrmNewJurnalRec2.CEdProbeg.Text = '' then ProbegLabel.Caption := '0.0'
else ProbegLabel.Caption := FrmNewJurnalRec2.CEdProbeg.Text;
// ProbegLabel.Caption := FrmNewJurnalRec.ProbegLabel.Caption;
if pos(' ', DStartEdit.Text + TStartEdit.Text + DEndEdit.Text + TEndEdit.Text)
+ pos('_', DStartEdit.Text + TStartEdit.Text + DEndEdit.Text + TEndEdit.Text) = 0 then begin
LbVyezd.Caption := DStartEdit.Text + ' ' + TStartEdit.Text;
LbVozvrat.Caption := DEndEdit.Text + ' ' + TEndEdit.Text;
end;
TimeLabel.Caption := FrmNewJurnalRec2.CEditTime.Text;
if RdBtnTehGoodYES.Checked then LbCondition.Caption := 'ИСПРАВНЫЙ';
if RdBtnTehGoodNO.Checked then LbCondition.Caption := 'НЕ ИСПРАВНЫЙ';
ShowModal;
if ModalResult = mrOK then
begin
MainDialog.ADatabase.StartTransaction;
try
// SaveNewList;
ClosePList;
SaveOpenList;
MainDialog.ADatabase.Commit; {if all sucsesful then commit}
except
MainDialog.ADatabase.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end; {try }
isCloseOperation := false;
FrmNewJurnalRec2.Close;
end;
end;
end;
end;

procedure TFrmNewJurnalRec2.SetDrivers(Page: Real);
var driver: string[50];
d: TData;
begin
DriversOutline.Clear;
with DriverQuery do
begin
if Active then Close;
ParamByName('ID_PAGE').asFloat := Page;
Open;
while not EOF do
begin
d := TData.Create;
driver := FieldByName('FAM').asString;
driver := driver + ' ' + Copy((FieldByName('IM').Text),1,1);
driver := driver + '. ' + Copy((FieldByName('OT').Text),1,1);
driver := driver + '.' + ' (№' + FieldByName('TNUM').Text +')';
d.mid := FieldByName('MID').asFloat;
d.CreateCode := FieldByName('CREATE_CODE').asString;
d.Dolgnost := FieldByName('DOLGNOST').Text;
d.Fam_IO := FieldByName('FIO').Text;
DriversOutline.AddObject(0,driver, d);
Next;
end;
Close;
end;
STxt_WithoutCheck.Visible := (pos('XX',d.CreateCode)+pos('66',d.CreateCode)) <> 0;
end;

procedure TFrmNewJurnalRec2.PrintButtonClick(Sender: TObject);
begin
// if ValidList(False) then
// begin
// if isNew then SaveNewList
// else SaveOpenList;
// PrintListRMU;
// Close;
// end;
if ValidList(False) then
begin
MainDialog.ADatabase.StartTransaction;
try
if isNew then SaveNewList
else SaveOpenList;
MainDialog.ADatabase.Commit; {if all sucsesful then commit}
PrintListRMU;
except
MainDialog.ADatabase.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end; {try }
Close;
end;
end;

procedure TFrmNewJurnalRec2.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if Query.Active then Query.Close;
if QryAKB.Active then QryAKB.Close;
if QryAKB_PL.Active then QryAKB_PL.Close;
// if Pricep.Active then Pricep.Close;
if PListQuery.Active then PListQuery.Close;
isVisible := False;
STxt_WithoutCheck.Visible := false;
end;
procedure TFrmNewJurnalRec2.CustomButtonClick(Sender: TObject);
begin
if not isClose then
begin
CustomForm.isQuery := False;
CustomForm.ShowModal;
if CustomForm.ModalResult = mrYes then
begin
IdCustom := CustomForm.IdCustom;
CustomButton.Caption := CustomForm.NaCustom;
end;
end;
end;

procedure TFrmNewJurnalRec2.RejimButtonClick(Sender: TObject);
begin
if isNew then
begin
with RejimForm do
begin
ShowModal;
if ModalResult = mrYes then
begin
IdRejim := Rejim.FieldByName('ID_REJIM').asFloat;
RejimButton.Caption := Rejim.FieldByName('NA_REJIM').asString;
DataTimeChange;
end;
end;
end;
end;

procedure TFrmNewJurnalRec2.FormCreate(Sender: TObject);
begin
isVisible := False;
end;
procedure TFrmNewJurnalRec2.DelCurrentDriver;
var d: TData;
begin
d := DriversOutline[DriversOutline.SelectedItem].Data;
DelDriverQuery.ParamByName('ID_PAGE').asFloat := IdList;
DelDriverQuery.ParamByName('ID_DRIVER').asFloat := d.mid;
DelDriverQuery.ExecSQL;
end;

procedure TFrmNewJurnalRec2.RdBtnTehGoodYESClick(Sender: TObject);
begin
// with (Sender as TradioButton) do
with RdBtnTehGoodYES do
if Checked then begin
font.Style := [fsBold, fsUnderline];
RdBtnTehGoodNO.Checked := false;
RdBtnTehGoodNO.font.Style := [];
end else RdBtnTehGoodYES.font.Style := [];
end;

procedure TFrmNewJurnalRec2.RdBtnTehGoodNOClick(Sender: TObject);
begin
// with (Sender as TradioButton) do
with RdBtnTehGoodNO do
if Checked then begin
font.Style := [fsBold, fsUnderline];
RdBtnTehGoodYES.Checked := false;
RdBtnTehGoodYES.font.Style := [];
end else RdBtnTehGoodNO.font.Style := [];
end;
end.














91

1. Бобков А.С. Охрана труда и экологическая безопасность в химической промышленности / А.С. Бобков. – М.: Химия, 1998. – 400 с.
2. Бушуев С.Д. Автоматика и автоматизация производственных процессов / С.Д. Бушуев, В.С. Михайлов. – М.: Высшая школа, 1990. – 232 с.
3. Двойнишников В.А. Конструкция и расчёт котлов и котельных установок / В.А. Двойнишников.– М.: Машиностроение, 1988. – 264 с.
4. Клюев А.С. Проектирование систем автоматизации технологических процессов / А.С. Клюев.– М.: Энергия, 2004, – 464 с.
5. Павло, И.И. Котельные установки и тепловые сети / И.И. Павлов, М.Н. Фёдоров. – М.: Стройиздат, 1986. – 232 с.
6. Петелин Д.П. Автоматизация технологических процессов в текстильной промышленности / Д.П. Петелин. – М.: Лёгкая индустрия, 1980. – 320 с.
7. Прокофьев А.П. Экономика, организация и планирование в химической промышленности / А.П. Прокофьев. – М.: Химия, 1986. – 311 с.
8. Сергеев А.В. Справочное учебное пособие для персонала котельных / А.В. Сергеев. – СПБ.: ДЕАН, 2007. – 320 с.
9. Файерштейн Л. М. Справочник по автоматизации котельных / Л.М. Файерштейн, Л.С. Этинген, Гохбойм Г. Г. – М.: Энергия, 1999. – 344 с.
10. Шавров А.И. Автоматика / А.И. Шавров. – М.: Колос, 2000. – 259 с.
11. Щербаков В.С. Основы моделирования систем автоматического регулирования и электротехнических систем в среде MATLAB и SIMULINK / В.С. Щербаков, А.А. Руппель, В.А. Глушец. – Омск: Изд-во СибАДИ, 2003. – 160 с.
12. Чекрыжов С. Автоматизация типовых процессов химических производств Учебное пособие. - Кохтла-Ярве: 2007. - 151 стр.
13. Иванова Г.В. Автоматизация технологических процессов основных химических производств СПб, Санкт-Петербургский государственный технологический институт (технический университет), 2003 г. - 134 с.
14. Рукин В.Л., Коробейникова У.Ю. Системы управления химико-технологическими процессами СПб.: СПбГТИ(ТУ), 2010. - 136 с.
15. Дятлова Е.П., Сафонова М.Р. Проектирование автоматизированных систем управления технологическими процессами ЦБП
16. Ремизова О.А., Рудакова И.В. Системы управления химико-технологическими процессами
17. Лапшенков Г.И., Полоцкий Л. М - Автоматизация производственных процессов в химической промышленностиТехнические средства и лабораторные работы. - Изд. 3-е, перераб. и доп.— М.: Химия, 1988. - 288 с: ил. ISBN 5-7245-0007-8
18. Миронов В.М., Беляев В.М. Основы автоматизированного проектирования химических производств Учебное пособие для студентов очного и заочного обучения по специальности 170500 – «Машины и аппараты химических производств». – Томск, ТПУ, 2001. – 169 с.
19. Бельдеева Л.Н. Технологические измерения на предприятиях химической промышленности. В 2-х частях Учебное пособие /Алт. гос. техн. ун-т им. И. И. Ползунова. -. Барнаул: изд-во АлтГТУ, 2002. - (73+76) с
20. ГОСТ 12.0003-74 " Опасные и вредные производственные факторы. Классификация "
21. ГОСТ 12.1.005-88 * «ССБТ. Общие санитарно-гигиенические требования к воздуху рабочей зоны»
22. СНиП 2.08.02-89 «Общественные здания и сооружения»
23. СНиП 2152-80 санитарно-гигиенические нормы допустимых уровней ионизации воздуха производственных и общественных помещений.
24. СНиП II - 4 - 79 “Естественное и искусственное освещение. Нормы проектирования ”
25. ГОСТ 12.2 032-78 «Рабочее место при выполнении работ сидя. Общие эргономические требования»
26. СанПиН 2.2.2.452.96 «Общие гигиенические требования к помещениям для эксплуатации ВДТ и ПЭВМ»
27. Правила устройства электрооборудования
28. ГОСТу12.1 004-76 «Пожарная безопасность. Общие требования»
29. ГОСТ 12.1 006-84 «Электромагнитные поля радиочастот. Допустимые уровни на рабочих местах и требования к проведению контроля»
30. ГОСТ 12.1 019 – 79 «Электробезопасность. Общие требования и номенклатура видов защиты»

Вопрос-ответ:

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

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

Как работает анализ газовой котельной как объекта автоматизации?

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

Какие функции выполняет комплекс автоматизации газовой котельной?

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

Какие существуют средства автоматизации газовых котельных?

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

Какие преимущества модернизации автоматизированной системы управления расходом топлива газовой котельной?

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

Что описывает технологический раздел?

Технологический раздел описывает процесс модернизации автоматизированной системы управления расходом топлива газовой котельной промышленного предприятия ООО Альфа.

Что включает анализ газовой котельной?

Анализ газовой котельной включает оценку объекта автоматизации и определение его особенностей.

Какие функции выполняет комплекс автоматизации?

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

Какие средства автоматизации используются для газовых котельных?

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

Какой контроллер используется в автоматизации газовых котельных?

В автоматизации газовых котельных часто используется контроллер СПЕКОН СК, который обеспечивает управление и контроль работы системы.

Что представляет собой модернизация автоматизированной системы управления расходом топлива газовой котельной ООО Альфа?

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

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

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