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

Технологическая подготовка производства при использовании станков с ЧПУ. Описание обрабатываемых поверхностей для целей последующего программирования. Структура автоматизированной системы управления цехом. Расчеты и разработка управляющей программы.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 06.10.2014
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

24. СанПиН 2.2.4. 548 1. - 2006. Гигиенические требования к микроклимату производственных помещений. - М.: Госкомсанэпиднадзор, 2006.

25. СанПиН 2.2.2. 542-06. Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы. - М.: Госкомсанэпиднадзор, 2006.

Приложение А

(обязательное)

Тема: Конвертер для повышения оперативности перепрограммирования станков с ЧПУ

Текст программы

Всего листов - 30

2009

Файл Project1.dpr

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2},

Unit3 in 'Unit3.pas' {AboutBox},

Unit5 in 'Unit5.pas' {Form5},

Unit6 in 'Unit6.pas' {Form6};

{$R *.res}

begin

Application.Initialize;

Application.Title := 'Наладчик 1.6.1';

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm5, Form5);

Application.CreateForm(TForm6, Form6);

Form1.Label3.Caption:= 'Всего строк';

Application.CreateForm(TForm2, Form2);

Application.CreateForm(TAboutBox, AboutBox);

Application.Run;

end.

Файл Unit1.pas

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Menus, ExtCtrls, ToolWin, ComCtrls, ImgList, Printers,

DBCtrls, Registry, IniFiles;

type

TForm1 = class(TForm)

memo1: TMemo;

MainMenu1: TMainMenu;

OpenDialog1: TOpenDialog;

FontDialog1: TFontDialog;

PrinterSetupDialog1: TPrinterSetupDialog;

PrintDialog1: TPrintDialog;

fayl: TMenuItem;

Nastroyki: TMenuItem;

fond: TMenuItem;

Printery: TMenuItem;

ToolBar1: TToolBar;

ToolButton1: TToolButton;

ImageList1: TImageList;

Parametry: TMenuItem;

ToolButton2: TToolButton;

SaveDialog1: TSaveDialog;

ToolButton3: TToolButton;

Label1: TLabel;

Help: TMenuItem;

Versia: TMenuItem;

Vyhod: TMenuItem;

Save: TMenuItem;

Open: TMenuItem;

Print: TMenuItem;

ToolButton4: TToolButton;

ToolButton6: TToolButton;

NomerKadra: TCheckBox;

Probel: TCheckBox;

Pustostr: TCheckBox;

PanelSostoyaniya: TStatusBar;

Indikator: TProgressBar;

ToolButton9: TToolButton;

ReplaceDialog1: TReplaceDialog;

Cancel: TButton;

Obrabotka: TButton;

Label2: TLabel;

Label3: TLabel;

Panel1: TPanel;

Panel2: TPanel;

ToolButton5: TToolButton;

ToolButton8: TToolButton;

procedure ButPrinterClick(Sender: TObject);

procedure ButPechatClick(Sender: TObject);

procedure fondClick(Sender: TObject);

procedure PrinteryClick(Sender: TObject);

procedure PechatClick(Sender: TObject);

procedure ButParametrClick(Sender: TObject);

