Программа для расчета минимальной цены радиодеталей в реальном времени

в 13:04, , рубрики: diy или сделай сам, embedded, микроконтроллеры, разработка, Электроника для начинающих

Важнейшим вопросом в разработке радиоэлектронных устройств всегда является вопрос «сколько это будет стоить?» Причем точный ответ желательно знать еще до того, как вы втянулись в дебри разработки и вложились в нее временем и средствами. Чаще всего разработчики сосредотачивают внимание на себестоимости комплектующих.

На самом деле, расчет себестоимости по списку деталей — это неприятный и рутинный процесс, связанный с долгими поисками по on-line каталогам, обзвоном дистрибуторов, перепиской и ожиданием ответов и проч. и проч. Но хуже даже не это, а то, что это итерационный процесс. Увидев вдруг, что себестоимость оказалась выше допустимой, разработчик начинает искать другие варианты схемотехники и другие комплектующие. И снова поиски…. А рутина — это враг разработчика. Чтобы ее избежать, многие жертвуют оптимальностью. Но, к счастью, эту проблему можно облегчить.

Уже долгое время в интернете существую поисковые системы радиодеталей, собирающие данные от множества поставщиков и предоставляющие их on-line в удобном для разработчиков виде. Также предоставляются разнообразные сервисы и инструменты поиска. Например, импорт в поисковик своего BOM (bill of material, список материалов и комплектующих ) с последующим автоматизированным поиском по этому списку.

Поисковиков радиодеталей достаточно много. Я остановил свой выбор на octopart.com.

Программа для расчета минимальной цены радиодеталей в реальном времени - 1

Из остальных он выделяется очень ясной документацией на свои сервисы удаленных поисковых запросов (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 Acсess является его удивительная гибкость и быстрота при работе с небольшими базами данных до нескольких сот тысяч записей. Этого нам более чем достаточно при работе с BOM-ами. В MS Acсess компиляция кода происходит мгновенно, данные и программа содержатся в одном единственном файле, с недавнего времени для запуска файла MS Acсess не нужно приобретать весь MS Office. Достаточно скачать бесплатный исполняющий движок.

Вот внешний вид моей программы, так сказать ее Front End:

Программа для расчета минимальной цены радиодеталей в реальном времени - 2

Что делает программа

  • Импортирует 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:

Программа для расчета минимальной цены радиодеталей в реальном времени - 3

Имея 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 дописать другие расходы или компоненты, которые не добавляет программа разработки схем.

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

Ссылка на файл программы с демонстрационными данными.

Автор: Indemsys

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js