Перегляд завдання

НомерПроектКатегоріяВидимістьИзменен
0001826RasKonПобажанняГромадський2018-11-16 11:29
ІніціаторADGroup ВідповідальнийADGroup  
ПріоритетЗвичайноВпливатиМалийвідтворюваністьне перевірено
Умова ЗакритіРішенняВирішена 
Целевая версия10.22Решена в версии10.22 
Суб'єкт0001826: Файл вивантаження для "Станція обробки Hollinger PBZ Rahmen 2, формат "XML""
ОписОперації обробки для цього верстата мають специфічний харракер, тому генерація операцій обробки виконується скриптом.
МіткаПов'язаних ярликів немає.
Кількість звернень
Період реалізації (днів)
Вартість
Запланована дата

Діяльність

ADGroup

2018-11-03 16 :48

адміністратор ~0001881

ADGroup

2018-11-16 11 :29

адміністратор ~0001889

Генерация операций обработки выполнена с помощью скрипта по причине, что есть ряд ограничений, которые нужно учитывать чтоб станок не поломался (станок не умеет контролировать данные ограничения в размерах), также на большинстве операций есть корректирующие константы относительно текущей точки нанесения операции. По данным причинам при наличие такого большога количества нуюансов и нестандартного подхода в построении файла было принято решение обработки наносить скриптом. Текст скрипта нужно записать в справочник "Скрипты" в моджуль "AppEvents" (если такого модуля нет в списке то его нужно создать вручную). Текст скрипта:

procedure SetObrabotka(bi:TBinaryPilaExpItem; ToolNum:integer; XPos,ZPos:double);
// формирует объект для занесения информации об обработке профиля
var
  ooi1:TObrabOperItem;
begin
  if (ToolNum=17)or(ToolNum=43) then
  begin
    if (XPos<250)or(bi.L-XPos<250)or(bi.L<600) then exit;
  end;
  if (ToolNum=11)or(ToolNum=12) then
  begin
    if (bi.L<300) then exit;
  end;
  ooi1:=TObrabOperItem.Create;
  ooi1.Instr:=inttostr(ToolNum);
  ooi1.SizeNewXY:=XPos;
  ooi1.DopInfo:=floattostr(ZPos);
  bi.ObrabItems.Add(ooi1,aimYes);
end;
                             
procedure SetObrabotkaDop14or17(bi:TBinaryPilaExpItem; XPoxInit,XFragmentLen,ZPos:double);
// проверяет участок на большую длину и если она большая то включает дополнительные обработки 14 или 17
begin
  if (XFragmentLen>600)and(XFragmentLen<1350) then
  begin
    // если ширина конструкции больше 600 и меньше 1350
    // водоотлив по центру конструкции
    SetObrabotka(bi,14,XPoxInit+XFragmentLen/2-30/2,30);
  end else if (XFragmentLen>=1350) then
  begin
    // если ширина конструкции больше или равна 1350
    // водоотлив+дренажи наклонные по центру конструкции
    SetObrabotka(bi,17,XPoxInit+XFragmentLen/2-30/2,30);
  end;
end;

procedure OnStanokExportBeforeCreateStructure;
var
  i,k:integer;
  bi:TBinaryPilaExpItem;
  cnr1:PConnetorRec;
  LastPos:double;