procedure FormResize(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure FormCreate(Sender: TObject);

procedure ToolButton1Click(Sender: TObject);

procedure ParametryClick(Sender: TObject);

procedure ToolButton2Click(Sender: TObject);

procedure ToolButton3Click(Sender: TObject);

procedure VersiaClick(Sender: TObject);

procedure VyhodClick(Sender: TObject);

procedure SaveClick(Sender: TObject);

procedure OpenClick(Sender: TObject);

procedure PrintClick(Sender: TObject);

procedure CancelClick(Sender: TObject);

procedure ToolButton6Click(Sender: TObject);

procedure ToolButton4Click(Sender: TObject);

procedure ToolButton9Click(Sender: TObject);

procedure ReplaceDialog1Replace(Sender: TObject);

procedure ObrabotkaClick(Sender: TObject);

procedure memo1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ToolButton5Click(Sender: TObject);

procedure ToolButton8Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

st = ' Параметры: '; // текст в строке состояния + в модуле 2

Code_Begin = 100;

var

Form1: TForm1;

Code_My, nach, oshibka, m, uslovie: Integer;

Code_Reg: longint;

proverka_sushesvovania_ini: byte;

reestra, reestrc, reestrb, reestrMy_Code, reestrReg_Code: integer;

reestrversia: string[20];

nach_period, Hac: integer;

Stroka: TStrings;

memo1mod: boolean;

I, J, I_sled, J_sled: real;

X_nast, X_pred, X_sled, Y_nast, Y_pred, Y_sled: real;

Z, A, Uvmmayak, K : real;

implementation

uses Unit2, Unit3, Unit5;

{$R *.dfm}

procedure TForm1.ButPrinterClick(Sender: TObject);

begin

PrinterSetupDialog1.Execute

end;

procedure TForm1.ButPechatClick(Sender: TObject);

begin

PrintDialog1.Execute

end;

procedure TForm1.FondClick(Sender: TObject);

begin

if FontDialog1.Execute then

Memo1.Font:= FontDialog1.Font;

end;

procedure TForm1.PrinteryClick(Sender: TObject);

begin

PrinterSetupDialog1.Execute

end;

procedure TForm1.PechatClick(Sender: TObject);

begin

ToolButton3Click(Sender);

end;

procedure TForm1.ButParametrClick(Sender: TObject);

begin

Form2.ShowModal;

end;

Procedure TForm1.FormResize( Sender: TObject); // Изменение размера формы

begin

Memo1.Left:= 10; // Положение слева

Memo1.Top:= 60; // Положение сверху

Memo1.Width:= Form1.ClientWidth-130; // Ширина

Memo1.Height:= Form1.ClientHeight-100; // Высота

NomerKadra.Left:= Form1.ClientWidth-15-NomerKadra.Width;

Probel.Left:= Form1.ClientWidth-15-Probel.Width;

Pustostr.Left:= Form1.ClientWidth-15-Pustostr.Width;

Cancel.Left:= Form1.ClientWidth-20-Cancel.Width;

Obrabotka.Left:= Form1.ClientWidth-20-Obrabotka.Width;

Label2.Left:= Form1.ClientWidth-40-Cancel.Width;

Label3.Left:= Form1.ClientWidth-40-Cancel.Width;

Panel1.Left:= Form1.ClientWidth-18-Panel1.Width;

Panel2.Left:= Form1.ClientWidth-18-Panel2.Width;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

if Memo1mod then // Если поле Мемо1 изменилось

begin

CanClose:= MessageDlg(' Содержимое редактора изменилось '#10#13' Хотите сохранить данные?', mtConfirmation,[mbYes, mbNo], 0) = mrYes;

if CanClose then ToolButton2Click(Sender);

CanClose:= true;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

const

Reg_Code = 1234567890;

My_Code = 469103;

var

RegIni: TRegistry;

Ini: TIniFile;

data: TDatetime;

begin

DateSeparator:= '.';

DecimalSeparator:= '.';

ShortDateFormat:= 'dd/mm/yyyy';

memo1mod:= false;

reestrMy_Code:= 0;

reestrReg_Code:= 0;

data:= Date; // получаем сегодняшнюю дату

nach_period:= Trunc(data);

Ini:= TIniFile.Create('Nal.ini');

proverka_sushesvovania_ini:= Ini.ReadInteger('START', 'CountStart', 0);

if proverka_sushesvovania_ini = 0 then

begin

ini.WriteInteger('START', 'CountStart', 1);

ini.WriteDate('DateBegin', 'DateBegin', data); //в формате дд.мм.гггг

ini.WriteDate('DateEnd', 'DateEnd', data + 30); //в формате дд.мм.гггг

ini.WriteString('Versia', 'Versia', Application.Title);

ini.WriteInteger('CodeBegin', 'CodeBegin', Code_Begin);

ini.WriteInteger('Hac','Hac', nach_period);

end

else

begin

Code_My:= ini.ReadInteger('Code_My', 'Code_My', 0);

Code_Reg:= ini.ReadInteger('Code_Reg', 'Code_Reg', 0);

Hac:= Ini.ReadInteger('Hac','Hac',0);

end;

Ini.Free;

Form1.Caption:= Application.Title;

Form1.memo1.Clear;

Form1.PanelSostoyaniya.Panels[0].Text:= st + ' Не обрабатывать ';

Form1.Panel1.Caption:= '0';

Form1.Panel2.Caption:= '0';

RegIni:= TRegistry.Create;

RegIni.RootKey:= HKEY_LOCAL_MACHINE;

RegIni.OpenKey('Software\Naladchik', true);

if not RegIni.KeyExists('a') then // Если нет этого ключа то прописываем.

begin

RegIni.CreateKey('a');

RegIni.WriteInteger('a', 100);

RegIni.WriteString('Versia', Application.Title);

RegIni.WriteInteger('b', nach_period); // в формате 00000

RegIni.WriteInteger('c', nach_period + 30); // в формате 00000

RegIni.CloseKey;

RegIni.Free;

end;

RegIni:= TRegistry.Create;

RegIni.RootKey:= HKEY_LOCAL_MACHINE;

RegIni.OpenKey('Software\Naladchik', false);

reestra:= RegIni.ReadInteger('a');

reestrversia:= RegIni.ReadString('Versia');

reestrb:= RegIni.ReadInteger('b');

reestrc:= RegIni.ReadInteger('c');

if proverka_sushesvovania_ini = 2 then

begin

reestrMy_Code:= RegIni.ReadInteger('d');

reestrReg_Code:= RegIni.ReadInteger('e');

end;

RegIni.CloseKey;

RegIni.Free;

if Hac > nach_period then nach_period:= Hac // защита от перевода даты

else Hac:= nach_period;

Ini:= TIniFile.Create('Nal.ini');

ini.WriteInteger('Hac', 'Hac', Hac);

ini.Free;

// Code_My и Code_Reg из ini файла

if (Code_My = My_Code) and (Code_Reg = Reg_Code) and (reestrMy_Code = My_Code) and (reestrReg_Code = Reg_Code)

then Form1.Caption:= Application.Title + '(Зарегистрированная версия)'

else

begin

if reestrc > nach_period then

Form1.Caption:= Application.Title + ' (Осталось '+IntToStr(reestrc - nach_period)+' дней)';

if reestrc <= nach_period then

begin

ShowMessage('Демонстрационный период закончен' + #13 + 'За регистрацией обратитесь к разработчику'+#13'dimasoft1@mail.ru');

Halt(1);

end;

end;

end;

procedure TForm1.ToolButton1Click(Sender: TObject);

var

kol: integer;

begin

Indikator.Position:= 0;

Form1.PanelSostoyaniya.Panels[1].Text:= '';

Memo1.Clear;

if OpenDialog1.Execute then

begin

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

label1.Caption:= OpenDialog1.FileName;

kol:= Memo1.Lines.Count;

Panel2.Caption:= '0';

Panel1.Caption:= IntToStr(kol - 1);

end;

Form2.PC_VM.Enabled:= true;

Form2.PC_MAYAK.Enabled:= true;

Form2.VM_MAYAK.Enabled:= true;

Form2.MAYAK_VM.Enabled:= true;

Form2.FormActivate(Sender);

end;

procedure TForm1.ParametryClick(Sender: TObject);

begin

Form2.ShowModal;

end;

procedure TForm1.ToolButton2Click(Sender: TObject);

begin

if SaveDialog1.Execute then

begin

Memo1.Lines.SaveToFile(SaveDialog1.FileName);

Memo1.Modified:= false;

end;

end;

procedure TForm1.ToolButton3Click(Sender: TObject); // Печать

var

line: System.TextFile;

i: integer;

begin

if PrintDialog1.Execute then

begin

AssignPrn(line);

rewrite(line);

Printer.Canvas.Font:= Memo1.Font;

for i:= 0 to memo1.Lines.Count-1 do writeln(line,' ', Memo1.Lines[i]);

System.CloseFile(line);

end;

end;

procedure TForm1.VersiaClick(Sender: TObject);

begin

AboutBox.ShowModal;

end;

procedure TForm1.VyhodClick(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.SaveClick(Sender: TObject);

begin

ToolButton2Click(Sender);

end;

procedure TForm1.OpenClick(Sender: TObject);

begin

ToolButton1Click(Sender);

end;

procedure TForm1.PrintClick(Sender: TObject);

begin

ToolButton3Click(Sender);

end;

procedure TForm1.CancelClick(Sender: TObject);

begin

Form1.Close;

end;

procedure NaytiKoordinatu(kadr: string; koordinata: char; var poluchenaya: string);

var

p : integer;

poz_10: string[100];

per : string[10];

r: real;

begin

per:=' ';

kadr:= Concat(kadr, ' ');

nach:= pos(koordinata,kadr);

nach:= Succ(nach);

poz_10:= copy(kadr, nach, 100);

val(poz_10,r,oshibka);

for p:=1 to oshibka - 1 do

per[p]:= poz_10[p];

if poz_10 = ' ' then oshibka:= 1;

poluchenaya:= TrimRight(per);

end;

function DobavitTochku( f: string): string; // Добавляет точку, если её нет

begin

if pos('.', f) = 0

then f:= Concat(f, '.');

Result:= f;

end;

procedure Podhod_G41_G42_radius;

begin // Х и Y уже найдены

if pos('G3', Stroka.Strings[Succ(m)]) <> 0 then

begin

if (I > 0) and (J >= 0) then

begin

I_sled:= 1;

J_sled:= -1;

exit;

end;

if (I < 0) and (J <= 0) then

begin

I_sled:= -1;

J_sled:= 1;

exit;

end;

if (I <= 0) and (J > 0) then

begin

I_sled:= 1;

J_sled:= 1;

exit;

end;

if (I >= 0) and (J < 0) then

begin

I_sled:= -1;

J_sled:= -1;

exit;

end;

end;

if pos('G2', Stroka.Strings[Succ(m)]) <> 0 then

begin

if (I >= 0) and (J > 0) then

begin

I_sled:= -1;

J_sled:= 1;

exit;

end;

if (I <= 0) and (J < 0) then

begin

I_sled:= 1;

J_sled:= -1;

exit;

end;

if (I < 0) and (J >= 0) then

begin

I_sled:= -1;

J_sled:= -1;

exit;

end;

if (I > 0) and (J <= 0) then

begin

I_sled:= 1;

J_sled:= 1;

exit;

end;

end;

end;

// Преобразует строку, удаляет и вставляет подстроку ВМ

function preobrazovanieVM( vhod_v_preobrazovanie: real ;var kadr: string): string;

var

stroka: string[10];

begin

delete(kadr,nach,oshibka-1);

stroka:= FloatToStr(vhod_v_preobrazovanie); // Преобразуем в число строку

insert(stroka, kadr, nach);

end;

// Преобразует строку, удаляет и вставляет подстроку МАЯК

function preobrazovanieMAYAK( vhod_v_preobrazovanie: real ;var kadr: string): string;

var

stroka: string[10];

begin

delete(kadr,nach,oshibka-1);

if vhod_v_preobrazovanie <> 0 then

begin

stroka:= FloatToStrF(vhod_v_preobrazovanie, fffixed, 12, 3); // Преобразуем в число строку

vhod_v_preobrazovanie:= StrToFloat(stroka); // Был глюк при конвертации

stroka:= FloatToStr(vhod_v_preobrazovanie); // Сейчас вроде работает

stroka:= DobavitTochku(stroka); // Добавляет точку, если её нет

end

else stroka:= '0'; // вставляем без точки

insert(stroka, kadr, nach);

end;

procedure Podhod_G41_G42_line;

var

str: String;

begin

str:= stroka.Strings[Succ(m)];

if Pos('X', str) <> 0 then

begin

NaytiKoordinatu(str, 'X', str);

X_sled:= StrToFloat(str);

end

else

begin

if (Form2.PC_VM.Checked) or (Form2.MAYAK_VM.Checked) then

X_sled:= X_nast / 1000

else

X_sled:= X_nast;

end;

str:= stroka.Strings[Succ(m)];

if Pos('Y', str) <> 0 then

begin

NaytiKoordinatu(str, 'Y', str);

Y_sled:= StrToFloat(str);

end

else

begin

if (Form2.PC_VM.Checked) or (Form2.MAYAK_VM.Checked) then

Y_sled:= Y_pred / 1000

else

Y_sled:= Y_nast;

end;

if (Form2.PC_VM.Checked) or (Form2.MAYAK_VM.Checked) then

begin

X_sled:= X_sled * 1000;

Y_sled:= Y_sled * 1000;

X_sled:= X_sled - X_nast;

Y_sled:= Y_sled - Y_nast;

end

else

begin

X_sled:= X_sled - X_nast;

Y_sled:= Y_sled - Y_nast;

end;

end;

function FindVstavki(koordinata: char; kadr: string): integer;

begin

case koordinata of

'X': begin

if pos('Y', kadr) <> 0 then Result:= pos('Y', kadr)

else if pos('I', kadr) <> 0 then Result:= pos('I', kadr)

else if pos('J', kadr) <> 0 then Result:= pos('J', kadr)

else if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

'Y': begin

if pos('I', kadr) <> 0 then Result:= pos('I', kadr)

else if pos('J', kadr) <> 0 then Result:= pos('J', kadr)

else if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

'I': begin

if pos('J', kadr) <> 0 then Result:= pos('J', kadr)

else if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

'J': begin

if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

else

Result:= Length(kadr) + 1;

end;

end;

procedure TForm1.ObrabotkaClick(Sender: TObject);

label

metka;

var

kol, buf: integer;

Proc, proci, u: integer;

vyh: string;

PolChisla_1Proc, uvel: real;

bufer: string;

Priz_pusto_memo: boolean;

procedure DelProbel(var kadr: string); // Удаление пробелов

var

k: integer;

begin

while pos(' ', kadr) <> 0 do

begin

k:= pos(' ', kadr);

delete(kadr, k, 1);

end;

end;

procedure pustostroka;

begin

stroka.Delete(m); // Удаляем пустую строку

Dec(kol); // Уменьшаем кол-во строк на 1

Dec(m); // Уменьшаем на одну стороку

end;

procedure nomerkadra(var kadr: string);

var

error, nach, x: integer;

poz_N7: string [10];

begin

poz_N7:= ' ';

nach:= pos('N',kadr); // Номер позиции 'N'

if nach <> 0 then // Позиция найдена

begin

Inc(nach); // Наращиваем на 1

poz_N7:= copy(kadr, nach, 10);

val(poz_N7,x,error); // проверяем на ошибку

if error = 1 then

else

begin

delete(kadr,nach,error-1); // Удаляем старое значение

Inc(buf); // Наращиваем кадр на 1

insert(IntToStr(buf), kadr, nach); // Вставляем новое число

end;

end;

end;

Procedure PC_MAYAK(var kadr: string);

var

I_est: boolean;

st: string;

s: string[10];

begin

if (pos('%', kadr) <> 0) or (pos('$', kadr) <> 0) then exit;

I_est:= False;

if (pos('I',kadr) <> 0) or (pos('J',kadr) <> 0) then I_est:= true;

if pos('X',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'X', vyh);

if oshibka <> 1 then

begin

X_nast:= StrToFloat(vyh);

PreobrazovanieMayak(X_nast, kadr); // не было точки

end;

end

else

if I_est then // Добавление Х Если нет

begin

uslovie:= FindVstavki('X', kadr);

s:= FloatToStr(X_nast);

if X_nast <> 0 then s:= DobavitTochku(s);

insert(Concat('X', s), kadr, uslovie);

end;

if pos('Y',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'Y', vyh);

if oshibka <> 1 then

begin

Y_nast:= StrToFloat(vyh);

PreobrazovanieMayak(Y_nast, kadr) // не было точки

end;

end

else

if I_est then // Добавление Y Если нет

begin

uslovie:= FindVstavki('Y', kadr);

s:= FloatToStr(Y_nast);

if Y_nast <> 0 then s:= DobavitTochku(s);

insert(Concat('Y',s), kadr, uslovie);

end; // Подходы

if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then

begin

try

s:= Stroka.Strings[Succ(m)]; // ошибка нет строки вообще

except // так не должно быть это ошибка оператора

on EStringListError do // добавляем пустую строку и исключаем ошибку

stroka.Add('');

end;

if pos('X', kadr) = 0 then

begin // Вставка Х и Y если нет

uslovie:= FindVstavki('X', kadr);

s:= FloatToStr(X_nast); // В позиции X Y I J F M

if X_nast <> 0 then s:= DobavitTochku(s);

Insert('X' + s, kadr, uslovie);

end;

if pos('Y', kadr) = 0 then

begin

uslovie:= FindVstavki('Y', kadr);

s:= FloatToStr(Y_nast);

if Y_nast <> 0 then s:= DobavitTochku(s);

Insert('Y' + s, kadr, uslovie);

end;

if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)

then

begin

Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);

I:= StrToFloat(st);

Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);

J:= StrToFloat(st);

Podhod_G41_G42_radius;

J:= J + Y_nast;

if (I_sled = -1) and (J > 0) then J:= -J; // ЛОГИЧЕСКИЙ ПЕРЕСЧЁТ

if (I_sled = 1) and (J < 0) then J:= -J;

I:= I + X_nast;

if(J_sled = -1) and (I > 0) then I:= -I;

if(J_sled = 1) and (I < 0) then I:= -I;

if pos('J', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'J', st);

PreobrazovanieMayak(I, kadr);

end

else

begin

uslovie:= FindVstavki('J', kadr);

Insert('J' + FloatToStr(I), kadr, uslovie);

end;

if pos('I', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'I', st);

PreobrazovanieMayak(J, kadr);

end

else

begin

uslovie:= FindVstavki('I', kadr);

Insert('I' + FloatToStr(J), kadr, uslovie);

end;

X_pred:= X_nast;

Y_pred:= Y_nast;

exit;

end

else

begin

Podhod_G41_G42_line; // ЛИНЕЙНЫЕ ПОДХОДЫ РАСЧЁТ

if pos('I', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'I', st);

PreobrazovanieMayak(X_sled, kadr);

end

else

begin

uslovie:= FindVstavki('I', kadr);

Insert('I' + FloatToStr(X_sled) + '.', kadr, uslovie);

end;

if pos('J', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'J', st);

PreobrazovanieMayak(Y_sled, kadr);

end

else

begin

uslovie:= FindVstavki('J', kadr);

Insert('J' + FloatToStr(Y_sled) + '.', kadr, uslovie);

end;

exit;

end;

end;

uslovie:= pos('I',kadr); // расчёт радиусов

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'I',vyh);

