⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hyperlynx-4_11.ulp

📁 老外的PCB设计软件,是免费的.可以上网更新.
💻 ULP
📖 第 1 页 / 共 5 页
字号:
        unknownIC = yes;  // set component as unknown
        ICname = E.name;  // remember component reference designator
        ICvalue = E.value;  // remember component value name (IC number)
        // parse reference designators?
        if ( strstr( ICname, "IC" ) == 0 ) {
          if ( isdigit( ICname[2] ) )  unknownIC = no;
        }
        else if ( isdigit( ICname[1] ) ) {
          if ( strchr( ICname, 'U' ) == 0 )  unknownIC = no;
        }
        if ( unknownIC == no ) {
          unknownIC = yes;  // reset component as unknown
          if ( strstr( ICvalue, "74" ) == 0 ) {
            ICstate = 0;
            ICvaluelen = strlen( ICvalue );
            ICccnt = 0;
            for ( int i=2; i<ICvaluelen; i++ ) {
              if ( isalpha( ICvalue[i] ) ) {
                ICccnt++;
              }
            }
            unknownIC = no;
            if ( ICccnt > 0 ) {
              ICreflib = "74" + strsub( ICvalue, 2, ICccnt ) + ".PML";
            }
            else {
              ICreflib = "74TTL.PML";
            }
          } else
          if ( strstr( ICvalue, "40" ) == 0 ) {
            unknownIC = no;
            ICreflib = "74HC.PML";
            ICvalue = "74HC" + ICvalue;
          }
          if ( unknownIC == no ) {
            printf("%s, %s, %s",ICname,ICreflib,ICvalue);
            ICpn =E.package.name;
            if ( strstr( ICpn,"TSSOP" ) != -1 ) {
              printf("_TSSOP");
            }
            else if ( strstr( ICpn,"TQFP" ) != -1 ) {
              printf("_TQFP");
            }
            else if ( strstr( ICpn,"SSOP" ) != -1 ) {
              printf("_SSOP");
            }
            else if ( strstr( ICpn,"PLCC" ) != -1 ) {
              printf("_PLCC");
            }
            else if ( strstr( ICpn,"LCC" ) != -1 ) {
              printf("_LCC");
            }
            else if ( strstr( ICpn,"DIP" ) != -1 ) {
              printf("_DIP");
            }
            else if ( strstr( ICpn,"QFP" ) != -1 ) {
              printf("_QFP");
            }
            else if ( strstr( ICpn,"BGA" ) != -1 ) {
              printf("_BGA");
            }
            else if ( strstr( ICpn,"PGA" ) != -1 ) {
              printf("_PGA");
            }
            else if ( strstr( ICpn,"DIL" ) != -1 ) {
              printf("_DIP");
            }
            else if ( strstr( ICpn,"DIP" ) != -1 ) {
              printf("_DIP");
            }
            else if ( strstr( ICpn,"SO" ) != -1 ) {
              printf("_SSOP");
            }
            printf("\n");
          }
        }
      }
    }
  }

  if ( GenerateHyperlynxFile == no ) {
    exit( EXIT_SUCCESS );
  }
  output( filesetext( B.name, ".HYP" ) ) {
    printdivider();
    printf("%s", usage);
    printf("* %s\n*\n", Version);
    printf("* %s\n*\n", EAGLE_SIGNATURE);
    printf("* HyperLynx Board exported from:\n");
    printf("* %s\n", B.name);
    printf("* At %s\n*\n", t2string(time()));

    if (project.schematic) {
      printf("* Schematic is loaded.\n");
    }
    else {
      printf("* Schematic NOT is loaded.\n");
    }
    printf("*\n\n");
    printf("{VERSION=2.10}  Compatible with Hyperlynx version 2.10.\n");
    printf("{UNITS=ENGLISH WEIGHT}\n\n");

    // BOARD OVERALL AREA DIMENSIONS
    // Writes the board dimensions found on layer 20
    printheader("Board Dimensions");
    printf("{BOARD\n");
    // wires on the dimension layer
    B.wires(W) {
      if (W.layer == 20 ) {
        if (W.curve) {
          // arcs in the dimension layer
          printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Arcs: Board Outline Arc is CCW\n",
                  precision_of_nets,u2inch(W.arc.x1),precision_of_nets,u2inch(W.arc.y1),
                  precision_of_nets,u2inch(W.arc.x2),precision_of_nets,u2inch(W.arc.y2),
                  precision_of_nets,u2inch(W.arc.xc),precision_of_nets,u2inch(W.arc.yc),
                  precision_of_nets,u2inch(W.arc.radius) );
        }
        else {
          printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Wires: From Board\n",
                  precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
                  precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2));
        }
      }
    }
    // rectangles on the dimension layer
    B.rectangles(R) {
      if (R.layer == 20 ) {
        printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Bottom\n",
                precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1),
                precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1) );
        printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Right\n",
                precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1),
                precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2) );
        printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Top\n",
                precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2),
                precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2) );
        printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Board : Left\n",
                precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2),
                precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1) );
      }
    }
    // polygons on the dimension layer
    B.polygons(P) {
      if (P.layer == 20 ) {
        P.wires(W) {
          if (W.layer == 20 ) {
            printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Polygon Wires: From Board\n",
                    precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
                    precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2));
          }
        }
      }
    }
    // circles in the dimension layer
    B.circles(C) {
    if (C.layer == 20 ) {
       printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Circles: Board Outline Arc is CCW\n",
                precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
                precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
                precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y),
                precision_of_nets,u2inch(C.radius) );
      }
    }
    // holes in the board
    int halfdrilldiameter;
    B.holes(H) {
      halfdrilldiameter = H.drill / 2;
      printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Holes: Board Outline Arc is CCW\n",
               precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
               precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
               precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y),
               precision_of_nets,u2inch(halfdrilldiameter) );
    }
    // package wires on the dimension layer
    B.elements(E) {
      E.package.wires(W) {
        if (W.layer == 20 ) {
          if (W.curve) {
            // package arcs in the dimension layer
            printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Arcs: Board Outline Arc is CCW Package %s in %s.LBR\n",
                    precision_of_nets,u2inch(W.arc.x1),precision_of_nets,u2inch(W.arc.y1),
                    precision_of_nets,u2inch(W.arc.x2),precision_of_nets,u2inch(W.arc.y2),
                    precision_of_nets,u2inch(W.arc.xc),precision_of_nets,u2inch(W.arc.yc),
                    precision_of_nets,u2inch(W.arc.radius),
                    E.package.name,E.package.library );
          }
          else {
            printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Wires: From Package %s in %s.LBR\n",
                    precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
                    precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2),
                    E.package.name,E.package.library);
          }
        }
      }
      // package rectangles on the dimension layer
      E.package.rectangles(R) {
        if (R.layer == 20 ) {
          printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Bottom\n",
                  precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1),
                  precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1),
                  E.package.name,E.package.library );
          printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Right\n",
                  precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y1),
                  precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2),
                  E.package.name,E.package.library );
          printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Top\n",
                  precision_of_perimeter,u2inch(R.x2),precision_of_perimeter,u2inch(R.y2),
                  precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2),
                  E.package.name,E.package.library );
          printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Rectangles: From Package %s in %s.LBR : Left\n",
                  precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y2),
                  precision_of_perimeter,u2inch(R.x1),precision_of_perimeter,u2inch(R.y1),
                  E.package.name,E.package.library );
        }
      }
      // package polygons on the dimension layer
      E.package.polygons(P) {
        if (P.layer == 20 ) {
          P.wires(W) {
            if (W.layer == 20 ) {
               printf("(PERIMETER_SEGMENT X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f) Polygon Wires: From Package %s in %s.LBR\n",
                        precision_of_perimeter,u2inch(W.x1),precision_of_perimeter,u2inch(W.y1),
                        precision_of_perimeter,u2inch(W.x2),precision_of_perimeter,u2inch(W.y2),
                        E.package.name,E.package.library);
            }
          }
        }
      }
      // package circles in the dimension layer
      E.package.circles(C) {
       if (C.layer == 20 ) {
         printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Circles: Board Outline Arc is CCW Package %s in %s.LBR\n",
                  precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
                  precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y+C.radius),
                  precision_of_nets,u2inch(C.x),precision_of_nets,u2inch(C.y),
                  precision_of_nets,u2inch(C.radius),
                  E.package.name,E.package.library );
        }
      }
      // package holes
      int halfdrilldiameter;
      E.package.holes(H) {
        halfdrilldiameter = H.drill / 2;
        printf("(PERIMETER_ARC X1=%5.*f Y1=%5.*f X2=%5.*f Y2=%5.*f XC=%5.*f YC=%5.*f R=%5.*f) Holes: Board Outline Arc is CCW Package %s in %s.LBR\n",
                 precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
                 precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y+halfdrilldiameter),
                 precision_of_nets,u2inch(H.x),precision_of_nets,u2inch(H.y),
                 precision_of_nets,u2inch(halfdrilldiameter),
                 E.package.name,E.package.library );
      }
    }
    printf("}\n\n");

    // LAYER INFORMATION
    printheader("Thickness of Copper and Dielectric Layer Data");
    if ( UseBoardStackUp == yes ) {
      printf("{STACKUP\n");
      layer_counter = 0;
      B.layers(L) CountLayers(L);
      Total_Layers = layer_counter; // remember active layers
      layer_counter = 0;
      B.layers(L) PrintLayer(L);
      printf("}\n");
      // TOTAL BOARD THICKNESS
      printf("* Total Board Thickness %6.4f inch\n\n",Total_Board_Thickness);
    }
    else {
      printf("* No PCB Thickness Data Generated !!! \n*\n\n");
    }

    // PACKAGES ON THE BOARD
    printheader("Components");
    printf("{DEVICES\n");
    int unknowncomponenttype, pincount, componentspace;
    string componentname;
    string componentvalue;
    B.elements(E) {
      // get the number of pins
      pincount = 0;
      E.package.contacts(C) {
        pincount++;
      }
      // set component as unknown
      unknowncomponenttype = yes;
      // remember component reference designator
      componentname = E.name;
      // truncate component values at the first space
      // ASK HYPERLYNX : what about something like .1u 50v?
      componentvalue = E.value;
      if ( TruncateComponentValues == yes )
        if ( ( componentspace = strchr( componentvalue, ' ' ) ) != -1 )
           componentvalue = strsub( componentvalue, 0, componentspace );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -