;ЦИКЛ: С02=
;==========
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
E31=PL1
         ;Y1
E32=PL2
         ;d1
E41=PL3
         ;Z1
E37=PL4
         ;V
E7=PL5
         ;X2
E33=PL6
         ;Y2
E34=PL7
         ;d1
E42=PL8
         ;Z2
E38=PL9
         ;Z0
E30=PL10
         ;D
E40=PL11+DPMA
E200=DPMS
         ;B
E8=PL12
         ;F
E25=DPMF
         ;R
E9=PL13
         ;U
E26=PL14
         ;i
E20=PL15
         ;Nt
E21=PL16
         ;======
         ;расстояния между
         ;островами в проекции на X
E87=ABS(E31-E33)
         ;расстояние между островами
         ;в проекции на Y
E88=ABS(E32-E34)
         ;минимальное расстояние между
         ;островами
;     Б    r1    r2    проекция на X
E89=(E40+E41/2+E42/2)*COS(ART(E88/E87))
;     Б    r1    r2    проекция на Y
E90=(E40+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+(E40+E41/2)*COS(0)
E52=E32+(E40+E41/2)*SIN(0)
                                            ;
E53=E31+(E40+E41/2)*COS(120)
E54=E32+(E40+E41/2)*SIN(120)
                                            ;
E55=E31+(E40+E41/2)*COS(240)
E56=E32+(E40+E41/2)*SIN(240)
                                            ;
;-расчет 2-ого острова в точках:
  0, 120, 240 градусов:
                                            ;
E61=E31+E41/2*COS(0)
E62=E32+E41/2*SIN(0)
                                            ;
E63=E31+E41/2*COS(120)
E64=E32+E41/2*SIN(120)
                                            ;

E65=E31+E41/2*COS(240)
E66=E32+E41/2*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 E51 $PS2 E52 
                 ;-по оси шпинделя
                 ; на высоту измерения
$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 E61 $PS2 E62 RE200 E59
E71=E59
E72=E60
"DDD12"
G72 $PS1 E61 $PS2 E62 RE200 E59
E71=(E71+E59)/(E9-1)
E72=(E72+E60)/(E9-1)
"DDD11"
G72 $PS1 E61 $PS2 E62 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 E51 $PS2 E52 
                                            ;
(BEQ,E8,0,BBB1)
                                            ;
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
G0 $PS3  E30
(BNC,B1)
                                            ;
                 ;перемещение к началу
                 ;измерения на быстром ходу
"BBB1"
                 ;на высоте измерения
UVR=1
G3 $PS1 E53 $PS2 E54 IE31 JE32 F1
UVR=0
                                            ;
"B1"
                 ;на безопасной высоте
G0 $PS1 E53 $PS2 E54
                 ;высота измерения:
$PS3  E37
                                            ;
(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 E63 $PS2 E64 RE200 E59
E73=E59
E74=E60
"DDD22"
G72 $PS1 E63 $PS2 E64 RE200 E59
E73=(E73+E59)/(E9-1)
E74=(E74+E60)/(E9-1)
"DDD21"
G72 $PS1 E63 $PS2 E64 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 E53 $PS2 E54
                                            ;
(BEQ,E8,0,BBB2)
                 ;безопасная высота
G0 $PS3  E30
                                            ;
(BNC,B2)
                                            ;
"BBB2"
                 ;перемещение к началу
                 ;измерения на быстром ходу
                 ;на высоте измерения
UVR=1
G3 $PS1 E55 $PS2 E56 IE31 JE32 F1
UVR=0
                                            ;
"B2"
                 ;перемещение к началу
                 ;измерения на быстром ходу
                 ;на безопасной высоте
G0 $PS1 E55 $PS2 E56
                 ;высота измерения:
$PS3  E37
                                            ;
(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 E65 $PS2 E66 RE200 E59
E75=E59
E76=E60
"DDD32"
G72 $PS1 E65 $PS2 E66 RE200 E59
E75=(E75+E59)/(E9-1)
E76=(E76+E60)/(E9-1)
"DDD31"
G72 $PS1 E65 $PS2 E66 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 E55 $PS2 E56
                                            ;
;
;построение окружности по 3-м точкам
p1=XE71 YE72
p2=XE73 YE74
p3=XE75 YE76
c1=p1,p2,p3
                                            ;
                                            ;
;=====измерение 2-ого острова
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
;расчет начала измерения
;угол 0; 120; 240 градусов
E51=E33+(E40+E41/2)*COS(0)
E52=E34+(E40+E41/2)*SIN(0)
                                            ;
E53=E33+(E40+E41/2)*COS(120)
E54=E34+(E40+E41/2)*SIN(120)
                                            ;
E55=E33+(E40+E41/2)*COS(240)
E56=E34+(E40+E41/2)*SIN(240)
                                            ;
;Координаты касания ДК с поверхностью 2-ого
;острова 
                                            ;
;расчет координат точки измерения
;угол 0; 120; 240 градусов
E61=E33+E41/2*COS(0)
E62=E34+E41/2*SIN(0)
                                            ;
E63=E33+E41/2*COS(120)
E64=E34+E41/2*SIN(120)
                                            ;
E65=E33+E41/2*COS(240)
E66=E34+E41/2*SIN(240)
                                            ;
;=== подход в начало измерения 2-ого острова
;=====точка 1====== 0 град
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
G0 $PS3 E30
                 ;перемещение к началу
                 ;измерения на быстром ходу
$PS1 E51 $PS2 E52 
                 ;-по оси шпинделя на высоту
                 ; измерения
$PS3 E38
                                            ;
(BEQ,PR1230,1,IZPLC9)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC9"
                 ;===измерение 2-ого острова
;=====точка 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 E51 $PS2 E52 
                                            ;
(BEQ,E8,0,BBB3)
                 ;отход на безопасную высоту
G0 $PS3  E30
                                            ;
(BNC,B3)
                                            ;
"BBB3"
                 ;перемещение к началу
                 ;измерения на быстром ходу
                 ;на высоте измерения
UVR=1
G3 $PS1 E53 $PS2 E54 IE33 JE34 F1
UVR=0
                                            ;
"B3"
                 ;перемещение к началу
                 ;измерения на быстром ходу
                 ;на безопасной высоте
G0 $PS1 E53 $PS2 E54
                 ;перемещение на
                 ;высоту измерения
$PS3  E38
                                            ;
(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 E53 $PS2 E54
                                            ;
(BEQ,E8,0,BBB4)
                 ;перемещение на
                 ;безопасную высоту
G0 $PS3  E30
                                            ;
(BNC,B4)
                                            ;
"BBB4"
                 ;перемещение к началу
                 ;измерения на быстром ходу
                 ;на высоте измерения
UVR=1
G3 $PS1 E55 $PS2 E56 IE33 JE34 F1
UVR=0
                                            ;
"B4"
                 ;перемещение к началу
                 ;измерения на быстром ходу
                 ;на безопасной высоте
G0 $PS1 E55 $PS2 E56
                 ;высота измерения
$PS3  E38
                                            ;
(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 E55 $PS2 E56
                 ;отход на
                 ;безопасную высоту
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)
                                            ;
                                            ;
"ERR2"
                                            ;
(SCR,ON)
(DEF, 1, 1,20,"ВНИМАНИЕ! ошибка ввода данных ци")
(DEF, 2, 1,52,"кла")
(DEF, 5, 3, 5,"Имя оси Z не может быть записано")
(DEF,10, 4, 5,"в 'Ось измерения', если 'Ось вра")
(DEF,11, 4,37,"щения' - ось C.")
(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"
       ;======Конец цикла======