if oshibka = 1 then

else

begin

I:= StrToFloat(vyh);

I:= X_pred + I;

preobrazovanieMAYAK(I,kadr);

end;

end;

uslovie:= pos('J',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'J',vyh);

if oshibka = 1 then

else

begin

J:= StrToFloat(vyh);

J:= Y_pred + J;

preobrazovanieMAYAK(J,kadr);

end;

end;

X_pred:= X_nast;

Y_pred:= Y_nast;

end;

Function VM_MAYAK(var kadr: string): string;

var

I_est: boolean;

s, st: string;

begin

if (pos('%', kadr) <> 0) or (pos('$', kadr) <> 0) then exit;

I_est:= False;

if (pos('I',kadr) <> 0) or (pos('J',kadr) <> 0) then I_est:= true;

uslovie:= pos('X',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'X', vyh);

if oshibka = 1 then

else

begin

vyh:= TrimRight(vyh); // Удаляем лишние пробелы справа

X_nast:= StrToFloat(vyh) / 1000;

preobrazovanieMAYAK(X_nast,kadr);

end;

end

else

if I_est = true then // Добавление Х Если нет

begin

uslovie:= pos('Y',kadr);

insert('X'+ vyh, kadr, uslovie);

end;

uslovie:= pos('Y',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'Y', vyh);

