搜索
bottom↓
回复: 3

SMT 扩展库器件的手动添加

[复制链接]

出0入0汤圆

发表于 2018-11-14 22:12:45 | 显示全部楼层 |阅读模式
本帖最后由 useronce 于 2018-11-14 22:15 编辑

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

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

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

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

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

snap02.png

snap01.png

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

  1. #define VK_BACK           0x08
  2. #define VK_TAB            0x09
  3. #define VK_SHIFT          0x10
  4. #define VK_CONTROL        0x11
  5. #define VK_MENU           0x12
  6. #define VK_PAUSE          0x13
  7. #define VK_CAPITAL        0x14

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


  9. /*==============================================================================
  10. * \brief  Simu send Alt+A
  11. */
  12. void send_Add ()
  13. {
  14.         keybd_event(0x12, 0, 0, 0);// press alt
  15.         keybd_event('A', 0, 0, 0); // press a
  16.         keybd_event('A', 0, 2, 0); //release a
  17.         keybd_event(0x12, 0, 2, 0); //release alt
  18.         
  19.         sleep ( 300 );
  20. }

  21. /*==============================================================================
  22. * \brief  Simu send Shift+Tab
  23. */
  24. void send_shift_tab ()
  25. {
  26.         keybd_event(0x10, 0, 0, 0);// press alt
  27.         keybd_event(0x09, 0, 0, 0); // press a
  28.         keybd_event(0x09, 0, 2, 0); //release a
  29.         keybd_event(0x10, 0, 2, 0); //release alt

  30.         sleep ( 10 );
  31. }

  32. /*==============================================================================
  33. * \brief  Simu send Char
  34. */
  35. void send_char (char val)
  36. {
  37.     bool bShift = false;
  38.     if(val >= 97 && val <= 122)    //小写a-z
  39.     {
  40.         val -= 32;
  41.         bShift = false;
  42.     }
  43.     else if(val >= 65 && val <= 90) //大写A-Z
  44.     {
  45.         bShift = true;
  46.     }
  47.     else if(val >= 48 && val <= 57) //数字0-9
  48.     {
  49.         bShift = false;
  50.     }
  51.     else //特殊符号
  52.     {
  53.         switch(val)
  54.         {
  55.         case '`':
  56.             val = 192;
  57.             bShift = false;
  58.             break;
  59.         case '~':
  60.             val = 192;
  61.             bShift = true;
  62.             break;
  63.         case '!':
  64.             val = '1';    //!和1在同一个键盘,使用同一个键盘码,以下相同
  65.             bShift = true;
  66.             break;
  67.         case '@':
  68.             val = '2';    //@和2在同一个键盘,使用同一个键盘码,以下相同
  69.             bShift = true;
  70.             break;
  71.         case '#':
  72.             val = '3';
  73.             bShift = true;
  74.             break;
  75.         case ':
  76.             val = '4';
  77.             bShift = true;
  78.             break;
  79.         case '%':
  80.             val = '5';
  81.             bShift = true;
  82.             break;
  83.         case '^':
  84.             val = '6';
  85.             bShift = true;
  86.             break;
  87.         case '&':
  88.             val = '7';
  89.             bShift = true;
  90.             break;
  91.         case '*':
  92.             val = '8';
  93.             bShift = true;
  94.             break;
  95.         case '(':
  96.             val = '9';
  97.             bShift = true;
  98.             break;
  99.         case ')':
  100.             val = '0';
  101.             bShift = true;
  102.             break;
  103.         case '-':
  104.             val = 189;
  105.             bShift = false;
  106.             break;
  107.         case '=':
  108.             val = 187;
  109.             bShift = false;
  110.             break;
  111.         case '_':
  112.             val = 189;
  113.             bShift = true;
  114.             break;
  115.         case '+':
  116.             val = 187;
  117.             bShift = true;
  118.             break;
  119.         case '[':
  120.             val = 219;
  121.             bShift = false;
  122.             break;
  123.         case '{':
  124.             val = 219;
  125.             bShift = true;
  126.             break;
  127.         case ']':
  128.             val = 221;
  129.             bShift = false;
  130.             break;
  131.         case '}':
  132.             val = 221;
  133.             bShift = true;
  134.             break;
  135.         case '\\':
  136.             val = 220;
  137.             bShift = false;
  138.             break;
  139.         case '|':
  140.             val = 220;
  141.             bShift = true;
  142.             break;
  143.         case ';':
  144.             val = 186;
  145.             bShift = false;
  146.             break;
  147.         case ':':
  148.             val = 186;
  149.             bShift = true;
  150.             break;
  151.         case '\'':
  152.             val = 222;
  153.             bShift = false;
  154.             break;
  155.         case '"':
  156.             val = 222;
  157.             bShift = true;
  158.             break;
  159.         case ',':
  160.             val = 188;
  161.             bShift = false;
  162.             break;
  163.         case '<':
  164.             val = 188;
  165.             bShift = true;
  166.             break;
  167.         case '.':
  168.             val = 190;
  169.             bShift = false;
  170.             break;
  171.         case '>':
  172.             val = 190;
  173.             bShift = true;
  174.             break;
  175.         case '/':
  176.             val = 191;
  177.             bShift = false;
  178.             break;
  179.         case '?':
  180.             val = 191;
  181.             bShift = true;
  182.             break;
  183.         default:
  184.             break;
  185.         }
  186.     }

  187.     if(bShift)
  188.         keybd_event(VK_SHIFT,0,0,0);
  189.     keybd_event(val,0,0,0);
  190.     keybd_event(val,0, 2,0);
  191.     if(bShift)
  192.         keybd_event(VK_SHIFT,0, 2,0);
  193. }

  194. /*==============================================================================
  195. * \brief  Simu send Chars
  196. */
  197. void send_string (char *str)
  198. {
  199.         char ch;
  200.         while (*str)
  201.         {
  202.                 ch = *str;
  203.                 printf ( "%c", ch );
  204.                 send_char (ch);
  205.                 str ++;
  206.         }
  207.         
  208.         sleep ( 300 );
  209. }

  210. #define VK_RETURN         0x0D
  211. void send_enter ()
  212. {
  213.         keybd_event(VK_RETURN, 0, 0, 0);
  214. }


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

  218. void add_item (char *name, char *val)
  219. {
  220.     send_Add ();
  221.     send_string (val);
  222.     send_shift_tab ();
  223.     send_shift_tab ();
  224.     send_shift_tab ();
  225.     send_string (name);
  226.     send_enter ();
  227.     sleep ( 500 );      // wait for dialog to close
  228. }

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

  238. /* ======================== replace block end ======================== */

  239. add_item ("HelpURL", _HelpFile);
  240. add_item ("ComponentLink1Description", "Supplier Link");
  241. add_item ("ComponentLink1URL", _SupplierLink);

  242. add_item ("ComponentLink2Description", "Datasheet");
  243. add_item ("ComponentLink2URL", _DataSheetFile);

  244. add_item ("Package", _Package);
  245. add_item ("Supplier", "LC");
  246. add_item ("SuppliersPartNumber", _SuppliersPartNumber);

复制代码


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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2018-11-14 22:14:37 | 显示全部楼层
JSON 解析脚本如下:

  1. # -*- coding: GBK -*-
  2. import json

  3. // data source: https://www.sz-jlc.com/consumer/ in chrome F12
  4. 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 [SMT4期 1019]","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}

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

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

复制代码



出0入0汤圆

发表于 2018-11-15 21:10:34 | 显示全部楼层
玩法 高级.   一般电工玩不转

出140入8汤圆

发表于 2018-11-16 07:58:10 | 显示全部楼层
我还是一个一个自己填吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 09:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表