Salida de estilo de la lista de materiales para la biblioteca en Altium

2

He hecho un poco de búsqueda y no he encontrado una solución, así que voy a preguntar aquí.

¿Alguien sabe cómo hacer que Altium imprima una hoja de cálculo de todos los componentes en una biblioteca de esquemas, incluidos sus parámetros definidos por el usuario?

Sé que puedo colocar todos los componentes de una biblioteca en un esquema y crear una lista de materiales, pero creo que habría una solución más fácil y más limpia. Mi objetivo aquí es crear una hoja de cálculo que contenga todas las partes de una biblioteca para poder ordenarlas por su parámetro de número de parte.

    
pregunta Axis

1 respuesta

5

Script abajo.

Deberá abrir el script en Altium, luego abrir su archivo SchLib, luego usar el DXP - > Opción de menú Ejecutar script (el archivo SchLib DEBE estar abierto cuando lo ejecute). Haga doble clic en el nombre de la función, no en el nombre de archivo o ahora se ejecutará.

El script generará un archivo llamado d: \ symbolreport.txt (puede cambiar el nombre del archivo en la parte inferior del script).

Salida de ejemplo:

KINGBRIGHT_KP-1608SGC;Notes;*
KINGBRIGHT_KP-1608SGC;Alternative;*
KINGBRIGHT_KP-1608SGC;CheckedByOn;GoPe/2014-11-25
KINGBRIGHT_KP-1608SGC;CreatedByOn;LiTh/2014-11-05
KINGBRIGHT_KP-1608SGC;Value;Grün
KINGBRIGHT_KP-1608SGC;Comment;DIKP-1608SGC-S10
VISHAY_TLMS1000-GS08;Notes;*
VISHAY_TLMS1000-GS08;Alternative;*
VISHAY_TLMS1000-GS08;CheckedByOn;LiTh/2014-11-24
VISHAY_TLMS1000-GS08;CreatedByOn;GoPe/2014-11-20
VISHAY_TLMS1000-GS08;Value;Rot
VISHAY_TLMS1000-GS08;Comment;DITLMS1000-S12

La salida se denomina archivo CSV con ";" como carácter separador si desea importarlo a Excel.

Procedure PrintDataForSchLibItems();
Var
  DocType       : WideString;
  SchComponent  : ISch_Component;
  SchLib        : ISch_Lib;
  SchDoc        : ISCh_Doc;
  SchIterator   : ISch_Iterator;

  AnObject      : ISch_GraphicalObject;
  LibName       : TDynamicString;
  Iterator      : ISch_Iterator;
  PartCount     : Integer;
  ReportInfo    : TStringList;

  Document : IServerDocument;

Begin
    If SchServer = Nil Then Exit;

    // Obtain the Client interface so can get the Kind property.
    DocType := UpperCase(Client.CurrentView.OwnerDocument.Kind);
    If DocType <> 'SCHLIB' Then
    Begin
        ShowWarning('This is not a Library document!');
        Exit;
    End;

    // Obtain the schematic library interface
    SchLib := SchServer.GetCurrentSchDocument;
    If SchLib = Nil Then Exit;

    // Create a TStringList object to store data
    ReportInfo := TStringList.Create;
    ReportInfo.Clear;

    // Obtain schematic library filename
    LibName := SchLib.DocumentName;
    LibName := ExtractFileName(LibName);

    // Create an iterator to look for symbols within the library
    SchIterator := SchLib.SchLibIterator_Create;
    SchIterator.AddFilter_ObjectSet(MkSet(eSchComponent));
    PartCount := 0;

    Try
        SchComponent := SchIterator.FirstSchObject;
        While SchComponent <> Nil Do
        Begin
            // Look for child objects associated with this symbol.
            Iterator := SchComponent.SchIterator_Create;
            Iterator.AddFilter_ObjectSet(MkSet(eParameter));
            Try
                AnObject := Iterator.FirstSchObject;
                While AnObject <> Nil Do
                Begin
                   // Limit to a specific parameter only
                    If AnObject.Name = 'CreatedByOn' Then
                    Begin
                       ReportInfo.Add(SchComponent.LibReference + ';' +  AnObject.Name + ';' + AnObject.Text);
                    End;

                    // look for the next item of a symbol
                    AnObject := Iterator.NextSchObject;
                End;

                PartCount := 0;
            Finally
                SchComponent.SchIterator_Destroy(Iterator);
            End;

            SchComponent := SchIterator.NextSchObject;
        End;
    Finally
        SchLib.SchIterator_Destroy(SchIterator);
    End;

    ReportInfo.SaveToFile('D:\SymbolReport.txt');

    ReportInfo.Free;
End;
    
respondido por el Tom L.

Lea otras preguntas en las etiquetas