if oshibka = 1 then

else

begin

vyh:= TrimRight(vyh); // Удаляем лишние пробелы справа

Y_nast:= StrToFloat(vyh) / 1000;

preobrazovanieMAYAK(Y_nast,kadr);

end;

end

else

if I_est = true then // Добавление Y Если нет

begin

uslovie:= pos('I',kadr);

insert('Y' + vyh, kadr, uslovie);

end;

if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then

begin

try

s:= Stroka.Strings[Succ(m)]; // ошибка нет строки вообще

except

on EStringListError do // добавляем пустую строку и исключаем ошибку

stroka.Add('');

end;

if pos('X', kadr) = 0 then

begin // Вставка Х и Y если нет

uslovie:= FindVstavki('X', kadr);

s:= FloatToStr(X_nast); // В позиции X Y I J F M

if X_nast <> 0 then s:= DobavitTochku(s);

Insert('X' + s, kadr, uslovie);

end;

if pos('Y', kadr) = 0 then

begin

uslovie:= FindVstavki('Y', kadr);

s:= FloatToStr(Y_nast);

if Y_nast <> 0 then s:= DobavitTochku(s);

Insert('Y' + s, kadr, uslovie);

end;

if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)

then

begin

Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);

I:= StrToFloat(st);

Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);

J:= StrToFloat(st);

Podhod_G41_G42_radius;

J:= J / 1000;

J:= J + Y_nast;

if (I_sled = -1) and (J > 0) then J:= -J;

if (I_sled = 1) and (J < 0) then J:= -J;

I:= I / 1000;

I:= I + X_nast;

if(J_sled = -1) and (I > 0) then I:= -I;

if(J_sled = 1) and (I < 0) then I:= -I;

if pos('J', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'J', st);

PreobrazovanieMayak(I, kadr);

end

else

begin

uslovie:= FindVstavki('J', kadr);

Insert('J' + FloatToStr(I), kadr, uslovie);

end;

if pos('I', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'I', st);

PreobrazovanieMayak(J, kadr);

end

else

begin

uslovie:= FindVstavki('I', kadr);

Insert('I' + FloatToStr(J), kadr, uslovie);

end;

X_pred:= X_nast;

Y_pred:= Y_nast;

exit;

end

else

begin // Линейный подход

st:= Stroka.Strings[Succ(m)];

uslovie:= Pos('X', st);

if uslovie <> 0 then

begin

NaytiKoordinatu(st, 'X', st);

X_sled:= StrToFloat(st) / 1000;

X_sled:= X_sled - X_nast;

end

else X_sled:= 0; // Если нет в кадре то 0

st:= stroka.Strings[Succ(m)];

uslovie:= Pos('Y', st);

if uslovie <> 0 then

begin

NaytiKoordinatu(st, 'Y', st);

Y_sled:= StrToFloat(st) / 1000;

Y_sled:= Y_sled - Y_nast;

end

else Y_sled:= 0;

if pos('I', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'I', st);

PreobrazovanieMayak(X_sled, kadr);

end

else

begin

uslovie:= FindVstavki('I', kadr);

Insert('I' + FloatToStr(X_sled) + '.', kadr, uslovie);

end;

if pos('J', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'J', st);

PreobrazovanieMayak(Y_sled, kadr);

end

else

begin

uslovie:= FindVstavki('J', kadr);

Insert('J' + FloatToStr(Y_sled) + '.', kadr, uslovie);

end;

exit;

end;

end;

uslovie:= pos('Z',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'Z', vyh);

if oshibka = 1 then

else

begin

vyh:= TrimRight(vyh); // Удаляем лишние пробелы справа

Z:= StrToFloat(vyh) / 1000;

preobrazovanieMAYAK(Z,kadr);

end;

end;

uslovie:= pos('I',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'I',vyh);

if oshibka = 1 then

else

begin

vyh:= TrimRight(vyh); // Удаляем лишние пробелы справа

I:= StrToFloat(vyh) / 1000;

I:= X_pred + I;

preobrazovanieMAYAK(I,kadr);

end;

end;

uslovie:= pos('J',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'J',vyh);

if oshibka = 1 then

else

begin

vyh:= TrimRight(vyh); // Удаляем лишние пробелы справа

J:= StrToFloat(vyh) / 1000;

J:= Y_Pred + J;

preobrazovanieMAYAK(J,kadr);

end;

end;

uslovie:= pos('U',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'U', vyh);

if oshibka = 1 then

else

begin

vyh:= TrimRight(vyh); // Удаляем лишние пробелы справа

Uvmmayak:= StrToFloat(vyh) / 1000;

preobrazovanieMAYAK(Uvmmayak,kadr);

end;

end;

uslovie:= pos('K',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'K', vyh);

if oshibka = 1 then

else

begin

vyh:= TrimRight(vyh); // Удаляем лишние пробелы справа

K:= StrToFloat(vyh) / 1000;

preobrazovanieMAYAK(K,kadr);

end;

end;

X_pred:= X_nast;

