;ЦИКЛ: С01=
;==========
SYVAR185.15CH=" Версия    1.02"
;
;Особенности ЦИКЛА.
                                            ;
;Датчик касания (ДК) в шпинделе.
                                            ;
;Номер канала измерения в цикле не определяе
;тся: по умолчанию канал №0:
;канал №0     BPI=0 - активирует ДК,
;                     конфигурированный в
;                     TAS или TAS0 *5 PGCFIL
;канал №1     BPI=1 - активирует ДК,
;                     конфигурированный в
;                     TAS1 *5 PGCFIL
                                            ;
;В файле PGCFIL в секции *2 для процесса
;записать 2 инструкции:
;  SIM=E,,1000,,,         - количество E не
;                           более 65565
;  SIM=NEW,PR,2000,6,62,3 - новыя переменная
;      (исключительно для параметрирования
;       циклов измерения)
; Сокращение
; SB - стандартный блок
                                            ;
;=======================Текст цикла:========================================
; == Проверка: переменные INAX1),2),3) не
;    должны иметь одинаковые значения ====SB
(BEQ,$INAX1,$INAX2,ERR1)
                 ;проверка имя оси ординат
                 ;не совпадает с именем оси
                 ;шпинделя
(BEQ,$INAX2,$INAX3,ERR1)
                 ;проверка имя оси абсциссы
                 ;не совпадает с именем оси
                 ;шпинделя
(BEQ,$INAX1,$INAX3,ERR1)
; 
;==Вычисление № процесса, в котором
;  выполняется цикл==SB
;Примечание.
;Используется для расчета номера сигнала
;управляющего безопасностью ДК
;Данный сигнал, например, для 1-ого процесса
;U10N9 устанавливается через переменную
;SN(E16).BL , где: E16=329  (10*32+9=329) 
;!!!Безопасность ДК в цикле включается до
;   начала движения по G0,G1,G2,G3
;!!!Безопасность ДК в цикле выключается до
;   начала движения по G72,G73,G74
;!!!В случае срабатывания защиты ДК система
;   выведет на экран сообщение:
;!!!"Вход на ограничение перемещения
;    <имя оси>,<# процесса>"
;!!!и в PLC установит сигнал I3N9="1".                                          
(BGE,SK25,80,5)
(BGE,SK25,80,4)
(BGE,SK25,80,3)
(BGE,SK25,80,2)
E15=0
(BNC,PROEND)
"2"
E15=1
(BNC,PROEND)
"3"
E15=2
(BNC,PROEND)
"4"
E15=3
(BNC,PROEND)
"5"
E15=4
                                            ;
   "PROEND"
                                            ;
                                            ;расчет порядкового номера
                                            ;сигнала управления защитой ДК
                                            ;для активного процесса
E16=(10+26*E15)*32+9
                                            ;
                                            ;PR1230=1 -управление сигналом
                                            ;          безопасности ДК
                                            ;          выполнено в ПЛ
(BEQ,PR1230,1,IZPLC1)
                 ;начальная установка:
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC1"
                                            ;
                 ;=====Входные данные=======
         ;X1 координата 1-ой точки измерения
E31=PL1
         ;Y1 1-ая точка измерения 2-ой оси
E32=PL2
         ;R1 Радиус 1-ого отверстия
E35=PL3
         ;X2 2-ая точка измерения 1-ой оси
E33=PL4
         ;Y2 2-ая точка измерения 2-ой оси
E34=PL5
         ;R2 Радиус 2-ого отверстия
E36=PL6
         ;Z0 Безопасная высота
E30=PL7
         ;Z1 Высота измерения по оси щупа  
E37=PL8
         ;D
E40=DPMA
E200=DPMS
         ;V 0 -применить поворот плоскости;
         ;  1 -выполнить поворот круглого
         ;     стола
E7=PL9
         ;F
E25=DPMF
         ;R Количество многократных измерений
         ;точки
E9=PL10
         ;U Предустановка базового вращения
E26=PL11
         ;i Обнулить позицию оси вращения 
         ;после ее выравнивания (0-нет;1-да)
E20=PL12
         ;Nt Номер начальной точки
E21=PL13
         ;======
         ;расстояния между
         ;отверстиями в проекции на X
E87=ABS(E31-E33)
         ;расстояние между отверстиями
         ;в проекции на Y
E88=ABS(E32-E34)
         ;минимальное расстояние между
         ;отверстиями
;     r1    r2    проекция на X
E89=(E41/2+E42/2)*COS(ART(E88/E87))
;     r1    r2    проекция на Y
E90=(E41/2+E42/2)*SIN(ART(E88/E87))
(BGE,E87,E89,XOK)
(BGE,E88,E90,YOK)
(BNC,ERR3)
"XOK"
"YOK"
                                            ;
         ;обнуление угла поворота
         ;плоскости обработки до начала
         ;его измерения
