Програма для розрахунку мінімальної ціни радіодеталей у реальному часі

Програма для розрахунку мінімальної ціни радіодеталей у реальному часі

Найважливішим питанням у розробці радіоелектронних пристроїв завжди є питання «скільки це буде коштувати?» Причому точна відповідь бажано знати ще до того, як ви втягнулися в дебрі розробки і вклалися в неї часом і засобами. Найчастіше розробники зосереджують увагу на собівартості комплектуючих.

Насправді, розрахунок собівартості за списком деталей - це неприємний і рутинний процес, пов'язаний з довгими пошуками по 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 дописати інші витрати або компоненти, які не додає програма розробки схем.

Просунуті користувачі вільні змінити алгоритм розрахунку мінімальної ціни виходячи з критеріїв мінімізації кількості різних постачальників, зменшення митних зборів або зменшення логістичних витрат.

Посилання на файл програми з демонстраційними даними.

Image