Y_pred:= Y_nast;

end;

Function MAYAK_VM(var kadr: string): string;

var

I_est: boolean;

uslovie: integer;

strok: string[10];

s, st: string;

begin

if pos('%', kadr) <> 0 then exit;

if pos('$', kadr) <> 0 then exit;

I_est:= False;

uslovie:= pos('I',kadr);

if uslovie <> 0 then I_est:= true;

uslovie:= pos('X',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'X',vyh);

if oshibka = 1 then

else

begin

X_nast:= StrToFloat(vyh) * 1000;

X_nast:= Int(X_nast); // Отбрасываем дробную часть

preobrazovanieVM(X_nast,kadr);

end;

end

else

if I_est then

begin

uslovie:= pos('Y',kadr);

strok:= FloatToStr(X_pred); // Преобразуем в число строку

insert('X' + strok, kadr, uslovie);

end;

uslovie:= pos('Y',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'Y',vyh);

if oshibka = 1 then

else

begin

Y_nast:= StrToFloat(vyh) * 1000;

Y_nast:= Int(Y_nast); // Отбрасываем дробную часть

preobrazovanieVM(Y_nast,kadr);

end;

end

else

if I_est then

begin

uslovie:= pos('I',kadr);

strok:= FloatToStr(Y_pred); // Преобразуем в число строку

insert('Y' + strok, kadr, uslovie);

end;

if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then

begin

try

s:= Stroka.Strings[Succ(m)]; // ошибка нет строки вообще

except

on EStringListError do // добавляем пустую строку и исключаем ошибку

stroka.Add('');

end;

if pos('X', kadr) = 0 then

begin // Вставка Х и Y если нет

uslovie:= FindVstavki('X', kadr); // В позиции X Y I J F M

Insert('X' + FloatToStr(X_nast), kadr, uslovie);

end;

if pos('Y', kadr) = 0 then

begin

uslovie:= FindVstavki('Y', kadr);

Insert('Y' + FloatToStr(Y_nast), kadr, uslovie);

end;

if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)

then

begin

Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);

I:= StrToFloat(st);

Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);

J:= StrToFloat(st);

J:= J * 1000;

I:= I * 1000;

I:= I - X_nast;

J:= J - Y_nast;

Podhod_G41_G42_radius;

if (I_sled = -1) and (J > 0) then J:= -J;

if (I_sled = 1) and (J < 0) then J:= -J;

if(J_sled = -1) and (I > 0) then I:= -I;

if(J_sled = 1) and (I < 0) then I:= -I;

if pos('J', kadr) <> 0

then

begin

NaytiKoordinatu(kadr, 'J', st);

PreobrazovanieVM(I, kadr);

end

else

begin

uslovie:= FindVstavki('J', kadr);

Insert('J' + FloatToStr(I), kadr, uslovie);

end;

if pos('I', kadr) <> 0

then

begin

NaytiKoordinatu(kadr, 'I', st);

PreobrazovanieVM(J, kadr);

end

else

begin

uslovie:= FindVstavki('I', kadr);

Insert('I' + FloatToStr(J), kadr, uslovie);

end;

X_pred:= X_nast;

Y_pred:= Y_nast;

exit;

end

else

begin

Podhod_G41_G42_line;

if pos('I', kadr) <> 0

then

begin

NaytiKoordinatu(kadr, 'I', st);

PreobrazovanieVM(X_sled, kadr);

end

else

begin

uslovie:= FindVstavki('I', kadr);

Insert('I' + FloatToStr(X_sled), kadr, uslovie);

end;

if pos('J', kadr) <> 0

then

begin

NaytiKoordinatu(kadr, 'J', st);

PreobrazovanieVM(Y_sled, kadr);

end

else

begin

uslovie:= FindVstavki('J', kadr);

Insert('J' + FloatToStr(Y_sled), kadr, uslovie);

end;

exit;

end;

end;

uslovie:= pos('I',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'I',vyh);

if oshibka = 1 then

else

begin

I:= StrToFloat(vyh) * 1000;

I:= Int(I); // Отбрасываем дробную часть

I:= I - X_pred;

preobrazovanieVM(I,kadr);

end;

end;

uslovie:= pos('J',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'J',vyh);

if oshibka = 1 then

else

begin

J:= StrToFloat(vyh) * 1000;

J:= Int(J); // Отбрасываем дробную часть

J:= J - Y_pred;

preobrazovanieVM(J,kadr);

end;

end;

uslovie:= pos('Z',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'Z',vyh);

if oshibka = 1 then

else

begin

Z:= StrToFloat(vyh) * 1000;

Z:= Int(Z); // Отбрасываем дробную часть

preobrazovanieVM(Z,kadr);

end;

end;

uslovie:= pos('A',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'A',vyh);

if oshibka = 1 then

else

begin

A:= StrToFloat(vyh) * 1000;

A:= Int(A); // Отбрасываем дробную часть

preobrazovanieVM(A,kadr);

Delete(kadr, uslovie, 1);

Insert('U',kadr,uslovie);

end;

end;

uslovie:= pos('K',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'K',vyh);

if oshibka = 1 then

else

begin

K:= StrToFloat(vyh) * 1000;

K:= Int(K); // Отбрасываем дробную часть

preobrazovanieVM(K,kadr);

end;

end;

X_pred:= X_nast;

Y_pred:= Y_nast;

end;

procedure PC_VM(var kadr: string);

var

uslovie: integer;

I_est: boolean;

s, st: string;

begin

if (pos('%', kadr) <> 0) or (pos('$', kadr) <> 0) then exit;

I_est:= False;

if (pos('I',kadr) <> 0) or (pos('J',kadr) <> 0) then I_est:= true;

if pos('X',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'X',vyh);

if oshibka = 1 then

else

begin

X_nast:= StrToFloat(vyh) * 1000;

X_nast:= Int(X_nast); // Отбрасываем дробную часть

preobrazovanieVM(X_nast,kadr);

end;

end

else

if I_est then

begin

uslovie:= pos('Y',kadr); // Преобразуем в число строку

insert('X' + FloatToStr(X_pred), kadr, uslovie);

end;

if pos('Y',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'Y',vyh);

if oshibka = 1 then

else

begin

Y_nast:= StrToFloat(vyh) * 1000;

Y_nast:= Int(Y_nast); // Отбрасываем дробную часть

preobrazovanieVM(Y_nast,kadr);

end;

end

else

if I_est then

begin

uslovie:= pos('I',kadr); // Преобразуем в число строку

insert('Y' + FloatToStr(Y_pred), kadr, uslovie);

end;

if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then

begin

try

s:= Stroka.Strings[Succ(m)]; // ошибка нет строки вообще

except

on EStringListError do // добавляем пустую строку и исключаем ошибку

stroka.Add('');

end;

if pos('X', kadr) = 0 then

begin // Вставка Х и Y если нет

NaytiKoordinatu(Stroka.Strings[Succ(m)], 'X', s);

if oshibka <> 1 then

begin

uslovie:= FindVstavki('X', kadr);

s:= TrimRight(s);

X_nast:= StrToFloat(s) * 1000; // В позиции X Y I J F M

Insert('X' + FloatToStr(X_nast), kadr, uslovie);

end

else

begin

X_nast:= X_pred;

uslovie:= FindVstavki('X', kadr); // В позиции X Y I J F M