begin
  // работаем со станком Hollinger PBZ Rahmen 2
  if gd.StanokExportCore.IdStanokExport<>57 then exit;
  //Showmessage('Event!!! '+inttostr(gd.StanokExportCore.IdStanokExport));
  for i:=0 to gd.StanokExportCore.Items.Count-1 do
  begin
    bi:=gd.StanokExportCore.Items.GetByNum(i);
    if not assigned(bi.InfoU.Item) then continue;
    if not assigned(bi.InfoR.Item) then continue;
    if not assigned(bi.InfoD.Item) then continue;
    if not assigned(bi.InfoL.Item) then continue;
    if assigned(bi)then
    begin
      // очищаем все обработки, которые были размечены программой ранее
      bi.ObrabItems.Clear;
      bi.InfoU.Item.ObrabItems.Clear;
      bi.InfoR.Item.ObrabItems.Clear;
      bi.InfoD.Item.ObrabItems.Clear;
      bi.InfoL.Item.ObrabItems.Clear;
      if bi.InfoD.Item.L>=300 then
      begin
        // дренаж наклонный в начале
        SetObrabotka(bi.InfoD.Item,11,50+100,30);
        // дренаж наклонный в конце
        SetObrabotka(bi.InfoD.Item,12,bi.InfoD.Item.L-50-100-30,30);
        // водоотлив в начале
        SetObrabotka(bi.InfoD.Item,14,70,30);
        // водоотлив в конце
        SetObrabotka(bi.InfoD.Item,14,bi.InfoD.Item.L-70-30,30);
        // обрабатываем нижнюю палку
        if bi.InfoD.CnAr.ItemsNewCount>0 then
        begin
          // импоста вертикальные есть
          LastPos:=0;
          for k:=0 to bi.InfoD.CnAr.ItemsNewCount-1 do
          begin
            cnr1:=bi.InfoD.CnAr.GetItemNewXY(k);
            // дополнительные обработки 14 или 17 при большой ширине участка
            SetObrabotkaDop14or17(bi.InfoD.Item,LastPos,cnr1.sizeaXY-LastPos,30);
            // отверстие под импост
            if (bi.InfoL.Item.L>570)and(bi.InfoR.Item.L>570) then
            begin
              SetObrabotka(bi.InfoD.Item,43,cnr1.sizeaXY-20,30);
            end
            // водоотлив+дренажи наклонные в точке импоста
            SetObrabotka(bi.InfoD.Item,17,cnr1.sizeaXY-20,30);
            LastPos:=cnr1.sizeaXY;
          end;
          // до этого проверяли все участки до последнего
          // теперь проверка последнего участка после последнего импоста до конца профиля
          // дополнительные обработки 14 или 17 при большой ширине участка
          SetObrabotkaDop14or17(bi.InfoD.Item,LastPos,bi.InfoD.Item.L-LastPos,30);
        end else begin
          // импостов вертикальных нет
          // дополнительные обработки 14 или 17 при большой ширине участка
          SetObrabotkaDop14or17(bi.InfoD.Item,0,bi.InfoD.Item.L,30);
        end;
        // обрабатываем верхнюю палку
        if bi.InfoU.CnAr.ItemsNewCount>0 then
        begin
          // импоста вертикальные есть
          LastPos:=0;
          for k:=0 to bi.InfoU.CnAr.ItemsNewCount-1 do
          begin
            cnr1:=bi.InfoU.CnAr.GetItemNewXY(k);
            // отверстие под импост
            if (bi.InfoL.Item.L>570)and(bi.InfoR.Item.L>570) then
            begin
              SetObrabotka(bi.InfoU.Item,43,cnr1.sizeaXY-20,30);
            end
            LastPos:=cnr1.sizeaXY;
          end;
        end;
      end;
    end;
  end;
end;

Підтримка спільноти для завдання
Це завдання відзначена тим, що вона вирішена.
Якщо ви вважаєте, що це не так, будь ласка, знову відкрийте його та поясніть, чому.
Прихильників: За це завдання ще не проголосував жоден прихильник.
Нейтралітет: Жоден користувач ще не проголосував нейтрально за це завдання.
Супротивників: За це завдання ще не проголосував жоден опонент.

Журнал версій

Дата змінення Користувач Поле Зміна
2018-11-03 16:48 ADGroup Новий виклик
2018-11-03 16:48 ADGroup Умова новий => призначений
2018-11-03 16:48 ADGroup Відповідальний => ADGroup
2018-11-03 16:48 ADGroup Умова присвоєно => закрито
2018-11-03 16:48 ADGroup Рішення open => розв'язано
2018-11-03 16:48 ADGroup Вирішено у версії => 10.22
2018-11-03 16:48 ADGroup Коментар додано: 0001881
2018-11-16 11:29 ADGroup Коментар додано: 0001889