;ЦИКЛ: С00=
;==========
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-ой точки измерения
E32=PL2
         ;X2 координата 2-ой точки измерения
E33=PL3
         ;Y2 координата 2-ой точки измерения
E34=PL4
         ;Z0 безопасная высота
E30=PL5
         ;Z1 высота измерения 
E37=PL6
         ;NP направление измерения
E19=PL8
         ;D безопасное расстояние
E40=PL9+DPMA
         ;размер безопасности + размер отхода
         ;после выполнения каждого измерения
         ;по G72
E200=DPMS
         ;
         ;B
E8=PL10
         ;F
E25=DPMF
         ;R
E9=PL11
         ;U
E26=PL12
         ;=======
                                            ;
         ;обнуление угла поворота
         ;плоскости обработки до начала
         ;его измерения
(URP,0)
                                            ;
E5=0
                                            ;
;== определение осей на плоскости обработки ==SB
         ;имя оси абсцисс
$PS1=$INAX1
         ;имя оси ординат
$PS2=$INAX2
         ;имя оси шпинделя
$PS3=$INAX3
;==========
                                            ;
;(1-ая точка) расчет координат точки начала
; измерения с учетом D и DPMA и NP
;dX1
E51=E31-E19*E40
;dY1
E52=E32-E19*E40
                                ;===
;(2-ая точка) расчет координат точки  начала
; измерения с учетом D и DPMA и NP
;dX2
E53=E33-E19*E40
;dY2
E54=E34-E19*E40
                                ;===
;активация схемы движения в цикле измерения
(DPT,E40,E200,E25)
                                            ;
                                            ;
;метка XXX -переход на измерение вдоль оси X
(BEQ,$PS7,$PS1,XXX)
                                            ;
;метка YYY -переход на измерение вдоль оси Y
(BEQ,$PS7,$PS2,YYY)
                                            ;
(BNC,END)
                                            ;
                                            ;
"XXX"
                 ;==========================
                 ;ось измерения X
                 ;==========================
                                            ;
E87=ABS(E34-E32)
(BLE,E87,0.0001,ERR2)
                                            ;
(BEQ,PR1230,1,IZPLC2)
;защиту включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC2"
;перемещение к исходной позиции для
;измерения 1-ой точки:
                 ;-по оси шпинделя
                 ; на безопасную высоту
G0 $PS3 E30
                 ;-по осям в плоскости
                 ; обработки
$PS1 E51 $PS2 E32 
                 ;-по оси шпинделя
                 ; на высоту измерения
$PS3 E37
                                            ;
                                            ;
(BEQ,PR1230,1,IZPLC3)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC3"
                                            ;
;====измерение 1-ой точки=====
E61=0
E62=0
(BEQ,E9,1,DDD11)
(BEQ,E9,2,DDD12)
G72 $PS1 E31 $PS2 E32 RE200 E59
E61=E59
E62=E60
"DDD12"
G72 $PS1 E31 $PS2 E32 RE200 E59
E61=(E61+E59)/(E9-1)
E62=(E62+E60)/(E9-1)
"DDD11"
G72 $PS1 E31 $PS2 E32 E59
E61=(E61*(E9-1)+E59)/E9
E62=(E62*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPLC4)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC4"
                                            ;
                 ;-отход в плоскости
                 ; обработки
$PS1 E51 $PS2 E32
                                            ;
(BEQ,E8,0,BBB1)
                                            ;
                 ;-отход по оси шпинделя
                 ; на безопасную высоту
G0 $PS3 E30
                                            ;
"BBB1"
                                            ;
                 ;-подход по осям в
                 ; плоскости обработки
$PS1 E53 $PS2 E34
                 ;-по оси шпинделя на высоту
                 ; измерения
$PS3 E37
                                            ;
(BEQ,PR1230,1,IZPLC5)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC5"
                                            ;
;====измерение 2-ой точки=====
E63=0
E64=0
(BEQ,E9,1,DDD21)
(BEQ,E9,2,DDD22)
G72 $PS1 E33 $PS2 E34  RE200 E59
E63=E59
E64=E60
"DDD22"
G72 $PS1 E33 $PS2 E34  RE200 E59
E63=(E63+E59)/(E9-1)
E64=(E64+E60)/(E9-1)
"DDD21"
G72 $PS1 E33 $PS2 E34  E59
E63=(E63*(E9-1)+E59)/E9
E64=(E64*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPLC6)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC6"
                                            ;
                 ;-отход в плоскости
                 ; обработки