Insert('X' + FloatToStr(X_nast), kadr, uslovie);

end;

end;

if pos('Y', kadr) = 0 then

begin

uslovie:= FindVstavki('Y', kadr);

NaytiKoordinatu(Stroka.Strings[Succ(m)], 'Y', s);

s:= TrimRight(s);

Y_nast:= StrToFloat(s) * 1000;

Insert('Y' + FloatToStr(Y_nast), kadr, uslovie);

end;

if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)

then

begin

Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);

I:= StrToFloat(st);

Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);

J:= StrToFloat(st);

Podhod_G41_G42_radius;

J:= J * 1000;

J:= Int(J);

if (I_sled = -1) and (J > 0) then J:= -J;

if (I_sled = 1) and (J < 0) then J:= -J;

if Pos('I', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'I', s);

PreobrazovanieVM(J, kadr);

end

else

begin

uslovie:= FindVstavki('I', kadr);

Insert('I' + FloatToStr(J), kadr, uslovie);

end;

I:= I * 1000;

I:= Int(I);

if(J_sled = -1) and (I > 0) then I:= -I;

if(J_sled = 1) and (I < 0) then I:= -I;

if Pos('J', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'J', s);

PreobrazovanieVM(I, kadr);

end

else

begin

uslovie:= FindVstavki('J', kadr);

Insert('J' + FloatToStr(I), kadr, uslovie);

end;

Exit;

end

else

begin

Podhod_G41_G42_line;

X_sled:= Int(X_sled);

if Pos('X', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'I', s);

PreobrazovanieVM(X_sled, kadr);

end

else

begin

uslovie:= FindVstavki('Y', kadr);

Insert(FloatToStr(X_sled), kadr, uslovie);

end;

Y_sled:= Int(Y_sled);

if Pos('Y', kadr) <> 0 then

begin

NaytiKoordinatu(kadr, 'J', s);

PreobrazovanieVM(Y_sled, kadr);

X_pred:= X_nast;

Y_pred:= Y_nast;

exit;

end

else

begin

uslovie:= FindVstavki('X', kadr);

Insert(FloatToStr(Y_sled), kadr, uslovie);

end;

end;

end;

if pos('I',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'I',vyh);

if oshibka = 1 then

else

begin

I:= StrToFloat(vyh) * 1000;

I:= Int(I); // Отбрасываем дробную часть

preobrazovanieVM(I,kadr);

end;

end;

if pos('J',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'J',vyh);

if oshibka = 1 then

else

begin

J:= StrToFloat(vyh) * 1000;

J:= Int(J); // Отбрасываем дробную часть

preobrazovanieVM(J,kadr);

end;

end;

if pos('Z',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'Z',vyh);

if oshibka = 1 then

else

begin

Z:= StrToFloat(vyh) * 1000;

Z:= Int(Z); // Отбрасываем дробную часть

preobrazovanieVM(Z,kadr);

end;

end;

uslovie:= pos('A',kadr);

if uslovie <> 0 then

begin

NaytiKoordinatu(kadr,'A',vyh);

if oshibka = 1 then

else

begin

A:= StrToFloat(vyh) * 1000;

A:= Int(A); // Отбрасываем дробную часть

preobrazovanieVM(A,kadr);

Delete(kadr, uslovie, 1);

Insert('U',kadr,uslovie);

end;

end;

if pos('K',kadr) <> 0 then

begin

NaytiKoordinatu(kadr,'K',vyh);

if oshibka = 1 then

else

begin

K:= StrToFloat(vyh) * 1000;

K:= Int(K); // Отбрасываем дробную часть

preobrazovanieVM(K,kadr);

end;

end;

X_pred:= X_nast;

Y_pred:= Y_nast;

end;

// НАЧАЛО ОСНОВНОЙ ПРОГРАММЫ obrabotka

begin

if (Form1.NomerKadra.State = cbUnchecked) and (Form1.Probel.State = cbUnchecked) and

(Form1.Pustostr.State = cbUnchecked) and (Form2.Ne_obrabatyvat.Checked) then

begin

ShowMessage(' Обработка не задана ');

Goto metka;

end;

Priz_pusto_memo:= false;

kol:= Memo1.Lines.Count; // Количество строк

if kol = 0 then // Если поле пусто

begin

ShowMessage(' В поле редактирования пусто ');

Goto metka;

end;

memo1mod:= true;

Panel1.Caption:= IntToStr(kol);

buf:= 0; m:= 0; I:= 0; J:= 0;

PolChisla_1Proc:= kol div 100;

uvel:= PolChisla_1Proc;

Indikator.Position:= 0;

Proc:= Succ(Indikator.Position);

u:= 100 div kol;

Proci:= u;

stroka:= TStringList.Create();

stroka.Text:= Memo1.Text;

Memo1.Clear;

repeat

bufer:= stroka.Strings[m];

Panel2.Caption:= IntToStr(Succ(m));

Panel2.Refresh;

if (Form1.Probel.Checked)then

DelProbel(bufer); // Удаляем пробелы

if Form1.NomerKadra.Checked then // включен переключатель

nomerkadra(bufer);

if Form2.PC_MAYAK.Checked then

pc_mayak(bufer);

if Form2.PC_VM.Checked then

pc_vm(bufer);

if Form2.VM_MAYAK.Checked then

VM_MAYAK(bufer);

if Form2.MAYAK_VM.Checked then

Mayak_vm(bufer);

if kol >= 100 then

begin

if m >= PolChisla_1Proc then

begin

Indikator.Position:= Proc;

Form1.PanelSostoyaniya.Panels[1].Text:= ' Выполнено ' + IntToStr(Indikator.Position) + ' %';

PanelSostoyaniya.Refresh; // Перерисовка панели

Inc(proc);

PolChisla_1Proc:= PolChisla_1Proc + uvel;

end;

end

else

begin

Indikator.Position:= Proci;

Form1.PanelSostoyaniya.Panels[1].Text:= ' Выполнено ' + IntToStr(Indikator.Position) + ' %';

PanelSostoyaniya.Refresh; // Перерисовка панели

Inc(proci, u);

end;

stroka.Strings[m]:= bufer; // Для токарного станка

if Length(bufer) = 0 then

if Form1.PustoStr.Checked then

pustostroka;

Bufer:= ''; // Очистка строки Буфер

Inc(m); // Следующая строка (+1)

until m >= kol;

Panel1.Caption:= IntToStr(Stroka.Count); // Сколько реально осталось

Form1.PanelSostoyaniya.Panels[1].Text:= ' Выполнено ' + '100' + ' %';

Indikator.Position:= 100;

if (Form2.PC_MAYAK.Checked) or (Form2.PC_VM.Checked) or (Form2.VM_MAYAK.Checked) or (Form2.MAYAK_VM.Checked) then

begin

Form2.PC_VM.Enabled:= false;

Form2.PC_MAYAK.Enabled:= false;

Form2.VM_MAYAK.Enabled:= false;

Form2.MAYAK_VM.Enabled:= false;

Form2.Ne_obrabatyvat.Checked:= true;

end;

try // Ошибка если в Memo1 пробелы

if Stroka.Strings[0] <> '' then // Вставить пустую строку если её нет

Stroka.Insert(0, '');

except

on EStringListError do

end;

Memo1.Text:= Stroka.Text;

stroka.Free;

