8 - Приложение (1094734), страница 2
Текст из файла (страница 2)
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