$PS1 E53 $PS2 E34
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
G0 $PS3 E30   
                                            ;
(BEQ,PR1230,1,IZPLC7)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC7"
                                            ;
;Расчет угла по 2-м точкам
;           Y         X
E71=ART((E64-E62)/(E63-E61))-URP
                                            ;
(BNC,en)
                                            ;
                                            ;
"YYY"
                 ;==========================
                 ;ось измерения Y
                 ;==========================
                                            ;
E87=ABS(E33-E31)
(BLE,E87,0.0001,ERR3)
                                            ;
(BEQ,PR1230,1,IZPLC8)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPLC8"
                                            ;
;перемещение к исходной позиции для
;измерения 1-ой точки:
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
G0 $PS3 E30
                 ;-подход по осям в
                 ; плоскости обработки
$PS1 E31 $PS2 E52
                 ;-по оси шпинделя на высоту
                 ; измерения
$PS3 E37
                                            ;
(BEQ,PR1230,1,IZPLC9)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPLC9"
                                            ;
;====измерение 1-ой точки=====
E61=0
E62=0
(BEQ,E9,1,DDD31)
(BEQ,E9,2,DDD32)
G72 $PS1 E31 $PS2 E32  RE200 E59
E61=E59
E62=E60
"DDD32"
G72 $PS1 E31 $PS2 E32  RE200 E59
E61=(E61+E59)/(E9-1)
E62=(E62+E60)/(E9-1)
"DDD31"
G72 $PS1 E31 $PS2 E32  E59
E61=(E61*(E9-1)+E59)/E9
E62=(E62*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPL10)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL10"
                                            ;
                 ;-отвод по осям в плоскости
                 ; обработки
$PS1 E31 $PS2 E52
                                            ;
(BEQ,E8,0,BBB2)
                 ;-отход по оси шпинделя
                 ; на безопасную высоту
G0 $PS3 E30
                                            ;
"BBB2"
                                            ;
                 ;-подход по осям
                 ; в плоскости обработки
G0 $PS1 E33 $PS2 E54
                 ;-по оси шпинделя на высоту
                 ; измерения
$PS3 E37
                                            ;
(BEQ,PR1230,1,IZPL11)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL11"
                                            ;
;====измерение 2-ой точки=====
E63=0
E64=0
(BEQ,E9,1,DDD41)
(BEQ,E9,2,DDD42)
G72 $PS1 E33 $PS2 E34  RE200 E59
E63=E59
E64=E60
"DDD42"
G72 $PS1 E33 $PS2 E34  RE200 E59
E63=(E63+E59)/(E9-1)
E64=(E64+E60)/(E9-1)
"DDD41"
G72 $PS1 E33 $PS2 E34  E59
E63=(E63*(E9-1)+E59)/E9
E64=(E64*(E9-1)+E60)/E9
                                            ;
(BEQ,PR1230,1,IZPL12)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL12"
                                            ;
                 ;-отвод по осям в
                 ; плоскости обработки
$PS1 E33 $PS2 E54
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
G0 $PS3 E30
                                            ;
;Расчет угла по 2-м точкам
;           Y         X
E71=ART((E64-E62)/(E63-E61))-URP
                                            ;
                                            ;
(BNC,en)
                                            ;
"en"
                                            ;
                 ;E26 -Расчет угла поворота
                 ;    плоскости с учетом
                 ;    предустановленного
                 ; угла прямой в параметре U
E26=E71-E26
                                            ;
                 ;команда исполнения
                 ;поворота плоскости
                 ;обработки:
(URP,E26)
                                            ;
(BEQ,PR1230,1,IZPL13)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL13"
                                            ;

(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,"Дистанция между точками измере- ")
(DEF,10, 4, 5,"ния вдоль оси Y должна быть > 0.")
(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,"ния вдоль оси X должна быть > 0.")
(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,IZPL14)
SN(E16).BL=0
(DLY,0.2)
"IZPL14"
       ;======Конец цикла======