metka: // если Поле пустое то выход сюда

end;

procedure TForm1.ToolButton6Click(Sender: TObject); // Кнопка очистить

begin

Memo1.Clear;

Panel1.Caption:= '0';

Panel2.Caption:= '0';

Form2.PC_VM.Enabled:= true;

Form2.PC_MAYAK.Enabled:= true;

Form2.VM_MAYAK.Enabled:= true;

Form2.MAYAK_VM.Enabled:= true;

Label1.Caption:= '';

Form2.FormActivate(Sender);

Memo1.SetFocus;

Indikator.Position:= 0;

end;

procedure TForm1.ToolButton4Click(Sender: TObject); // Кнопка параметры

begin

Form2.ShowModal;

end;

procedure TForm1.Toolbutton9Click(Sender: TObject); // Кнопка найти и заменить

begin

ReplaceDialog1.Execute;

end;

procedure TForm1.ReplaceDialog1Replace(Sender: TObject); // Кнопка найти и заменить

label

10;

begin

Memo1.HideSelection:= true;

10:

if pos(ReplaceDialog1.FindText, Memo1.Text) <> 0 then

begin

Memo1.SelStart:= pos(ReplaceDialog1.FindText, Memo1.Text) - 1 ;

Memo1.SelLength:= Length(ReplaceDialog1.FindText);

Memo1.SelText:= ReplaceDialog1.ReplaceText;

goto 10;

end;

Memo1.HideSelection:= false;

end;

procedure TForm1.memo1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

Panel1.Caption:= IntToStr(Memo1.Lines.Count);

end;

procedure TForm1.ToolButton5Click(Sender: TObject); // Кнопка в верхний регистр

begin

Memo1.Text:= UpperCase(Memo1.Text);

end;

procedure TForm1.ToolButton8Click(Sender: TObject);

begin

Form5.Visible:= true;

end;

end.

Файл Unit2.pas

unit Unit2;

interface

uses

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

Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type

TForm2 = class(TForm)

PereschotProg: TGroupBox;

PC_MAYAK: TRadioButton;

Ne_obrabatyvat: TRadioButton;

PC_VM: TRadioButton;

VM_MAYAK: TRadioButton;

MAYAK_VM: TRadioButton;

Button1: TButton;

Mayk223mp: TRadioButton;

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure Sostoyanie_perekluchateley;

begin

if Form2.Ne_obrabatyvat.Checked then

Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.Ne_obrabatyvat.Caption

else

if Form2.PC_MAYAK.Checked then

Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.PC_MAYAK.Caption

else

if Form2.PC_VM.Checked then

Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.PC_VM.Caption

else

if Form2.VM_MAYAK.Checked then

Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.VM_MAYAK.Caption

else

if Form2.MAYAK_VM.Checked then

Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.MAYAK_VM.Caption

else

if Form2.Mayk223mp.Checked then

Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.Mayk223mp.Caption;

end;

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

Sostoyanie_perekluchateley;

If Mayk223mp.Checked then

begin

Form2.Close;

end;

end;

procedure TForm2.FormActivate(Sender: TObject);

begin

Sostoyanie_perekluchateley;

end;

procedure TForm2.Button1Click(Sender: TObject);

begin

Sostoyanie_perekluchateley;

Form2.Close;

end;

end.

Файл Unit5.pas

unit Unit5;

interface

uses

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

Dialogs, ExtCtrls, StdCtrls;

type

TForm5 = class(TForm)

GroupBox1: TGroupBox;

RadioButton1: TRadioButton;

Edit1: TEdit;

Label1: TLabel;

ButtonObpabotka: TButton;

ButtonNastroyka: TButton;

procedure FormActivate(Sender: TObject);

procedure ButtonObpabotkaClick(Sender: TObject);

procedure ButtonNastroykaClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form5: TForm5;

implementation

uses unit1, unit6;

{$R *.dfm}

procedure TForm5.FormActivate(Sender: TObject);

begin

Form5.Caption:= Application.Title;

end;

procedure TForm5.ButtonObpabotkaClick(Sender: TObject);

var

stroka, stroka1: TStrings;

Name_File, kol_v_stroka: integer;

chast, chot, ObshiySchot: integer;

st, name: WideString;

begin

stroka:= TStringList.Create();

stroka1:= TStringList.Create();

chot:= 0; Name_File:= 1; chast:= 0;

chast:= StrToInt(Edit1.Text) * 955;

kol_v_stroka:= 0;

ObshiySchot:= 0;

stroka1.Text:= Form1.memo1.Text;

repeat

try

st:= stroka1.Strings[ObshiySchot];

except

on EStringListError do

begin

Stroka.Free;

stroka1.Free;

Form1.memo1.Text:= ' Ошибка в редакторе: Возможно в поле редактирования пусто или одни пробелы';

Form5.Close;

Exit;

end;

end;

if chot <= chast then

begin

stroka.Insert(kol_v_stroka, st);

Inc(chot, Length(st)); // Увеличиваем на длину строки

Inc(kol_v_stroka);

Inc(ObshiySchot);

end

else

begin