(URP,0)
                                            ;
E5=0
                                            ;
;== определение осей на плоскости обработки ==SB
         ;имя оси абсцисс
$PS1=$INAX1
         ;имя оси ординат
$PS2=$INAX2
         ;имя оси шпинделя
$PS3=$INAX3
;==========
;Координаты касания ДК с поверхностью
;отверстий
;-расчет 1-ого отверстия в точках:
  0, 120, 240 градусов:
                                            ;
E51=E31+E35*COS(0)
E52=E32+E35*SIN(0)
                                            ;
E53=E31+E35*COS(120)
E54=E32+E35*SIN(120)
                                            ;
E55=E31+E35*COS(240)
E56=E32+E35*SIN(240)
                                            ;
;-расчет 2-ого отверстия в точках:
; 0, 120, 240 градусов:
                                            ;
E61=E33+E36*COS(0)
E62=E34+E36*SIN(0)
                                            ;
E63=E33+E36*COS(120)
E64=E34+E36*SIN(120)
                                            ;
E65=E33+E36*COS(240)
E66=E34+E36*SIN(240)
                                            ;
;активация схемы движения в цикле измерения
(DPT,E40,E200,E25)
                                            ;
                                            ;
(BEQ,PR1230,1,IZPLC2)
                 ;защиту включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC2"
;== подход в начало измерения 1-ого
;   отверстия
;=====точка 1====== 0 град
                 ;-по оси шпинделя
                 ; на безопасную высоту
G0 $PS3 E30
                 ;-по осям в плоскости
                 ; обработки
$PS1 E31 $PS2 E32 
                 ;-по оси шпинделя
                 ; на высоту измерения
$PS3 E37
                                            ;
                                            ;
(BEQ,PR1230,1,IZPLC3)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC3"
                                            ;
;=====измерение 1-ого отверстия==========
;=====точка 1====== 0 град
E71=0
E72=0
(BEQ,E9,1,DDD11)
(BEQ,E9,2,DDD12)
G72 $PS1 E51 $PS2 E52 RE200 E59
E71=E59
E72=E60
"DDD12"
G72 $PS1 E51 $PS2 E52 RE200 E59
E71=(E71+E59)/(E9-1)
E72=(E72+E60)/(E9-1)
"DDD11"
G72 $PS1 E51 $PS2 E52 E59
E71=(E71*(E9-1)+E59)/E9
E72=(E72*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPLC4)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC4"
                                            ;
                 ;-отход в плоскости
                 ; обработки
$PS1 E31 $PS2 E32 
                                            ;
(BEQ,PR1230,1,IZPLC5)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC5"
                                            ;
;=====точка 2====== 120 град
E73=0
E74=0
(BEQ,E9,1,DDD21)
(BEQ,E9,2,DDD22)
G72 $PS1 E53 $PS2 E54 RE200 E59
E73=E59
E74=E60
"DDD22"
G72 $PS1 E53 $PS2 E54 RE200 E59
E73=(E73+E59)/(E9-1)
E74=(E74+E60)/(E9-1)
"DDD21"
G72 $PS1 E53 $PS2 E54 E59
E73=(E73*(E9-1)+E59)/E9
E74=(E74*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPLC6)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC6"
                                            ;
                 ;-отход в плоскости
                 ; обработки
$PS1 E31 $PS2 E32 
                                            ;
(BEQ,PR1230,1,IZPLC7)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC7"
                                            ;
                                            ;
;=====точка 3====== 240 град
E75=0
E76=0
(BEQ,E9,1,DDD31)
(BEQ,E9,2,DDD32)
G72 $PS1 E55 $PS2 E56 RE200 E59
E75=E59
E76=E60
"DDD32"
G72 $PS1 E55 $PS2 E56 RE200 E59
E75=(E75+E59)/(E9-1)
E76=(E76+E60)/(E9-1)
"DDD31"
G72 $PS1 E55 $PS2 E56 E59
E75=(E75*(E9-1)+E59)/E9
E76=(E76*(E9-1)+E60)/E9
                                            ;
                                            ;
(BEQ,PR1230,1,IZPLC8)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC8"
                 ;-отход в плоскости
                 ; обработки
$PS1 E31 $PS2 E32 
                                            ;
;
;построение окружности по 3-м точкам
p1=XE71 YE72
p2=XE73 YE74
p3=XE75 YE76
c1=p1,p2,p3
                                            ;
                                            ;
