useronce 发表于 2018-11-14 22:12:45

SMT 扩展库器件的手动添加

本帖最后由 useronce 于 2018-11-14 22:15 编辑

要贴片基础库里面没有的器件,现在官方还没有,得自己逐项往器件的参数对话框里面填。

没找到现成的自动方法,这里给个思路。

- 下单平台 > 可贴片元器件列表 > 找到自己的器件 然后在浏览器里面拿到详情的 json,提取关键信息

切到 altium design 的器件原理图属性页,用模拟按键工具,逐项把嘉立创贴片所需的属性填好。

这个过程可以自动化,但是不知道版主能不能开放器件的查询 json 查询(现在需要登录才能查)。





下面是一个实例,自动模拟按键脚本

#define VK_BACK         0x08
#define VK_TAB            0x09
#define VK_SHIFT          0x10
#define VK_CONTROL      0x11
#define VK_MENU         0x12
#define VK_PAUSE          0x13
#define VK_CAPITAL      0x14

loadll ("user32", "keybd_event", "void keybd_event(byte vk, byte scan, int flags, int ptr_extra_info);");


/*==============================================================================
* \briefSimu send Alt+A
*/
void send_Add ()
{
      keybd_event(0x12, 0, 0, 0);// press alt
      keybd_event('A', 0, 0, 0); // press a
      keybd_event('A', 0, 2, 0); //release a
      keybd_event(0x12, 0, 2, 0); //release alt
      
      sleep ( 300 );
}

/*==============================================================================
* \briefSimu send Shift+Tab
*/
void send_shift_tab ()
{
      keybd_event(0x10, 0, 0, 0);// press alt
      keybd_event(0x09, 0, 0, 0); // press a
      keybd_event(0x09, 0, 2, 0); //release a
      keybd_event(0x10, 0, 2, 0); //release alt

      sleep ( 10 );
}

/*==============================================================================
* \briefSimu send Char
*/
void send_char (char val)
{
    bool bShift = false;
    if(val >= 97 && val <= 122)    //小写a-z
    {
      val -= 32;
      bShift = false;
    }
    else if(val >= 65 && val <= 90) //大写A-Z
    {
      bShift = true;
    }
    else if(val >= 48 && val <= 57) //数字0-9
    {
      bShift = false;
    }
    else //特殊符号
    {
      switch(val)
      {
      case '`':
            val = 192;
            bShift = false;
            break;
      case '~':
            val = 192;
            bShift = true;
            break;
      case '!':
            val = '1';    //!和1在同一个键盘,使用同一个键盘码,以下相同
            bShift = true;
            break;
      case '@':
            val = '2';    //@和2在同一个键盘,使用同一个键盘码,以下相同
            bShift = true;
            break;
      case '#':
            val = '3';
            bShift = true;
            break;
      case ':
            val = '4';
            bShift = true;
            break;
      case '%':
            val = '5';
            bShift = true;
            break;
      case '^':
            val = '6';
            bShift = true;
            break;
      case '&':
            val = '7';
            bShift = true;
            break;
      case '*':
            val = '8';
            bShift = true;
            break;
      case '(':
            val = '9';
            bShift = true;
            break;
      case ')':
            val = '0';
            bShift = true;
            break;
      case '-':
            val = 189;
            bShift = false;
            break;
      case '=':
            val = 187;
            bShift = false;
            break;
      case '_':
            val = 189;
            bShift = true;
            break;
      case '+':
            val = 187;
            bShift = true;
            break;
      case '[':
            val = 219;
            bShift = false;
            break;
      case '{':
            val = 219;
            bShift = true;
            break;
      case ']':
            val = 221;
            bShift = false;
            break;
      case '}':
            val = 221;
            bShift = true;
            break;
      case '\\':
            val = 220;
            bShift = false;
            break;
      case '|':
            val = 220;
            bShift = true;
            break;
      case ';':
            val = 186;
            bShift = false;
            break;
      case ':':
            val = 186;
            bShift = true;
            break;
      case '\'':
            val = 222;
            bShift = false;
            break;
      case '\"':
            val = 222;
            bShift = true;
            break;
      case ',':
            val = 188;
            bShift = false;
            break;
      case '<':
            val = 188;
            bShift = true;
            break;
      case '.':
            val = 190;
            bShift = false;
            break;
      case '>':
            val = 190;
            bShift = true;
            break;
      case '/':
            val = 191;
            bShift = false;
            break;
      case '?':
            val = 191;
            bShift = true;
            break;
      default:
            break;
      }
    }

    if(bShift)
      keybd_event(VK_SHIFT,0,0,0);
    keybd_event(val,0,0,0);
    keybd_event(val,0, 2,0);
    if(bShift)
      keybd_event(VK_SHIFT,0, 2,0);
}

