Просмотр задачи

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

Деятельность

ADGroup

2018-11-16 10: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 15:48 ADGroup Новая задача
2018-11-03 15:48 ADGroup Состояние новая => назначена
2018-11-03 15:48 ADGroup Ответственный => ADGroup
2018-11-03 15:48 ADGroup Состояние назначена => закрыта
2018-11-03 15:48 ADGroup Решение открыта => решена
2018-11-03 15:48 ADGroup Решена в версии => 10.22
2018-11-03 15:48 ADGroup Комментарий добавлен: 0001881
2018-11-16 10:29 ADGroup Комментарий добавлен: 0001889