Сочетание ручной и автоматической маршрутизации в Eagle; Селективный рипуп в орле ULP


8

В Eagle я часто предпочитаю прокладывать некоторые провода самостоятельно (power, xtal, UBS и т. Д.), А остальное оставляю авторутеру. Когда я не доволен результатом, я сам направляю еще один маршрут и позволяю авторутеру попробовать еще раз.

Моя проблема состоит в том, чтобы отменить работу автораутера, не отменив мою собственную работу. Основной способ сделать это - просто не сохранять версию с автоматическим управлением, а затем снова загружать плату. Но как только я совершил ошибку, сохранив версию с автоматическим разрешением (и очистив резервные копии), я все равно захочу вернуться к версии с предварительным разрешением.

Одна попытка сделать это состоит в том, чтобы идентифицировать все авторизованные провода в ULP и создать командную строку для RIPUP этих сегментов. Я могу организовать для ULP идентификацию разрешенных проводов, например, давая им другую ширину. Но команда RIPUP, кажется, разрывает выбранный сегмент провода и сегменты ADJACENT. До сих пор я не нашел команду, которая разрывает только выбранный сегмент провода.

Итак, я думаю, у меня есть два вопроса: - Как вы комбинируете ручную и автоматическую маршрутизацию итеративным способом (методом проб и ошибок)? - Есть ли способ (возможно, с использованием ULP и команд) разорвать подмножество сегментов проводов?

(обновление) Я попробовал противоположный подход: в ULP соберите все сегменты проводов, которые я хочу сохранить, выполните полное копирование, а затем восстановите сегменты проводов (используя команду ROUTE). Безуспешно, сегменты должны быть в определенном порядке для команд маршрута (не в порядке, в котором ULP находит их :(), сначала должны быть сделаны переходы, и некоторые другие проблемы.

GRRRR, должен быть простой способ сделать это, или я слишком оптимистичен?


Если файл данных Eagle использует тот же подход, что и старые, с которыми я играл (например, у вас есть старый DOS Autotrax), то каждый сегмент дорожки имеет свою линию. Если ширина дорожек уникальна, то должно быть легко определить сегменты дорожек и удалить соответствующие линии. Тусклая память говорит мне, что на одном этапе я написал процедуру для идентификации меток компонентов и изменения их размера, поворота и перемещения относительно тела компонента. Идентификация треков звучит легко по сравнению. Сохраните копию перед запуском программы !!! :-).
Рассел МакМахон

это потрясающий вопрос, могу ли я предложить вам опубликовать его эксперту Element14 на Eagle element14.com/community/message/5177 . Если вы нашли и нашли что-нибудь, пожалуйста, напишите сюда!
Викачу

Окей, сделано. Если это не удается, я могу попробовать форумы Eagle.
Воутер ван Оойен

Ответы:


4

Я ненавижу отвечать на свой вопрос, но я иду. Надеюсь, я не получу баллы за ответы, это было бы странно, только за принятие ответа? (Кстати, я не получил никакого ответа на форуме Element14.)

Решением является использование команды DRAW, а не ROUTE. DRAW разместит сегмент провода именно там, где вы укажете (в отличие от ROUTE, который пытается подключиться к неизведанному воздушному проводу. ROUTE по сути бесполезен в сценарии.). Следующая проблема - через: я не могу (или не хочу) различать ручное и автоматическое, поэтому я сохраняю все, которые соединяют два (или более) сегмента проводов вручную. Другие переходы удалены.

Итак, что мой последний сценарий делает:

prepare a ripup command
for all copper segments that are not 0.01 wide (the width I use for autorouting)
   check both endpoints for a via at that location
      prepare the via to be resurrected when it is visited the 2nd time
   prepare a command that resurrects the copper segment
execute the prepared commands

Обратите внимание, что это, вероятно, не будет работать для более чем двух слоев, а также для других вещей, чем сегменты провода на медном слое.

ИМХО вся концепция орла ULP и командных языков хлопотна. ULP работает в среде только для чтения, единственный способ повлиять на схему, плату или библиотеку - создать список команд. Это исключает некоторые полезные методы программирования, но хуже всего то, что команды не были разработаны так, чтобы их можно было легко создавать из ULP. Вам нужны все виды преобразований (в данном случае: координаты, имена фигур) для перевода из мира ULP в мир CMD.

(отредактировать) Перед запуском этого ULP установите выбор «изгиб провода», чтобы разрешить произвольные углы, в противном случае Eagle попытается адаптировать воскрешенные провода к разрешенным углам, что может привести к кровавому беспорядку. ИМХО это еще один пример проблемы с ULP / SCR.

Это код ULP:

// gather the commands that must be run on exit
string RunOnExit = "";
void cmd( string s ) { RunOnExit += s + "\n"; }

// return an x or y position in the form that can be used in a command
real f( int x ){
   board( B ) switch( B.grid.unit ) {
      case 0: return u2mic(x);
      case 1: return u2mm(x);
      case 2: return u2mil(x);
      case 3: return u2inch(x);
   }
}   

// return the string form of the a via's shape
string sn( int x ){
   if( x == VIA_SHAPE_SQUARE )  return "square";
   if( x == VIA_SHAPE_ROUND )   return "round";
   if( x == VIA_SHAPE_OCTAGON   ) return "octagon";
   if( x == VIA_SHAPE_ANNULUS   ) return "annulus";
   if( x == VIA_SHAPE_THERMAL   ) return "thermal";
   return "unknown-via-shape";
}

// count the number of times x occurs in s
int n_ocurrences( string s, string x ){
   int i, n = 0;
   while( 1 ){
      i = strstr( s, x );
      if( i == -1 ) return n;
      s = strsub( s, i + strlen( x ));
      n++;
   }
}

// add a via, but only when it is visited the second time
string via_list = "";
void add_via( int a, int b ){

   // for all via's
   board( B ) B.signals( S ) S.vias( V ){

      // if the via is at the current location
      if(( V.x == a ) && ( V.y == b )){
         string s, coo;

         // the coordinates of the via are used as its identification
         sprintf( coo, "(%.6f %.6f)", f( V.x ), f( V.y ));         

         // if this is the second visit to this via
         via_list += coo;
         if( n_ocurrences( via_list, coo ) == 2 ){

            // resurrect this via
            sprintf( s, "VIA '%s' %f %s %s;", 
            S.name, f( V.drill ), sn( V.shape[ 1 ] ), coo );
            cmd( s );      
         }
      }
   }         
}

if( !board ){
   dlgMessageBox("start this ULP in Board", "OK");
   exit( 0 );
}

board( B ){ 

   // first delete all coper segments, 
   // later we will resurrect what we want to keep 
   cmd( "RIPUP;" );

   // for all wire segments in the top and bottom copper layers
   B.signals(S) S.wires(W) {
      if( ( W.layer == 1 ) || ( W.layer == 16 ) ){ 

         // that are not 0.01 width (that is what the autorouter uses)
         if( f( W.width ) != 0.01 ){
            string s;

            // resurrect via's adjacent to this wire segment
            add_via( W.x1, W.y1 );
            add_via( W.x2, W.y2 );

            sprintf( s, "CHANGE LAYER %d;", W.layer );
            cmd( s );      

            // resurrect this wire segment                 
            sprintf( 
               s, "WIRE '%s' %f (%.6f %.6f) (%.6f %.6f);", 
               S.name, f( W.width),
               f(W.x1), f(W.y1), f(W.x2), f(W.y2));
            cmd( s );   
         }   
      }
   }
   // dlgMessageBox( RunOnExit, "OK");
   exit( RunOnExit );
}

ULP / SCR Eagle - одна из самых мощных функций. Как вы обнаружили, ULP используются для запросов к доске и написания сценариев, которые могут быть абсолютно чем угодно, что вы можете делать сами. Это его сила. Сказав, что я хотел бы, чтобы это было на «нормальном» языке, возможно, Python или даже Lua, но даже вы должны признать, что возможность делать что-то, о чем авторы программного обеспечения не думали, - это хорошее чувство.
akohlsmith

Конечно, но их мощность должна быть загадочной: ULP являются мощными, но не могут изменять схему / бордюры, SCR является ограниченной вариацией GUI. Вместе они могут выполнять полезную работу, но все могло бы быть гораздо проще! И для моей конкретной проблемы было бы хорошо, если бы вещи, добавленные авторутером, были как-то идентифицируемы.
Воутер ван Ойджен

2
В EAGLE v6.3 команда WIRE не DRAW (команда DRAW отсутствует).

2

Wouter. Я не видел ваш вопрос раньше, потому что я был в Мастерс на прошлой неделе.

