;ЦИКЛ: С03=
;==========
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"
                                            ;
                 ;=====Входные данные=======
         ;P1
E31=PL1
         ;P2
E32=PL2
         ;P3
E33=PL3
         ;P4
E34=PL4
         ;Z0
E30=PL5
         ;Z1
E37=PL6
         ;F
E25=DPMF
;pX Ось измерения $PS7
;pA Ось вращения  $PS8
         ;NP
E19=PL9
         ;D
E40=PL10+DPMA
         ;B
E8=PL11
         ;R
E9=PL12
         ;i
E20=PL13
         ;Nt
E21=PL14
                                            ;
         ;обнуление угла поворота
         ;плоскости обработки до начала
         ;его измерения
(URP,0)
                                            ;
E5=0
                                            ;
;== определение осей на плоскости обработки ==SB
         ;имя оси абсцисс
$PS1=$INAX1
         ;имя оси ординат
$PS2=$INAX2
         ;имя оси шпинделя
$PS3=$INAX3
                                            ;
;==========================================
         ;== инициализация переменных
E53=0
E51=0
E52=0
                                            ;
         ;(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
;==========================================
                                            ;
E200=DPMS
;активация схемы движения в цикле измерения
(DPT,E40,E200,E25)
                                            ;
;метка XXX переход на измерение вдоль оси X
(BEQ,$PS7,"X",XXX)
                                            ;
;метка YYY переход на измерение вдоль оси Y
(BEQ,$PS7,"Y",YYY)
                                            ;
;метка ZZZ переход на измерение вдоль оси Z
(BEQ,$PS7,"Z",ZZZ)
                                            ;
                                            ;
;===========================================================================
                                            ;
                                            ;
"XXX"
         ;===== измерение вдоль оси X ======
                                            ;
(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
                                            ;
                 ;переход к точке начала
                 ;измерения №2 на высоте
                 ;измерения
(BEQ,E8,0,BBB1)
                                            ;
                 ;-отход по оси шпинделя на
                 ; безопасную высоту
G0 $PS3 E30
                                            ;
                                            ;
"BBB1"
                                            ;
                 ;-выход к точке начала
                 ; измерения №2 в плоскости
                 ; обработки на высоте
                 ; измерения
$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   
                                            ;
                                            ;
                 ;Расчет угла по 2-м точкам
;           Y         X
E71=ART((E64-E62)/(E63-E61))-URP
                                            ;
                                            ;
(BNC,en)
                                            ;
;===========================================================================
                                            ;
                                            ;
"YYY"
                 ;==измерение вдоль оси Y==
                                            ;
(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
                                            ;
                 ;переход к точке начала
                 ;измерения №2 на высоте
                 ;измерения на быстром ходу
(BEQ,E8,0,BBB2)
                 ;отход на безопасную высоту
G0 $PS3 E30
                                            ;
                                            ;
"BBB2"
                                            ;
                 ;-выход к точке начала
                 ; измерения №2 в плоскости
                 ; обработки
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)
                                            ;
                                            ;
;===========================================================================
                                            ;
                                            ;
"ZZZ"
                 ;==измерение вдоль оси Z==
                                            ;
                                            ;
                 ;если ось вращения С и ось
                 ;измерения Z, то не
                 ;корректный ввод данных
                 ;цикла "ERR2"
(BEQ,$PS8,"C",ERR2)
                                            ;
                 ;контроль возможности
                 ;выполнения измерения
E91=ABS(PL3-PL1)
E92=ABS(PL4-PL2)
                                            ;
(BEQ,$PS8,"A",AYY)
                                            ;
(BEQ,$PS8,"B",BXX)
                                            ;
                                            ;
"AYY"
                                            ;
                 ;если имя оси вращения
                 ; $PS8="A", то
                 ; E92=ABS(PL4-PL2) д.б.
                 ; >0.00001
                 ;иначе не корректный ввод
                 ;данных цикла "ERR3"
(BLE,E92,0.00001,ERR3)
(BNC,IZMER3)
                                            ;
                                            ;
"BXX"
                                            ;
                 ;если имя оси вращения
                 ; $PS8="B", то
                 ; E91=ABS(PL3-PL1) д.б.
                 ; >0.00001
                 ;иначе некорректный ввод
                 ;данных цикла "ERR4"
(BLE,E91,0.00001,ERR4)
(BNC,IZMER3)
                                            ;
                                            ;
"IZMER3"
                                            ;
                                            ;
(BEQ,PR1230,1,IZPL13)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL13"
                                            ;
                                            ;
                 ;-отход по оси шпинделя
                 ; на безопасную высоту
G0 $PS3 E30
                 ;выход к точке начала
                 ;измерения №1 в плоскости
                 ;обработки
$PS1 E31 $PS2 E32 
                                            ;
                                            ;
(BEQ,PR1230,1,IZPL14)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL14"
                                            ;
                                            ;
                 ;===измерение 1-ой точки===
E65=0
E66=0
E67=0
E81=0
E82=0
E83=0
                                            ;
(BEQ,E9,1,DDD51)
(BEQ,E9,2,DDD52)
G72 $PS7 E37 $PS1 E31 $PS2 E32 RE200 E65
E81=E65
E82=E66
E83=E67
"DDD52"
G72 $PS7 E37 $PS1 E31 $PS2 E32 RE200 E65
E81=(E81+E65)/(E9-1)
E82=(E82+E66)/(E9-1)
E83=(E83+E67)/(E9-1)
"DDD51"
G72 $PS7 E37 $PS1 E31 $PS2 E32 RE200 E65
E81=(E81*(E9-1)+E65)/E9
E82=(E82*(E9-1)+E66)/E9
E83=(E83*(E9-1)+E67)/E9
                                            ;
                                            ;
(BEQ,PR1230,1,IZPL15)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL15"
                                            ;
                 ;отход на безопасную высоту
G0 $PS3 E30
                 ;выход к точке начала
                 ;измерения №2 в плоскости
                 ;обработки
$PS1 E33 $PS2 E34 
                                            ;
                                            ;
(BEQ,PR1230,1,IZPL16)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL16"
                                            ;
                 ;===измерение 2-ой точки===
E65=0
E66=0
E67=0
E85=0
E86=0
E87=0
(BEQ,E9,1,DDD61)
(BEQ,E9,2,DDD62)
G72 $PS7 E37 $PS1 E33 $PS2 E34 RE200 E65
E85=E65
E86=E66
E87=E67
"DDD62"
G72 $PS7 E37 $PS1 E33 $PS2 E34 RE200 E65
E85=(E85+E65)/(E9-1)
E86=(E86+E66)/(E9-1)
E87=(E87+E67)/(E9-1)
"DDD61"
G72 $PS7 E37 $PS1 E33 $PS2 E34 RE200 E65
E85=(E85*(E9-1)+E65)/E9
E86=(E86*(E9-1)+E66)/E9
E87=(E87*(E9-1)+E67)/E9
                                            ;
                                            ;
(BEQ,PR1230,1,IZPL17)
                 ;защиту ДК включить
SN(E16).BL=1
(DLY,0.2)
"IZPL17"
                                            ;
                 ;отход на безопасную высоту
$PS3 E30
                                            ;
                 ;Расчет угла по 2-м точкам
(BEQ,$PS8,"A",AYYR)
                                            ;
(BEQ,$PS8,"B",BXXR)
                                            ;
                                            ;
"AYYR"
                 ;расчет угла для вращения
                 ;оси A
           ;Z         Y
E71=ART((E87-E83)/(E86-E82))
                                            ;
(BNC,en)
                                            ;
                                            ;
                                            ;
"BXXR"
                 ;расчет угла для вращения
                 ;оси B
           ;Z         X
E71=ART((E87-E83)/(E85-E81))
                                            ;
(BNC,en)
                                            ;
                                            ;
;===========================================================================
                                            ;
                                            ;
"en"
                                            ;
                                            ;
;=== Действия по результатам измерения ===
                                            ;
                                            ;
                 ;поворот оси вращения на
                 ;угол выравнивания по G91
E71=NEG(E71)
G91 $PS8 E71
G90
                                            ;
                                            ;
(BEQ,PR1230,1,IZPL18)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL18"
                                            ;
                 ;пропуск обнуления
                 ;индикации оси вращения по
                 ;параметру i=0
(BEQ,E20,0,END)
                                            ;
;== Обнуление индикации оси вращения ===
                 ;получить номер
                 ;используемой
                 ;начальной точки
(GTA,$PS8,4,E18)
                                            ; 
                 ;если Nt=999999 при i=1, то
                 ;выполнить запись угла в
                 ;используемую начальную (.)
                 ;->"CUR"
(BEQ,E21,999999,CUR)
                 ;E17=Nt
E17=E21
                 ;если номер используемой
                 ;начальной точки совпадает
                 ;с номером, заданным в Nt то
                 ;запись угла в используемую
                 ;начальную (.)
                 ;иначе переход на "UAOn"
(BNE,E18,E17,UAOn)
                                            ;
"CUR"
                 ;обнуление значения угла в
                 ;файле начальных точек в
                 ;используемой нач-ной точке
(GOA,E18,$PS8,E101)
E101=-E101
(RQO,E18,$PS8 E101)
                 ;получить угол оси вращения
                 ;после выравнивания
                 ;измеренной поверхности
(GTA,$PS8,1,E102)
                 ;!запись угла стола после
                 ;выравнивания измеренной
                 ;поверхности в используемую
                 ;начальную точку с
                 ;автоматическим обнулением
                 ;индикации оси вращения!
(RQO,E18,$PS8 E102)
(DIS,"Комп-ция стола осью ",$PS8," выполнена")
                                            ;
                 ;конец цикла
(BNC,END)
                                            ;
                                            ;
"UAOn"
                 ;"UAOn"- работа с номером
                 ;начальной точки Nt
                                            ;
                 ;обнуление значения угла в
                 ;файле начальных точек в
                 ;начальной точке Nt
(GOA,E17,$PS8,E101)
E101=-E101
(RQO,E17,$PS8 E101)
                 ;получить угол оси вращения
                 ;после выравнивания
                 ;измеренной поверхности
(GTA,$PS8,1,E102)
                 ;!запись угла стола после
                 ;выравнивания измеренной
                 ;поверхности в заданную
                 ;начальную точку!
(RQO,E17,$PS8 E102)
                 ;!использовать в системе
                 ;начальную точку Nt для
                 ;обнуления индикации оси
                 ;вращения
(UAO,E17,$PS8)
(DIS,"Компенс. стола осью ",$PS8," выполнена")
                                            ;
                 ;конец цикла
(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,"я вдоль оси 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,IZPL19)
                 ;защиту ДК выключить
SN(E16).BL=0
(DLY,0.2)
"IZPL19"
       ;======Конец цикла======