Программы для станка V-Star с столом Pogo.
 

Решили граждане приобрести станок с вакуумными присосками для обработки тонколистовых (фюзеляжных) деталей.  Статьи журналов о Роботах
Выбрали французскую фирму Forest-Line с их механическим чудом V-Star.
Вернее, фирма Forest-Line предложила модифицировать стол V-Star - и установить на нем г
ибкую инструментальную систему POGO® (ПОГО) от фирмы CNA Manufacturing Systems, Inc

Чертежи ( некоторые ): чертежи

Гибкая инструментальная система POGO® (ПОГО) - готовое к использованию автоматизированное универсальное зажимное устройство, используемое для жесткого удержания контурных пластин из металла или композитов при различных производственных операциях (обработка краёв, сверление, водоструйная резка, обследование, лазерная разметка, сборка).

 Что можно еще написать?. Ну просто, глючное устройство. Достаточно неисправности в одном прижиме, и все, весь стол не работает. Выход всех "ног" по программе, был случайной величиной, зависящей, от квалификации и терпения человека их обслуживающего..

 Лучше понять, что такое ПОГО, и как с ним работать, Вам поможет :    Pogo_Programming_Manual_RU_final.zip

 История.
   
Вместе со станком решило руководство закупить ПО. ПО заказало американской фирме CNA Manufacturing. Оно должно было быть внешним приложением к Unigraphics.
 
Для чего было нужно это ПО:  для каждой обшивки было необходимо иметь 2-3 УП программы.
 1. - программа настройки индексирования. Она перемещает приводы, используемые для индексирования, в нужное положение.
 2. - программа настройки привода.  Она перемещает в нужное положение приводы, используемые для удержания детали.
 По мимо всего, прочего, необходимо было модифицировать программу CNC-контроллера для обработки детали. Это было необходимо, если инструмент (фреза) окажется в опасной близости от привода удерживающего деталь.
 Все это - делал американский программист.
Программы, деталь и Доки : USA_CamCadTech.zip

 Разработку программы, американский программист начал с большим опозданием. Потому-что, руководство фирмы, не знало кому это поручить. Возникли проблемы с графиком. Русские стали выделываться и торопить. Хотя у самих, ничего не было готово. Торопить до такой степени, что американец стал злиться. :):). Он сделал, прислал. НО. русские были гадами. Они как обычно. Посмотрели как работает программа. Им не понравилась. Но суть и принципы они уяснили и скопировали. Дальше они по хитрому отказались. И стали делать свое... )))))))))

  Ну.... Во-общем, результат работы (по копированию работы американца):
 программа работы с активаторами ПОГО: Pogo_application.zip
  Инструкция : Pogo_activator_user_instruction.doc
 (см. также фиксаторы, ниже)
 
Авторы: Зелепухин М. и  начальница Рогозина.
 
Программа настроена на переменную Юга  $UGII_VENDOR_DIR, если у вас иная , измените файл меню *.tbr
  Стоимость: около 50-80 тыс. рубл.

 В их нем контексте, Я лишь сделал, так называемую "обертку" ( opu_pogo_grip.zip )- программу которая делала более цивилизованный запуск программы для активаторов Пого, и возможность просмотреть инструкции и распечатать. Но от неё можно, и нужно отказаться.

 Что Вам сказать, об этой (выше) программе...
