Смекни!
smekni.com

Конвертирование исходного текста программ для станков с ЧПУ из одной системы программирования в другую (стр. 11 из 14)

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:&bsol;Наладчик&bsol;Пров&bsol;', 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:&bsol;Наладчик&bsol;Пров&bsol;', 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.