1 Naposledy upravil: jarek_m (2008-12-05 14:18:43)

Téma: Referenční značka pro osazovací automat

Dobrý den,
prosím Vás o radu, ohledně generování Partlistu pro osazovací automat.
Jde o generování středu součástky. Mám Footprint, který se skládá ze tří diod.
Jak lze vygenerovat Partlist této součástky s určením středu každé diody??
Existuje ve Formice něco jako referenční značka pro generování souřadnic pro osazovací automat??
V našem případě bychom potřebovali možnost umístit tyto značky pro každou diodu.
Hezký den

http://www.formica.cz/files/forum/3led1.png

2

Re: Referenční značka pro osazovací automat

Dobrý den, ještě než se dostanu k jádru věci, dovolím si zmínit jednu drobnost, čímž zároveň ukážu strukturu Vaší součástky:

http://www.formica.cz/files/forum/3led2.gif

Pomocné pájecí body by se možná hodilo elektricky spojit s ploškami vytvořenými ze segmentů spojové čáry; tím se vyloučí zbytečné indikace porušení izolační vzdálenosti.

Váš požadavek je dost speciální hlavně z toho důvodu, že potřebujete, aby Vám jedno pouzdro v partlistu generovalo tři položky.  Formica však o tom teď nemá žádnou informaci a v databázi verze 4.x neposkytuje ani žádný způsob, jak popsat, že určitá součástka je jemněji strukturována na další součástky.  Napadají mne ale dva způsoby, jak problém s trochou úsilí obejít. 

Napřed ještě řeknu, že u součástek, které mají nějaké vývody, se za jejich střed považuje střed (nejmenšího, dle souřadnic x, y orientovaného) obdélníka opsaného středům těch vývodů.  Pro generování partlistu se tento střed bere jako referenční bod; možnost zadat jiný tam není.  (Podrobněji to je popsané někde v helpu.)  Z toho důvodu by zřejmě bylo vhodné vývody 1 a 3 prohodit s pomocnými nečíslovanými pájecími body, protože -- jak předpokládám -- referenční body diod R a G asi chcete mít v jejich středech.  (Nemusím jistě připomínat, že k tomu slouží editor součástky a příkaz Replace | Replace All Components.  Potíž je spíše v tom, že touto operací se pouzdra zároveň posunou vůči desce, takže nezbývá než je vrátit zpět, nejlépe v režimu Move Goup.)

1) Jedna možnost tedy je vygenerovat partlist natřikrát a spojit dohromady textovým editorem.  Pro jedno generování byste však v součástkách odmazal vývody 3 až 6, pro druhé 1, 2, 5 a 6, a konečně pro třetí vývody 1 až 4.  I pokud to snad vypadá složitě, s pomocí příkazu Undo se to dá rychleji provést než vysvětlit.

Zbývá ovšem vyrovnat se s tím, že se v těch třech souborech opakují stejná jména, a také s orientací součástek (ta je naštěstí u všech trojic diod na desce táž).  Oboje bych asi bez větších rozpaků řešil nahrazováním textu v textovém editoru.

2) Druhou možnost zde nebudu rozvádět do podrobností, zmíním jen, že Formica je otevřený systém alespoň potud, že partlist je (resp. může být) generován v Partlist.dll, jejíž zdrojové texty jsou součástí instalační sady.  Zde uvedu pouze klíčovou proceduru:

procedure ProcessPartlist (var CompDescr: array of PCompDescr; const BoardDescr: TBoardDescr;
                           Write: TWriteProc);
  type
    TSide = (Top, Bottom, Undefined);
  var
    Side: TSide;
    i: Integer;
  const
    MarkStrs: array [Boolean] of string [1] = ('-', '*');
    OrientStrs: array [0..7]  of string [5] = ('R0', 'R90', 'R180', 'R270', 'MR0', 'MR90', 'MR180', 'MR270');
    SideStrs: array [TSide]   of string [3] = ('TOP', 'BOT', '   ');

  function CompSide (Layers: TLayers; Mirrored: Boolean): TSide;
  begin
    with BoardDescr do begin
      Layers := Layers * [BotLayer, TopLayer];
      if Layers = [BotLayer, TopLayer] then     // piny jsou na obou stranách
        if Mirrored then
          Result := Bottom                      // klasická sou?ástka je zrcadlena
        else
          Result := Top
      else if Layers = [TopLayer] then
        Result := Top                           // piny jsou jen shora
      else if Layers = [BotLayer] then
        Result := Bottom                        // piny jen zdola
      else  { Layers = [] }
        Result := Undefined;
    end;
  end {CompSide};

begin
  Write ('Partlist from FORMICA 4.40 / P96   Copyright (C) 1986 - 2005 by Petr Horský'^M^J);
  DecimalSeparator := '.';
  for Side := Top to Undefined do
    for i := 0 to High (CompDescr) do
      with CompDescr [i]^ do
        if CompSide (PinLayers, Mirrored) = Side then
          Write (Format ('%s'^I'%s'^I'%s'^I'%3d'^I'%s'^I'%8.3f'^I'%8.3f'^I'%s'^I'%s'^M^J,
                         [Underscore (Name),
                          Underscore (Value),
                          Underscore (Pckg),
                          NoOfPins,
                          MarkStrs [Marked],
                          Center.x,
                          Center.y,
                          OrientStrs [Angle div 90],
                          SideStrs [Side]]));
end {ProcessPartlist};

Není nereálné si ji ad hoc upravit tak, aby z jedné součástky generovala tři položky, lišící se (mj.) o známý offset.  Pokud byste chtěl postupovat touto cestou, jsem Vám samozřejmě k disposici pro další konsultace.

3) Zde se už nebudu zabývat tím, jak problém řešit, nýbrž jak zamezit tomu, aby vůbec vznikl.  V dané situaci bych patrně zvažoval, zda není výhodnější místo každé "sdružené" součástky umístit trojici samostatných diod (přičemž bych u každé ponechal ty dvě okrové kružnice -- jestli se ve výsledku překryjí, je to jen dobře).  Musel bych ale trošku přemýšlet, jak nejlépe ošetřit vazbu na *.pnl soubor.