Я имею дело с тем, чтобы сохранить копию платы под другим именем прямо перед запуском авторутера. Я всегда называю это SAVE.BRD, который можно безопасно удалить после того, как все сделано.

Мой рабочий процесс маршрутизации очень похож на ваш. Я вручную маршрутизирую критические части, проверяю, правильно ли настроены сетевые классы, затем запускаю авторутер. Затем я ищу проблемы, например, когда авторутер не может найти решение, в итоге он делает что-то неудобное и т. Д. Я возвращаюсь к сохраненной версии (перед автоавто), надеюсь, внесу несколько изменений вручную, чтобы авторутер не получил в беде, попробуйте еще раз. Это может повторяться 5-10 раз, в зависимости от сложности доски. Первые несколько прохождений автотрассы в основном предназначены для поиска решения и грубо для поиска проблемных мест. Для этого я даже не использую проходы оптимизации. Более поздние авторуты с полной оптимизацией, которая для меня обычно составляет 8 проходов с изменением затрат на эти проходы, чтобы получить желаемые характеристики.

Несмотря на то, что я делаю сохранение в SAVE.BRD перед каждым проходом автопутешествия (и затем заново открываю исходный файл, чтобы продолжить это), я стараюсь не сохранять автопортретный результат до тех пор, пока я не доволен всем этим. Сохранение снимка в SAVE.BRD каждый раз является резервной копией безопасности на случай, если мои пальцы случайно сделают сохранение, прежде чем я подумаю об этом.

Было бы неплохо, если бы у Eagle была возможность разрыва для последнего прохода автострады, но такой вещи нет.


Ваша дисциплина будет работать на человека, который всегда дисциплинирован. Вы можете догадаться, что я нет. Как только я произвел авторизацию, затем сделал некоторые изменения в схеме, затем удалил BRD и попытался вернуться к предварительно авторизованной версии. Не очень хорошая идея ... Так что теперь у меня более или менее есть способ неавторизовать себя, при условии, что я могу различить автоматически заданные трассы по ширине. Было бы неплохо, если бы у трассируемых трассировок был какой-то атрибут, идентифицирующий их как таковые.
Воутер ван Оойен

Странно, я написал «Привет, Воутер» в начале своего поста, но часть «Привет», похоже, была удалена.
Олин Латроп

Я считаю, что это «особенность» обмена стека. Они думают, что говорить «Привет» в начале поста не нужно, и его нужно удалить, чтобы все было «чисто». Похоже на то, что в некоторых случаях они удаляют @username ... и точно так же, как в этом случае, когда я не смог набрать @ Olin (без пробела) и @ username в одном комментарии.
Kellenjb


1

Если файл данных Eagle использует тот же подход, что и старые, с которыми я играл (например, у вас есть старый DOS Autotrax), то каждый сегмент дорожки имеет свою линию. Строки являются «автономными» и могут быть отредактированы или удалены без какого-либо влияния на них. Более новые «лучшие» системы могут не обладать такой мощной простотой.

Если дорожки независимы, как указано выше, и если ширина дорожек уникальна, то [tm] должно быть легко идентифицировать сегменты дорожек и удалять соответствующие линии.

Тусклая память говорит мне, что на одном этапе я написал процедуру для идентификации меток компонентов и изменения их размера, поворота и перемещения относительно тела компонента. Идентификация треков звучит легко по сравнению. Сохраните копию перед запуском программы !!! :-).


О каком формате файлов вы говорите? Файл Eagle .brd не является текстовым файлом. Моя проблема с сегментами трека не в том, что я не могу их идентифицировать, а в том, что единственная известная мне команда, которую я могу использовать, может сделать слишком много: RIPUP разрывает не только сегмент, но и (некоторые) смежные сегменты.
Воутер ван Оойен

@Wouter van Ouijen - YMMV :-). Отсутствие текста само по себе не означает, что его нельзя взломать, но это возможно. Я не знаю, как выглядит файл Eagle .brd внутри, и я не знаю, можете ли вы вырвать целые сегменты дорожки и безопасно соединить оставшуюся часть - вероятно, нет. Хотя стоит посмотреть. Вы можете написать программу для чтения и перезаписи файлов, которая разумно восстанавливает файл без ненужных частей. Это будет зависеть от того, насколько хорошо известен формат файла.
Рассел МакМахон

Я понимаю, что на момент написания вопроса это было правдой, но форматы файлов Eagle теперь представляют собой простые текстовые файлы XML.
akohlsmith
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.