¿Es posible ejecutar el DRC de EagleCad desde un terminal y canalizar la lista de errores a un archivo?

2

Actualmente utilizo EagleCAD para capturar mis esquemas y enrutar mis tableros de circuitos. No es muy agradable trabajar con Eagle, así que comencé a trabajar con esquemas y tablas fuera de la GUI de Eagle editando directamente los archivos SCH y BRD; llamando a los comandos de Eagle desde la línea de comandos del sistema cuando sea necesario. (Para ser claro, me refiero a llamar comandos de Eagle desde un script externo o un CMD o ventana de terminal, no desde la "ventana de comando" del pequeño cuadro de texto dentro de la GUI de Eagle).

Me gustaría poder manejar DRC y ERC desde fuera de la GUI de Eagle, pero no estoy seguro de cómo. Por ejemplo, puedo llamar al Eagle DRC desde la línea de comandos con "eaglecon -C DRC; QUIT; [nombre de la placa]", pero esto solo abre la GUI de Eagle, muestra todos los errores del DRC en una ventana de diálogo dentro de la GUI, y luego cierra la GUI. Me gustaría obtener la lista de errores de DRC como texto en la ventana de comandos, para que se puedan canalizar a un archivo.

¿Alguna idea si esto es factible? Gracias

    
pregunta iamchriskelley

1 respuesta

2

De acuerdo, lo descubrí (y el comentario anónimo que señala el foro de Eagle Exchange ayudó)

No puede canalizar la salida DRC ejecutándola directamente desde la línea de comandos, pero a partir de Eagle 7.x puede acceder a un objeto UL_ERROR en los Programas de idioma del usuario (ULP). El manual ULP de Cadsoft (v7.2) da los detalles. Aquí hay un programa de muestra para imprimir todos los errores de DRC para un tablero determinado:

string errstring;
string errheader;
string errlist[];
int errcnt = 0;
real xadj, yadj, finest_unit;
finest_unit = 0.000000123031496; //assuming grid is in inches

errheader = "code\tstate\tdescription\tlayer\tsignature\tx\ty";

if (board) {
    board(B) {
        if (B.checked) {
            B.errors(ER) {
                if (ER.state == ERROR_STATE_ACTIVE) {
                    xadj = ER.x * finest_unit;
                    yadj = ER.y * finest_unit;
                    sprintf(errstring, "%d\t%d\t%s\t%d\t%s\t%f\t%f", ER.code, ER.state, ER.description, ER.layer, ER.signature, xadj, yadj);
                    errlist[errcnt++] = errstring;
                }
            }
        }

        string filepath = [full path to desired output text file];
        output(filepath) {
            printf("Grid size=%f\n", B.grid.distance);
            printf("Grid unit=%d\n\n", B.grid.unit); //compare to grid constants in manual
            printf("%s\n", errheader);
            for (int i = 0; errlist[i]; ++i){
                printf("%s\n", errlist[i]);
            }
        }
    }
}
exit (0);

Guarde esto en (por ejemplo) el directorio ULP de Eagle como foobar.ulp. Esto se puede llamar desde la línea de comandos con algo como

eaglecon -C "DRC; RUN ../ULP/foobar.ulp;QUIT;" [full path to board]

Las citas en ese comando son necesarias.

    
respondido por el iamchriskelley

Lea otras preguntas en las etiquetas