;=====измерение 2-ого отверстия
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
G0 $PS3 E30
                 ;перемещение к началу
                 ;измерения на быстром ходу
$PS1 E33 $PS2 E34 
                 ;-по оси шпинделя на высоту
                 ; измерения
$PS3 E37
                                            ;
(BEQ,PR1230,1,IZPLC9)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC9"
                                            ;
;=====точка 1====== 0 град
E71=0
E72=0
(BEQ,E9,1,DDD41)
(BEQ,E9,2,DDD42)
G72 $PS1 E61 $PS2 E62 RE200 E59
E71=E59
E72=E60
"DDD42"
G72 $PS1 E61 $PS2 E62 RE200 E59
E71=(E71+E59)/(E9-1)
E72=(E72+E60)/(E9-1)
"DDD41"
G72 $PS1 E61 $PS2 E62 E59
E71=(E71*(E9-1)+E59)/E9
E72=(E72*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPL10)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL10"
                                            ;
                 ;-отвод по осям в плоскости
                 ; обработки
$PS1 E33 $PS2 E34 
                                            ;
(BEQ,PR1230,1,IZPL11)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL11"
                                            ;
;=====точка 2====== 120 град
E73=0
E74=0
(BEQ,E9,1,DDD51)
(BEQ,E9,2,DDD52)
G72 $PS1 E63 $PS2 E64 RE200 E59
E73=E59
E74=E60
"DDD52"
G72 $PS1 E63 $PS2 E64 RE200 E59
E73=(E73+E59)/(E9-1)
E74=(E74+E60)/(E9-1)
"DDD51"
G72 $PS1 E63 $PS2 E64 E59
E73=(E73*(E9-1)+E59)/E9
E74=(E74*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPL12)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL12"
                                            ;
                 ;-отвод по осям в
                 ; плоскости обработки
$PS1 E33 $PS2 E34 
                                            ;
(BEQ,PR1230,1,IZPL13)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL13"
                                            ;
;=====точка 3====== 240 град
E75=0
E76=0
(BEQ,E9,1,DDD61)
(BEQ,E9,2,DDD62)
G72 $PS1 E65 $PS2 E66 RE200 E59
E75=E59
E76=E60
"DDD62"
G72 $PS1 E65 $PS2 E66 RE200 E59
E75=(E75+E59)/(E9-1)
E76=(E76+E60)/(E9-1)
"DDD61"
G72 $PS1 E65 $PS2 E66 E59
E75=(E75*(E9-1)+E59)/E9
E76=(E76*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPL14)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL14"
                 ;-отвод по осям в
                 ; плоскости обработки
$PS1 E33 $PS2 E34  
                 ;отход на
                 ;безопасную высоту
G0 $PS3 E30
                                            ;
;построение 2-ой окружности по 3-м точкам
p1=XE71 YE72
p2=XE73 YE74
p3=XE75 YE76
c2=p1,p2,p3
                                            ;
;вычисление координат центра 1-ого отверстия
E81=FEC(1,1)
E82=FEC(1,2)
                                            ;
;вычисление координат центра 2-ого отверстия
E91=FEC(2,1)
E92=FEC(2,2)
                                            ;
;расчет угла между центрами отверстий
E70=ART((E92-E82)/(E91-E81))
                                            ;
;== Действия по результатам измерения =================
                                            ;
                 ;переход для поворота стола
(BEQ,E7,1,VVV)
                                            ;
                 ;E26 -Расчет угла поворота
                 ;    плоскости с учетом
                 ;    предустановленного
                 ; угла прямой в параметре U
E26=E70-E26
                                            ;
                 ;команда исполнения
                 ;поворота плоскости
                 ;обработки:
(URP,E26)
                 ;конец цикла
(BNC,END)
                                            ;
                 ;===========
"VVV"
                 ;определение имени оси
                 ;вращения по имени оси
                 ;шпинделя
(BEQ,$INAX3,"X",A)
(BEQ,$INAX3,"U",A)
(BEQ,$INAX3,"Y",B)
(BEQ,$INAX3,"V",B)
(BEQ,$INAX3,"Z",C)
(BEQ,$INAX3,"W",C)
"A"
$PS5="A"
(BNC,ROT)
"B"
$PS5="B"
(BNC,ROT)
"C"
$PS5="C"
(BNC,ROT)

"ROT"
                 ;поворот оси вращения на
                 ;угол выравнивания по G91
E71=NEG(E70)
G91 $PS5 E71
G90
                                            ;
                                            ;
(BEQ,PR1230,1,IZPL15)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL15"
                                            ;
                 ;пропуск обнуления
                 ;индикации оси вращения по
                 ;параметру i=0
(BEQ,E20,0,END)

;== Обнуление индикации оси вращения ===
                 ;получить номер
                 ;используемой
                 ;начальной точки
(GTA,$PS5,4,E18)
                                            ; 
                 ;если Nt=999999 при i=1, то
                 ;выполнить запись угла в
                 ;используемую начальную (.)
                 ;->"CUR"
(BEQ,E21,999999,CUR)
                 ;E17=Nt
E17=E21
                 ;если номер используемой
                 ;начальной точки совпадает
                 ;с номером, заданным в Nt то
                 ;запись угла в используемую
                 ;начальную (.)
                 ;иначе переход на "UAOn"
(BNE,E18,E17,UAOn)
                                            ;
"CUR"
                 ;обнуление значения угла в
                 ;файле начальных точек в
                 ;используемой нач-ной точке
(GOA,E18,$PS5,E101)
E101=-E101
(RQO,E18,$PS5 E101)
                 ;получить угол оси вращения
                 ;после выравнивания
                 ;измеренной поверхности
(GTA,$PS5,1,E102)
                 ;!запись угла стола после
                 ;выравнивания измеренной
                 ;поверхности в используемую
                 ;начальную точку с
                 ;автоматическим обнулением
                 ;индикации оси вращения!
(RQO,E18,$PS5 E102)
(DIS,"Комп-ция стола осью ",$PS5," выполнена")
                                            ;
                 ;конец цикла
(BNC,END)
                                            ;
                                            ;
"UAOn"
                 ;"UAOn"- работа с номером
                 ;начальной точки Nt
                                            ;
                 ;обнуление значения угла в
                 ;файле начальных точек в
                 ;начальной точке Nt
(GOA,E17,$PS5,E101)
E101=-E101
(RQO,E17,$PS5 E101)
                 ;получить угол оси вращения
                 ;после выравнивания
                 ;измеренной поверхности
(GTA,$PS5,1,E102)

                 ;!запись угла стола после
                 ;выравнивания измеренной
                 ;поверхности в заданную
                 ;начальную точку!
(RQO,E17,$PS5 E102)
                 ;!использовать в системе
                 ;начальную точку Nt для
                 ;обнуления индикации оси
                 ;вращения
(UAO,E17,$PS5)
(DIS,"Комп-ция стола осью ",$PS5," выполнена")

                 ;конец цикла
(BNC,END)
                 ;====обработка ошибок====== 
                                            ; 
"ERR1"
                                            ;
(SCR,ON)
(DEF, 1, 1,20,"ВНИМАНИЕ! Ошибка конфигурации ос")
(DEF, 2, 1,52,"ей")
(DEF, 5, 3, 5,"Абсцисса, ордината и ось шпинде-")
(DEF,10, 4, 5,"ля должны иметь разные имена.   ")
(DEF,15, 7, 5,"Для продолжения цикла нажать 1 и",A1)
(DEF,20, 7,37," клавишу ENTER ",A1)
(DEF,25, 7,53,E5,2)
(DEF,30, 9, 5,"Для прекращения программы выполн",A12)
(DEF,31, 9,37,"ить 'ОБЩИЙ СБРОС'.",A12)
                                            ;
(BNC,ENDERR)
                                            ;
                                            ;
"ERR3"
                                            ;
(SCR,ON)
(DEF, 1, 1,20,"ВНИМАНИЕ! ошибка ввода данных ци")
(DEF, 2, 1,52,"кла")
(DEF, 5, 3, 5,"Дистанция между центрами отверс-")
(DEF,10, 4, 5,"тий меньше допустимой для их изм")
(DEF,11, 4,37,"ерения.                         ")
(DEF,15, 7, 5,"Для продолжения цикла нажать 1 и",A1)
(DEF,20, 7,37," клавишу ENTER ",A1)
(DEF,25, 7,53,E5,2)
(DEF,30, 9, 5,"Для прекращения программы выполн",A12)
(DEF,31, 9,37,"ить 'ОБЩИЙ СБРОС'.",A12)
                                            ;
(BNC,ENDERR)
                                            ;
                                            ;
"ENDERR"
                                            ;
                 ;Запрос вывода ошибки на
                 ;видеостраницу #8 ASSET с
                 ;предложением выхода из
                 ; программы
E5=0
(DLY,0.1)
(OUT)
                                            ;
"ERR"
(INP," ",E5,25)
(BEQ,E5,0,ERR)
(SCR,OFF)
                                            ;
;КОНЕЦ
"END"
;===
(BEQ,PR1230,1,IZPL16)
SN(E16).BL=0
(DLY,0.2)
"IZPL16"
       ;======Конец цикла======