/*==============================================================================
* \briefSimu send Chars
*/
void send_string (char *str)
{
      char ch;
      while (*str)
      {
                ch = *str;
                printf ( "%c", ch );
                send_char (ch);
                str ++;
      }
      
      sleep ( 300 );
}

#define VK_RETURN         0x0D
void send_enter ()
{
      keybd_event(VK_RETURN, 0, 0, 0);
}


printf ( "waiting for window rdy!\n" );
sleep ( 3000 );
printf ( "now adding chars\n" );

void add_item (char *name, char *val)
{
    send_Add ();
    send_string (val);
    send_shift_tab ();
    send_shift_tab ();
    send_shift_tab ();
    send_string (name);
    send_enter ();
    sleep ( 500 );      // wait for dialog to close
}

/** remplace the following from parse_jlc_json.py output
* ======================== replace block begin ========================
*/
char *_HelpFile="https://atta.szlcsc.com/upload/public/pdf/source/20170428/1493376825827.pdf";
char *_DataSheetFile="https://atta.szlcsc.com/upload/public/pdf/source/20170428/1493376825827.pdf";
char *_SuppliersPartNumber="C81720";
char *_Package="LQFP-48_7x7x05P";
char *_StockNum="4286";
char *_SupplierLink="https://item.szlcsc.com/82873.html";

/* ======================== replace block end ======================== */

add_item ("HelpURL", _HelpFile);
add_item ("ComponentLink1Description", "Supplier Link");
add_item ("ComponentLink1URL", _SupplierLink);

add_item ("ComponentLink2Description", "Datasheet");
add_item ("ComponentLink2URL", _DataSheetFile);

add_item ("Package", _Package);
add_item ("Supplier", "LC");
add_item ("SuppliersPartNumber", _SuppliersPartNumber);



哪位有更便捷的方法,还请分享一下。

useronce 发表于 2018-11-14 22:14:37

JSON 解析脚本如下:

# -*- coding: GBK -*-
import json

// data source: https://www.sz-jlc.com/consumer/ in chrome F12
data = {"componentLibraryType":"expand","isStoryGoods":"no","model":"STM32F072CBT6","stockNum":4286,"leastNumber":1,"braidAngle":"90","remarks":"快速上架","code":"C81720","type":"ST(意法半导体)","components_img_preview_path":"","components_img_url":"https://alimg.szlcsc.com/upload/public/product/source/20180907/82717C81F4D1C1D6A68161111AB494C7.jpg","librar":"扩展库","dataBook_url":"/upload/public/pdf/source/20170428/1493376825827.pdf","leastPatchNumber":1,"name":"STM32F072CBT6 ","specification":"LQFP-48_7x7x05P","gradeFee":20,"prices":[{"price":"10.16000","startNumber":1,"endNumber":9},{"price":"8.25000","startNumber":10,"endNumber":29},{"price":"7.90000","startNumber":30,"endNumber":99},{"price":"7.55000","startNumber":100,"endNumber":499},{"price":"7.40000","startNumber":500,"endNumber":-1}],"brand":"ST(意法半导体)","componentPrice":10.16}

json_str = json.dumps (data, ensure_ascii=False, indent=4)

#print (json_str)
dic = json.loads(json_str, encoding='GBK')
print 'char *_HelpFile="https://atta.szlcsc.com' + dic.get('dataBook_url') + '";'
print 'char *_DataSheetFile="https://atta.szlcsc.com' + dic.get('dataBook_url') + '";'
print 'char *_SuppliersPartNumber="' + dic.get('code') + '";'
print 'char *_Package="' + dic.get('specification') + '";'
print 'char *_StockNum="' + str(dic.get('stockNum')) + '";'
print 'char *_SupplierLink="https://item.szlcsc.com/82873.html";'




深圳嘉立创-SMT 发表于 2018-11-15 21:10:34

玩法 高级.   一般电工玩不转

leiyitan 发表于 2018-11-16 07:58:10

我还是一个一个自己填吧
页: [1]
查看完整版本: SMT 扩展库器件的手动添加