Найважливішим питанням у розробці радіоелектронних пристроїв завжди є питання «скільки це буде коштувати?» Причому точна відповідь бажано знати ще до того, як ви втягнулися в дебрі розробки і вклалися в неї часом і засобами. Найчастіше розробники зосереджують увагу на собівартості комплектуючих.
Насправді, розрахунок собівартості за списком деталей - це неприємний і рутинний процес, пов'язаний з довгими пошуками по on-line каталогам, обдзвоном дистрибуторів, листуванням і очікуванням відповідей тощо. Але гірше навіть не це, а те, що це ітераційний процес. Побачивши раптом, що собівартість виявилася вище допустимою, розробник починає шукати інші варіанти схемотехніки та інші комплектуючі. І знову пошуки.... А рутина - це ворог розробника. Щоб уникнути її, багато хто жертвує оптимальністю. Але, на щастя, цю проблему можна полегшити.
Вже довгий час в інтернеті існуючу пошукові системи радіодеталей, що збирають дані від безлічі постачальників і надають їх on-line в зручному для розробників вигляді. Також надаються різноманітні сервіси та інструменти пошуку. Наприклад, імпорт у пошуковик свого BOM (bill of material, список матеріалів і комплектуючих) з подальшим автоматизованим пошуком за цим списком.
Пошуковиків радіодеталей досить багато. Я зупинив свій вибір на octopart.com.
З інших він виділяється дуже ясною документацією на свої сервіси віддалених пошукових запитів (API запитів).
Список постачальників, що охоплюються пошуком octopart, також повністю відповідав тому списку, яким користувався до того.
Розробляю я на замовлення невеликі партії вбудованих мікропроцесорних пристроїв для різних додатків. Моя основна конкурентна перевага - це швидкість і точність термінів. Цього можна домогтися тільки якщо користуватися послугами світових on-line дистрибуторів, таких як Farnell, Moser, Digi-Key, Future, Avnet, TME тощо. Якраз по складах цих дистрибуторів і проводить пошук octopart.
Тут треба зауважити, що нашою метою поки є не купити, а дізнатися ціну, і навіть може бути динаміку ціни - залежно від варіантів нашого вибору. Ми ніби досліджуємо або тестуємо варіабельність ціни від наших зусиль щодо її оптимізації. Зрозуміло, що движок пошуку, який потрібен в даному випадку, повинен бути дуже гнучким і оперативним. Жорсткі on-line форми пошуку і сервіси, заточені саме на покупку, тут мало підходять. Очевидно потрібен відкритий і гнучкий standalone додаток на PC.
Я вибрав для цього MS Access. Це одна з програм пакета MS Office в його професійній редакції. Програмування в MS Access ведеться мовою VBA, що в перекладі означає Visual Basic для програм.
Особливість MS Access є його дивовижна гнучкість і швидкість при роботі з невеликими базами даних до декількох сотень тисяч записів. Цього нам більш ніж достатньо при роботі з BOM-ами. У MS Access компіляція коду відбувається миттєво, дані і програма містяться в одному єдиному файлі, з недавнього часу для запуску файла MS Access не потрібно купувати весь MS Office. Достатньо завантажити безкоштовний виконуючий движок.
Ось зовнішній вигляд моєї програми, так би мовити її Front End:
Що робить програма
- Імпортує BOM з таблиці Excel (так, MS Office все-таки потрібен, але програма відкрита, можете зробити імпорт з CSV або txt);
- Перетворює ваш BOM на таблицю на MS Access, яку можна редагувати, і доповнює її своїми необхідними полями;
- Дозволяє задати кількість закуповуваних партій деталей;
- Дозволяє вибрати довільний стовпчик у вашому BOM-і, з якого будуть вилучатися назви шуканих компонентів;
- Визначає критерій пошуку: точна відповідність або гнучка;
- Дозволяє виключити за бажанням довільні рядки з пошуку і заборонити оновлення ціни для них;
- Виконує пошук за базою даних Octopart для одного вказаного рядка або відразу за всім списком;
- Для кожного рядка, який брав участь у пошуку, вставляє мінімальну знайдену ціну;
- Проводить конвертацію валют у вашу національну валюту;
- Розраховує всю вартість BOM-а у вашій валюті.
Програма повністю відкрита. У закладці додатків знайдете всі вихідні тексти. Всі написи і розташування кнопок вільно можете поміняти. Єдине прохання отримати свій Octopart Key. Це ключ користувача API Octopart, який видається за запитом в Octopart.
Типовий скрипт застосування програми
Я працюю в програмі для створення електронних схем і друкованих плат Altium Designer. Як і всі програми такого роду Altium має функцію генерації BOM-а за створеною в ньому схемою. До BOM-у для сумісності з програмою розрахунки ціни пред'являються кілька простих вимог:
- містити заголовок з назвами стовпчиків;
- містити стовпчик з назвою quantity;
- в якому записується кількість деталей даного номіналу в партії;
- містити стовпчик з досить точною назвою компонета. За цією назвою буде організовуватися пошук.
Ось приклад BOM-а в Excel:
Маючи BOM у Excel, я натискаю кнопку Import BOM.
Таблиця у вікні програми перетворюється відповідно до вмісту BOM і додає додаткові стовпчики:
- Lowest price - мінімальна ціна за всіма знайденими позиціями у дистрибуторів;
- Seller - назва продавця;
- Found MPN - докладний опис компонента, отриманий від Octopart;
- In Stock Quantity - кількість компонентів з даною ціною, наявна на складі продавця;
- Fix price - поставивши в цьому полі 1, ми відключаємо даний рядок від пошуку і оновлення ціни, наприклад, коли дізнаємося її з інших джерел;
- Product URL - посилання на сторінку пропозиції компонента у кінцевого продавця.
Далі в списку вибору Search by field вибираю поле в таблиці BOM-а, за яким буде здійснюватися пошук.
Потім задаю кількість партій, яке мене цікавить в полі Quant.multiplier. У найпростішому випадку це кількість плат. Це важливий параметр, оскільки у всіх продавців ціна починає різко знижуватися з певної кількості купованих деталей одного номіналу. Варіюючи кількість плат (партій), можна знайти оптимум собівартості однієї плати при заданих обмеженнях бюджету.
Інший нюанс полягає в тому, що на складах не завжди може бути задана вами кількість, або продавець не згоден продавати таку маленьку кількість компонентів. Тоді знову доводиться варіювати значення в полі Quant.multiplier, щоб отримати максимальне число знайдених позицій.
До речі, таблиця BOM-а в програмі ієрархічна. Клацнувши на знаку плюс у лівій частині програми, побачите підтаблицю вибраного рядка, де буде показано список всіх знайдених пропозицій.
І у висновку залишається натиснути кнопку Recalc lowest price and BOM cost.
Програма пройде за всіма записами пропозицій цін скачаних з Octopart і знайде мінімальні ціни для кожного компонента. При цьому враховується вказана вами кількість компонентів, яка дорівнює твору поля quantity і величини Quant.multiplier. У пропозиції має бути не менше. Також враховується вимога продавця на мінімальну замовлювану кількість компонентів.
Після чого в полі BOM costпоявляється загальна ціна BOM-а для однієї партії.
Важливо! Для правильної конвертації ціни необхідно відредагувати таблицю tbl_CurrRates. У цій таблиці перераховані не всі валюти, а тільки ті, з якими доводилося стикатися мені при пошуку. Таблицю можна доповнювати.
Оскільки у файлі Access програма і дані зберігаються разом, тут немає таких речей, як клієнтська і серверна частини, інсталяція, залежність від розташування каталогів тощо. Ви просто копіюєте файл до теки робочого проекту друкованої плати, перейменовуєте як вам зручно, імпортуєте BOM і натискаєте сканування. Файл Access-а копіюється стільки разів, скільки у вас є проектів. А можете навіть агрегувати за допомогою лінків на зовнішні таблиці в Access BOM-и з декількох проектів, щоб скоротити логістичні витрати з роздільних закупівель для різних проектів. Правда, це тема вже іншого проекту.
На сканування 110 записів демо-даних з програми, яка викладена нижче, йде не більше 59 сек. Можна перевіряти вартість BOM-а кожен день, маючи на увазі зміни курсу валют, а можна в BOM дописати інші витрати або компоненти, які не додає програма розробки схем.
Просунуті користувачі вільні змінити алгоритм розрахунку мінімальної ціни виходячи з критеріїв мінімізації кількості різних постачальників, зменшення митних зборів або зменшення логістичних витрат.
Посилання на файл програми з демонстраційними даними.