я въехал в неё только с 10-го раза. :( . Что надо выбирать, куда, зачем..
некоторые вещи меня сильно передернули.. ну и ... фиг с ними.

 

 

 Знаете, тут я хотел Вам выложить, исходники своей работы.
 Комплекса программ их было 5 штук ... но с ужасом ..тихим.. перебирая в 10-ый раз свой диск.. Вдруг понял.
 Эта часть осталась.. тама.... я не успел сделать копию себе домой.
 Тут я очень сильно выругался.. и ругался в течении всего дня..
 3.5 месяца тайной работы - коту под хвост..(((

 Мне понадобиться некоторое время , для того, чтобы восстановить их. Договориться... прислать.. ((( что то начать с начала....
 
 


 Данное ПО было написано на  Grip.
 
Исходников у меня - нет.
 Но, давайте попытаемся восстановить хотя бы, частично.  Для меня - это была Разминка для ума. Восстанавливал программу я параллельно с её созданием. :) Слушая вопли и всякие глупости эээ ходивших мимо граждан.

 Оговорюсь. Grip - не люблю. Но почему - то, он используется в Unigraphic-e , причем иногда очень глубоко.
 Первое мое знакомство с ним в 2001 году, было плачевным :):)
 Я сделал программу. Компилирую. Ошибок - нет. Не работает, блин... Стал смотреть глубже компилируемую информацию, и тут меня осенило.... блин.. ИМЕНА ПЕРЕМЕННЫХ:  В GRIP- ИХ МАКСИМАЛЬНАЯ ДЛИНА = 6 символов.
 
  Описывать алгоритм я буду на основе симбиоза С и Grip.  Излишние употребление Меток, вас , только запутает.
  Сразу предупреждаю, что полностью алгоритм я не восстанавливал - мне было ПРОСТО ЛЕНЬ. Но, восстановленная часть прекрасно работала.
   Самая простейшая программа состояла в виде показанном ниже:
  Схему её работы просто отражает рисунок:

$$-------------Переменные-----------------
entity/srf0(100),srf1(100)
entity/pt0, ln0, prj
number/u,v,x,y
number/coord(3), vec(3)
number/h
number/x0,y0,dx,dy,
number/num
number/i,ix,iy
number/nx,ny
number/zH(43,8)
number/norma(43,8,3)
number/s,r,c
string/str(132)

$$ -------------Константы-----------------
h  = 19.05
x0 = 122
y0 = -1200
dx = 250
dy = 400
nx = 42
ny = 7
vec(1)=0
vec(2)=0
vec(3)=1

$$ ----------Выбор поверхности-----------
step1:
mask/71 IDENT/'Выберите поверхность',srf0,CNT,num,CURSOR,X,Y,Z,RSP IFTHEN/(rsp==1) or (rsp==2) JUMP/halt: ENDIF $$----Сдвигаем поверхности на величину h--- step2:
i = 1 LFOR1: IFTHEN/i<=num srf1(i) = OFFSRF/srf0(i),h i=i+1 JUMP/LFOR1: ENDIF $$----Находим точки пересечения ног --- $$----со сдвинутой поверх--- step3: i = 1 LFOR2: IFTHEN/i<=num ix=1 iy=1 LFOR3: IFTHEN/ix<=nx LFOR4: IFTHEN/iy<=ny x=(ix*dx-dx)+x0 y=(iy*dy-dy)+y0 $$ способ 1-ый $$ проецируем точку на поверхность по вектору pt0 = POINT/x,y,0 prj = PROJ/pt0,ON,srf1(i),VECT,vec IFTHEN/(prj == &NULENT) JUMP/LABERR: ENDIF $$ способ 2-ой - не учитывает отв. $$ Находим точки пересечения (мах=2 м ) $$ со сдвинутой поверх $$ pt0 = POINT/0,0,0 $$ ln0 = LINE/x,y,0,x,y,2000 $$ prj = POINT/pt0,INTOF,ln0,srf1(i),IFERR,LABERR: coord = &point(prj) zH(ix,iy)=coord(3) $$ Вычисляем U V - нужно для построения SPARF/srf1(i),prj,u,v $$ Формируем массив нормалей norma(ix,iy,1..3) = SNORF(srf1(i),u,v) DELETE/prj JUMP/JUMPDL: LABERR: print/' Точек пересечения нет' JUMPDL: DELETE/pt0, ln0 , prj iy = iy + 1 JUMP/LFOR4: ENDIF iy=1 ix=ix+1 JUMP/LFOR3: ENDIF i = i + 1 JUMP/LFOR2: ENDIF $$----Вывод ног и программы---- step45: &FTYPE=&DECIM &DDECPL=4 &DECPT=&PERIOD &SUPRES=&NO print/'DEFINE_PRG ' + &pname ix=1 LFOR5: IFTHEN/ix<=nx iy=1 LFOR6: IFTHEN/iy<=ny IFTHEN/zH(ix,iy)==0 JUMP/LEND6: ENDIF x=(ix*dx-dx)+x0 y=(iy*dy-dy)+y0 $$----Вывод ног-(построение геом обьектов) ln0 = SOLCYL/ORIGIN,x,y,0,HEIGHT,zH(ix,iy),DIAMTR,100 ln0 = SOLCYL/ORIGIN,x,y,zH(ix,iy),HEIGHT,h, $ DIAMTR,200,AXIS,-norma(ix,iy,1..3) &COLOR(ln0) = &GREEN $$---- и Вывод информации s = INTF((ix-0.5)/6)+1 r = iy c = (ix-(INTF(ix/6))*6) IFTHEN/ c==0 c=6 ENDIF str='MOVE '+'S'+ISTR(s)+' R'+ISTR(r)+' C'+ $ ISTR(c)+' '+DFSTR(zH(ix,iy)+h) print/str LEND6: iy = iy + 1 JUMP/LFOR6: ENDIF ix = ix + 1 JUMP/LFOR5: ENDIF print/'END_DEFINE_PRG' $$----Конец программы-----------
halt:
HALT

 Ниже , вышеприведенный алгоритм мы слегка усложним.
 
Комментарий:
 
Я пропустил решение с поворотными приспособлениями R=76.2 R=152.4  - просто надоело. Там тоже рутина, никаких ноу-хау.
 И пропустил анализ на сплайны - то-есть, когда границы поверхности - сплайны ( у них была с этим какая-то загвоздка ) . Я просто понял - слышал :), что решение этой задачи состояло у человека в ином методе нахождения пересечения тел:

$$ -------- Анализ краев - для каждой стороны поверхности - 4 шт-----
pt0 = POINT/x,y,0
cr0 = CIRCLE/CENTER,pt0,RADIUS,diam/2
....
prj1 = PROJ/cr0,ON,srf0(i),VECT,vec ....

Алгоритм:

$$ -------------Переменные-----------------
$$ -------------Константы-----------------
step0:
dtname = SUBSTR(&PNAME,7,4)+'_'+SUBSTR(&PNAME,12,3)
h = 19.05
h2 = 67.31
diam = 80.264
diam1 = 30
diam2 = 20
x0 = 122
y0 = -1200
dx = 250
dy = 400
nx = 42
ny = 7
vec(1)=0
vec(2)=0
vec(3)=1
roff1 = 76.2 $$ Смещение от центра до присоски
roff2 = 152.4
hoff  = 118.87
$$----Выбор стола ПОГО-----------
step1:
 mask/63
 IDENT/'Выберите стол POGO',pogo,CNT,npogo,CURSOR,X,Y,Z,rsp
 IFTHEN/(rsp==1) or (rsp==2)
  JUMP/halt:
 ENDIF
$$----Система координат-----------
step2:
 wcs_sv = &WCS
 
 xaxs = &XAXIS(pogo)
 yaxs = &YAXIS(pogo)
 
 wcsofs=&ORIGIN(pogo)
 pt1=POINT/wcsofs

 wcsofs(1)=wcsofs(1)+xaxs(1)
 wcsofs(2)=wcsofs(2)+xaxs(2)
 wcsofs(3)=wcsofs(3)+xaxs(3)
 pt2=POINT/wcsofs

 wcsofs(1)=wcsofs(1)+yaxs(1)
 wcsofs(2)=wcsofs(2)+yaxs(2)
 wcsofs(3)=wcsofs(3)+yaxs(3)
 pt3=POINT/wcsofs

 &WCS = CSYS/pt1,pt2,pt3
 DELETE/ pt1, pt2, pt3
$$----Выбор поверхности-----------
step3:
 mask/71
 IDENT/'Выберите поверхность (LINKED)',srf0,CNT,NUM,CURSOR,X,Y,Z,RSP
 IFTHEN/(RSP == 1) or (RSP==2)
  JUMP/ret:
 ENDIF
$$----Находим точки пересечения ног ---
$$----со сдвинутой поверх---
step4:

$$-переменная была введена для реверса - если технолог (я) 
$$ выбирал поверхность иначе )) вообще эээ сделано не правильно
$$ но я предположил, что этот человек сделает примерно так. 
dir = 1

DIRREV: 

$$ Создаем эквидистантную поверхность - отодвигаем на h
i = 1
step41: 
IFTHEN/i<=NUM
 srf0of(i) = OFFSRF/srf0(i),h*dir
 i=i+1
 JUMP/step41:
ENDIF

i = 1
step42: 
 IFTHEN/i<=NUM
  ix=1

step43:
  iy=1 
  IFTHEN/ix<=nx
step44: 
   IFTHEN/iy<=ny
    x=(ix*dx-dx)+x0
    y=(iy*dy-dy)+y0

    srf1 = srf0of(i)
    srf2 = srf0(i)

    ln0 = POINT/x,y,0
    prj1 = PROJ/ln0,ON,srf1,VECT,vec
    prj2 = PROJ/ln0,ON,srf2,VECT,vec

    IFTHEN/(prj1 == &NULENT) OR (prj2 == &NULENT)
     JUMP/JUMPDL:
    ENDIF

    coord1 = &point(prj1)
    coord2 = &point(prj2)

    dz = coord1(3)-coord2(3)
    IFTHEN/(dz<0)
      dir = -1
      DELETE/ ln0, prj1, prj2
      JUMP/DIRREV:
    ENDIF

    zH(ix,iy)=coord1(3) +  h

    $$ Сохраним массив координат
    coordpts(ix,iy,1..3) = coord1(1..3) 

    $$ Вычисляем U V - нужно для построения
    SPARF/srf1,prj1,u,v
    $$ Формируем массив нормалей
    norma(ix,iy,1..3) = SNORF(srf1,u,v) 

JUMPDL: 
    DELETE/ ln0, prj1 , prj2

    iy=iy+1
    JUMP/step44:
   ENDIF
  ix=ix+1
  JUMP/step43:
 ENDIF

 i = i + 1
 JUMP/step42:
ENDIF

$$ Удаляем эквидистантную поверхность
i = 1
step45: 
IFTHEN/i<=NUM
 DELETE/srf0of(i)
 i=i+1
 JUMP/step45:
ENDIF
$$ ----высоту приспособления-1-----
step6:

mask/63
IDENT/'Выберите приспособление FIXED',fix,CNT,nfix,CURSOR,X,Y,Z,RSP 
IFTHEN/(RSP == 1) or (RSP == 2)
  JUMP/step7:
ENDIF

coord2 = &ORIGIN(fix)
x = coord2(1)
y = coord2(2)
$$ решаем обратную задачу
$$    x=(ix*dx-dx)+x0
$$    y=(iy*dy-dy)+y0
ix = (x-x0+dx)/dx
iy = (y-y0+dy)/dy

nfixx1 = INTF(ix - 1)
nfixx2 = INTF(ix)

coord = &XAXIS(fix)
IFTHEN/coord(1)>0
  nfixx1 = INTF(ix)
  nfixx2 = INTF(ix + 1)
ENDIF

nfixy = INTF(iy)

IFTHEN/(nfixx1<0) OR (nfixx2<0) OR (nfixy<0) OR $
       (nfixx1>nx) OR (nfixx2>nx) OR (nfixy>ny)
  MESSG/'Приспособление за пределами стола !'
  JUMP/step7:
ENDIF

zH(nfixx1,nfixy) = coord2(3)
zH(nfixx2,nfixy) = coord2(3)
$$ ----высоту приспособления-2-SLIDER----
step7:

mask/63
IDENT/'Выберите приспособление SLIDER',sld,CNT,nsld,CURSOR,X,Y,Z,RSP 
IFTHEN/(RSP == 1) or (RSP == 2)
  JUMP/step5:
ENDIF

coord2 = &ORIGIN(sld)
x = coord2(1)
y = coord2(2)

ix = (x-x0+dx)/dx
iy = (y-y0+dy)/dy

nsldx1 = INTF(ix-1)
nsldx2 = INTF(ix)

coord = &XAXIS(sld)
IFTHEN/coord(1)>0
  nsldx1 = INTF(ix)
  nsldx2 = INTF(ix+1)
ENDIF

nsldy = INTF(iy)

IFTHEN/(nsldx1<0) OR (nsldx2<0) OR (nsldy<0) OR $
       (nsldx1>nx) OR (nsldx2>nx) OR (nsldy>ny)
  MESSG/'Приспособление за пределами стола !'
  JUMP/step5:
ENDIF

zH(nsldx1,nsldy) = coord2(3)
zH(nsldx2,nsldy) = coord2(3)
step5:
$$ --------Вывод ног-(построение геом обьектов)------
step51:

ix=1
LFOR51: 
 IFTHEN/ix<=nx
  iy=1
LFOR52: 
  IFTHEN/iy<=ny

   IFTHEN/zH(ix,iy)==0
     JUMP/LEND5:
   ENDIF
   x=(ix*dx-dx)+x0
   y=(iy*dy-dy)+y0

   $$----Вывод ног-для приспособ 1
   IFTHEN/((ix==nfixx1) AND (iy==nfixy)) OR $
          ((ix==nfixx2) AND (iy==nfixy))
     ln1 = SOLCYL/ORIGIN,x,y,0,HEIGHT,zH(ix,iy),DIAMTR, diam1
     JUMP/LEND5:
   ENDIF
   $$----Вывод ног-для приспособ 2 - слайдера
   IFTHEN/((nsldx1==ix) AND (nsldy==iy)) OR $
          ((nsldx2==ix) AND (nsldy==iy))
     ln2 = SOLCYL/ORIGIN,x,y,0,HEIGHT,zH(ix,iy),DIAMTR, diam1
     JUMP/LEND5:
   ENDIF

   $$----Вывод ног-(построение геом обьектов)
   HT = zH(ix,iy) - h
   HT2 = zH(ix,iy) - h2
   coord = -norma(ix,iy,1..3)
   ln3 = SOLCYL/ORIGIN,x,y,0,HEIGHT, HT, DIAMTR, diam2
   ln4 = SOLCYL/ORIGIN,x,y,0,HEIGHT, HT2,DIAMTR, diam1

   ln5 = SOLCYL/ORIGIN,x,y, HT ,HEIGHT, h*dir , DIAMTR,diam,AXIS,coord
   &COLOR(ln5) = &GREEN

LEND5:
   iy = iy + 1
   JUMP/LFOR52:
  ENDIF
  ix = ix + 1
  JUMP/LFOR51:
 ENDIF
$$ --------Вывод программы------
$$ --Нам необходимо вывести 3 программы:
$$ --1 программы - для приспособ фиксатор+слайдер ------
$$ --2 программы - для поворотных приспособ -----
$$ --3 программы - для обшивки -----

step52:

 &FTYPE=&DECIM
 &DDECPL=4
 &DECPT=&PERIOD
 &SUPRES=&NO

$$ --1 программа -- Для приспособлений
print/';'+ &PNAME
print/'DEFINE_PRG P/'+dtname+'_N0001'

ix = nfixx1
iy = nfixy
   s = INTF((ix-0.5)/6)+1
   r = iy
   c = (ix-(INTF(ix/6))*6)
   IFTHEN/c==0
     c = 6
   ENDIF
   $$ проверка на угол в 45 градусов - присоска больше не держит
   coord = norma(ix,iy,1..3)
   angerr = ''
   IFTHEN/ACOSF(-coord(3))>45
     angerr = '; ANGLE > 45 '
   ENDIF
   str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $
        ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr 
   print/str


ix = nfixx2
iy = nfixy
   s = INTF((ix-0.5)/6)+1
   r = iy
   c = (ix-(INTF(ix/6))*6)
   IFTHEN/c==0
     c = 6
   ENDIF
   $$ проверка на угол в 45 градусов - присоска больше не держит
   coord = norma(ix,iy,1..3)
   angerr = ''
   IFTHEN/ACOSF(-coord(3))>45
     angerr = '; ANGLE > 45 '
   ENDIF
   str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $
        ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr 
   print/str


ix = nsldx1
iy = nsldy
   s = INTF((ix-0.5)/6)+1
   r = iy
   c = (ix-(INTF(ix/6))*6)
   IFTHEN/c==0
     c = 6
   ENDIF
   $$ проверка на угол в 45 градусов - присоска больше не держит
   coord = norma(ix,iy,1..3)
   angerr = ''
   IFTHEN/ACOSF(-coord(3))>45
     angerr = '; ANGLE > 45 '
   ENDIF
   str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $
        ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr 
   print/str


ix = nsldx2
iy = nsldy
   s = INTF((ix-0.5)/6)+1
   r = iy
   c = (ix-(INTF(ix/6))*6)
   IFTHEN/c==0
     c = 6
   ENDIF
   $$ проверка на угол в 45 градусов - присоска больше не держит
   coord = norma(ix,iy,1..3)
   angerr = ''
   IFTHEN/ACOSF(-coord(3))>45
     angerr = '; ANGLE > 45 '
   ENDIF
   str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $
        ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr 
   print/str

print/'END_DEFINE_PRG'

print/' '
print/' '
print/' '

$$ ---- Для остальных ног ( 3 программа )
print/';'+ &PNAME
print/'DEFINE_PRG P/'+dtname+'_N0003'

$$ выводить начинаем с приоритетом по оси Х
iy=1
LFOR56: 
 IFTHEN/iy<=ny
  ix=1
LFOR57: 
  IFTHEN/ix<=nx

   IFTHEN/zH(ix,iy)==0
     JUMP/LEND55:
   ENDIF
   x=(ix*dx-dx)+x0
   y=(iy*dy-dy)+y0

   s = INTF((ix-0.5)/6)+1
   r = iy
   c = (ix-(INTF(ix/6))*6)
   IFTHEN/c==0
     c = 6
   ENDIF
   
   $$ проверка на угол в 45 градусов - присоска больше не держит
   coord = norma(ix,iy,1..3)
   angerr = ''
   IFTHEN/ACOSF(-coord(3))>45
     angerr = '; ANGLE > 45 '
   ENDIF

   HT2 = zH(ix,iy) - h2

   str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $
        ISTR(c)+' ' + DFSTR(HT2) + angerr 

   IFTHEN/((ix==nfixx1) AND (iy==nfixy) OR $
           (ix==nfixx2) AND (iy==nfixy)) OR $
          ((ix==nsldx1) AND (iy==nsldy) OR $
           (ix==nsldx2) AND (iy==nsldy))
         $$ print/'; fixture = ',ix, iy 
     ELSE
         print/str
    ENDIF

LEND55:
   ix = ix + 1
   JUMP/LFOR57:
  ENDIF
  iy = iy + 1
  JUMP/LFOR56:
 ENDIF

print/'END_DEFINE_PRG'
$$----Удаление ENT и возврат исхд значений-------
ret: 
 &WCS = wcs_sv 
 DELETE/wcs_sv 
$$----Конец программы-----------
halt:
  HALT 

 Вместо того, чтобы просто выводить в листинг результаты своей работы. Вы  можете выводить их в файл, а потом выкинуть в листинг, примерно как показано ниже:

/* This is the GRIP which prints a text file to the listing window */
NUMBER/ orig_ldev
STRING/ file_name (132)
orig_ldev = &LDEV
&LDEV = &CRT
FETCH/ TXT, 10, file_name
FPRINT/ 10
FTERM/ TXT, 10
&LDEV = orig_ldev
HALT

 

  Первая программа - строила стол  :):):): я не хател тянуть сборку. так как задачу пересечений надо было решать в едином поле имен. Хотя допустил работу сборки..((
 2-ая, 3-я программа - устанавливали приспособы и формировали программы для выдвижения ног для их поддержки.
4-я - формировала программы для обшивки
 5-ая была включена в ядро постпроцессора для проверки самопересечений фрезы и ног.

 

POPEN
  M70
  DPRNT [ BEGPOGOS ]
 
  DPRNT
       DUCK Sxx Ryy Czz
       UNDUCK Sxx Ryy Czz
 
  DPRNT [ ENDPOGOS ]
  M70
PCLOS

 S = 1..7
 R= 1..7
 C= 1..6
 


Полезные сборки : fixture.zip Vstar с столом ПОГО: VSTAR_POGO.zip


   В цеху на станке возникла проблема: операторы, часто ошибались, забывая уменьшать значение точки настройки по Z на 6.3. Это радиус шарика. Так как система координат программы ЧПУ стояла в центре шарика.
   Простейшую во всех смыслах задачу, раздули до большого маразма: просто сказали, чтобы оператор был внимательнее :):). Но это задачи не решало, и операторы, угробили еще пару обшивок. :):)
Решение её стояло, с одной стороны, в ставке в УП для ПОГО, проверки, какое значение вносили операторы.
С другой стороны, можно было написать подпрограмму, а в основной вызывать
CHECKPOGO. Я написал, отдал операторам для тестирования ночью. Результатов не успел дождаться. :):)
checkpogo.spf

; SOUS-PROGRAMME DE MEMORISATION DES HORLOGES CN
; OBJECTIF : MD18600: MM_FRAME_FINE_TRANS=1, on arrete la machine.
;
PROC CHECKPOGO

DEF REAL RCONST
DEF REAL FINEX

RCONST=-6.300

FINEX=$P_UIFR[$P_UIFRNUM,Z,FI]

;---------------
CASE ($P_UIFRNUM) OF 3 GOTOF _G56 DEFAULT GOTOF _G56
;---------------

_G56:
IF (RCONST<>FINEX)
MSG("!Error! Z - Offset !!!!! Z="<<FINEX<<""<<" Set Z="<<RCONST)
STOPRE
;SETAL(65001)
M00
;MSG()
ENDIF

M17

 

Hosted by uCoz