Смекни!
smekni.com

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

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);