name:= Concat('E:\Наладчик\Пров\', IntToStr(Name_File), '.txt');

stroka.SaveToFile(name);

stroka.Clear;

chot:= 0;

kol_v_stroka:= 0;

Name_File:= Succ(Name_File);

end;

if (stroka1.Count = ObshiySchot) and (Length(stroka.Text) <> 0) then

begin

name:= Concat('E:\Наладчик\Пров\', IntToStr(Name_File), '.txt');

stroka.SaveToFile(name);

end;

until stroka1.Count = ObshiySchot;

stroka.Free;

stroka1.Free;

Form5.Close;

ShowMessage(' Обработка завершена ');

end;

procedure TForm5.ButtonNastroykaClick(Sender: TObject);

var

NameF: WideString;

begin

Form6.Visible:= true;

end;

end.

Файл Unit6.pas

unit Unit6;

interface

uses

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

Dialogs, ExtCtrls, StdCtrls, Registry, FileCtrl;

type

TForm6 = class(TForm)

Panel1: TPanel;

Memo1: TMemo;

ButtonRedEndFile: TButton;

ButtonRedPapku: TButton;

Label1: TLabel;

SaveDialog1: TSaveDialog;

procedure FormActivate(Sender: TObject);

procedure ButtonRedPapkuClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form6: TForm6;

RegIni: TRegistry;

implementation

uses unit1;

{$R *.dfm}

procedure TForm6.FormActivate(Sender: TObject);

begin

Form6.Caption:= Application.Title;

RegIni:= TRegistry.Create;

RegIni.RootKey:= HKEY_LOCAL_MACHINE;

RegIni.OpenKey('Software\Naladchik', false);

Label1.Caption:= RegIni.ReadString('pach');

RegIni.CloseKey;

RegIni.Free;

end;

procedure TForm6.ButtonRedPapkuClick(Sender: TObject);

begin

if SaveDialog1.Execute then

begin

Label1.Caption:= SaveDialog1.FileName;

RegIni:= TRegistry.Create;

RegIni.RootKey:= HKEY_LOCAL_MACHINE;

RegIni.OpenKey('Software\Naladchik', true);

RegIni.CreateKey('a');

RegIni.WriteString('pach', SaveDialog1.FileName);

RegIni.CloseKey;

RegIni.Free;

end;

end;

end.

Приложение Б

(рекомендуемое)

Тема: Конвертер для повышения оперативности перепрограммирования станков с ЧПУ

Основные типы станков с ЧПУ и их характеристики

Всего листов - 6

2009

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

В основе классификации токарных станков с ЧПУ лежат следующие признаки:

- расположение оси шпинделя (горизонтальные и вертикальные станки);

- число ипользуемых в работе инструментов (одно- и многоинструментальные станки);

- способы их закрепления (на суппорте, в револьверной головке, в магазине инструментов);

- вид выполняемых работ (центровые, патронные, патронно-центровые, карусельные, прутковые станки);

- степень автоматизации (полуавтоматы и автоматы).

Центровые станки с ЧПУ служат для обработки заготовок деталей типа валов с прямолинейным и криволинейным контурами. На этих станках можно нарезать резьбу резцом по программе.

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

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

Карусельные станки с ЧПУ применяют для обработки заготовок сложных корпусов.

Токарные станки с ЧПУ (рисунок ПБ1) оснащают револьверными головками и магазином инструментов. Револьверные головки бывают четырех-, шести- и двенадцатипозиционные, причем на каждой позиции можно устанавливать по два инструмента для наружной и внутренней обработки заготовки. Ось вращения головки может распологаться параллельно оси шпинделя, перпендикулярно к ней или наклонно.

Рисунок ПБ1 - Токарный станок с ЧПУ:

1, 2 - револьверные головки

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

В сонове классификации фрезерных станков с ЧПУ лежат следующие признаки:

- расположение шпинделя (горизонтальное вертикальное);

- число координатных перемещений стола или фрезерной бабки;

- число используемых инструметнов (одноинструментные и многоинструментные);

- способ установки инструментов в шпиндель станка (вручную или автоматически).

По компоновке фрезерные станки с ЧПУ делят на четыре группы:

- вертикально-фрезерные с крестовым столом;

- консольно-фрезерные;

- продольно-фрезерные;

- широкоуниверсальные инструментальные.

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

Во фрезерных станках с ЧПУ в качестве привода главного движения используют асинхронные двигатели (в этих случаях имеется коробка скоростей) или электродвигатели постоянного тока.

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

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

Компоновка вертикально-фрезерного консольного станка с ЧПУ (рисунок ПБ2) мало отличается от компоновки традиционного станка без ЧПУ. На станине 8 монтируют узлы и механизмы станка. Станина спереди имеет направляющие, закрытые кожухом 9, по которым перемещается консоль 1. На горизонтальных направляющих смонтированы салазки 2, по продольным направляющим которых передвигается стол 3. На привалочной плоскости станины закреплена фрезерная бабка 6, по вертикальным направляющим которой перемещается ползун 7 со шпинделем 5. В соответствии с требованиями безопасности труда ползун имеет защитный щиток 4. Сзади станка расположен шкаф 10 с электрооборудованием и УЧПУ.

Рисунок ПБ2 - Фрезерный станок с ЧПУ:

1 - консоль; 2 - салазки; 3 - стол; 4 - защитный щиток; 5 - шпиндель; 6 - фрезерная бабка; 7 - ползун; 8 - станина; 9 - кожух; 10 - шкаф

Вертикально-сверлильные станки с ЧПУ в отличии от аналогичных станков с ручным управлением оснащены крестовыми столами, автоматически перемещающими заготовку по осям X и Y, в результате чего отпадает необходимость в кондукторах или в ее предварительной резметке.

Радиально-сверлильные станки с ЧПУ имеют подвижную по оси X колонну, подвижный по оси Y рукав со шпиндельной бабкой, в которой смонтирован сверлильный шпиндель, перемещающийся по оси Z. Помимо этого рукав при наладке может перемещаться в вертикальном направлении.

Автоматизированные перемещения рабочих органов сверлильных станков по осям X и Y обеспечивают выполнение обработки отверстий и фрезерования.

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

Общий вид вертикально-сверлильного станка модели 2Р135Ф2-1, оснащенного ЧПУ, показан на рис. 6. На основании 1 смонтирована колонна 10, по прямоугольным вертикальным направляющим которой перемещается суппорт 4, несущий револьверную головку 3. На колонне 10 смонтированы коробки скоростей 5 и редуктор подач 6. Салазки 2 крестового стола перемещаются по горизонтальным направляющим основания 1, а верхняя часть 11 стола-по направляющим салазок. С правой стороны станка расположены шкафы 8 с электрооборудованием и УЧПУ 9. Станок имеет подвесной пульт 7 управления.

Рисунок ПБ3 - Вертикально-сверлильный станок с ЧПУ:

1 - основание; 2 - салазки стола; 3 - револьверная головка; 4 - суппорт; 5 - коробка скоростей; 6 - редуктор подач; 7 - подвесной пульт управления; 8 - шкаф электрооборудования; 9 - устройство ЧПУ; 10 - колонна; 11 - стол

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

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

МС имеют следующие характерные особенности: наличие инструментального магазина, обеспечивающего оснащенность большим числом режущих инструментов для высокой концентрации операций (черновых, получистовых и чистовых), в том числе точения, растачивания. фрезерования, сверления, зенкерования, развертывания, нарезания резьб, контроля качества обработки и др.; высокая точность выполнения чистовых операций (6...7-й квалитеты).

Рисунок ПБ4 - Горизонтальный многоцелевой сверлильно-фрезерно-расточной станок с ЧПУ:

1 - поворотный стол; 2 - зажимные приспособления; 3 - шпиндель; 4 - шпиндельная бабка;

5 - автооператор; 6 - иструментальный магазин; 7 - стойка; 8 - поворотная платформа;

9 - заготовка; 10 - стол-спутник; 11 - система ЧПУ; 12 - шкаф для электрооборудования

Приложение В

(обязательное)

Тема: Конвертер для повышения оперативности перепрограммирования станков с ЧПУ

Руководство пользователя

Всего листов - 13

2009

Назначение программы. Программа предназначена для конвертирования исходного текста программ для станков с ЧПУ и предназначена для использования на производстве в различных областях.

Программа позволяет:

конвертировать программный текст в любою из доступных программе систем;

удалять лишние пробелы;

удалять пустые строки;

восстанавливать периодическую нумерацию кадров;

задавать шрифт(цвет, размер, тип);

печать документа;

визуальный контроль обработки;

менять регистр букв к заглавным(что требует синтаксис программ);

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

осуществляет поиск и замену по образцу.

Условия выполнения программы. Разработанная программа является приложением MS Windows. Для ее работы требуется наличие на компьютере операционной системы MS Windows 98/NT4.0/2000/XP и все вытекающее отсюда техническое обеспечение.

Кроме того, требуется:

физическая память 1Mб + память на используемые и создаваемые из текстовые файлы (не менее 10 Мб);

оперативная память 2*размер используемого файла. При нехватке оперативной памяти может использоваться виртуальная память. А за счет того, что все данные находятся в памяти, сильно сокращается время решения задач.

Для написания программы использовалась среда разработки Borland Delphi 7.

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

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

Рисунок ПВ1 - Главное окно программы

Рисунок ПВ2 - Панель инструментов

----- открыть файл

----- сохранить файл

----- распечатать содержимое поля редактирования

----- при нажатии этой кнопки появляется дополнительный диалог обработки (см. далее)


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.