![image](https://habrastorage.org/webt/gn/r8/hj/gnr8hjasogum1gkcjwwceh-ce8s.png)
Начало
Был 2014 год, я работал инженером-конструктором, разрабатывал печатные платы. Военная приемка, оформление полной конструкторской документации (КД), нормоконтроль ЕСКД — все это заставляет трепетать заграничный австралийско-китайско-американский софт, коим является система Altium. Поскольку им чужды советские ГОСТы, старые инструкции и стандарты по оформлению чертежей. Один сотрудник нашего отдела порой тратил целую рабочую смену, чтобы чертеж платы удовлетворял всем нормам и правилам по оформлению КД.
Сейчас это делается минут за 10.
Я решил, что можно упростить жизнь и себе, и ещё десятку человек на работе. Начал разбираться, нашел, что есть открытый API, стал смотреть примеры и вуаля, мой первый скрипт для Altium уже рисует линию на плате -радости нет предела.
Потихоньку помаленьку я расширял свои знания в программировании, поскольку до этого особо с ним не сталкивался, в универе помню маятник написал за семестр и всё.
Первый интерфейс
Дошло до того, что нужно было делать интерфейс, в самом начале он был таким:
![image](https://habrastorage.org/webt/9z/8u/jg/9z8ujgbx3wq3h6z0l3-qykmiqru.jpeg)
Эта версия уже умела рисовать размеры, выноски со стрелками.
Надо понимать, что особых разъяснений в документации не было, опыта ни у кого в использовании функций из API тоже не было, только некоторые скрипты на гитхабе и стандартные альтиумовские. Описание на wiki и по сей день из разряда:
SetState_Enabled method
(IPCB_Primitive interface)
Syntax
Procedure SetState_Enabled (Value : Boolean);
Description
Example
See also
IPCB_Primitive interface
И всё описание, хотя методом проб и ошибок получалось определять как это работает.
Каждый новый раз введение новых функций доставляло удовольствие, ведь когда ты видишь, как твоими трудами люди пользуются и всё получается — это ли не то, зачем создаются программы. На этом этапе время оформления чертежей уже удалось сократить почти вдвое.
Развитие
Следующая версия уже выглядела так:
![image](https://habrastorage.org/webt/st/le/on/stleonhnmrxreegets8jue8vngw.jpeg)
Она уже умела вставлять листы внутрь платы, штриховать полигоны для чертежа, вставлять сетку и прочие элементы для чертежа.
Главная проблема заключалась в том, что среда разработки Altium — это система для разработки печатных плат. В ней недостаточно инструментов для оформления КД, и тем более по российским стандартам. В основном написание скриптов расширяло стандартный инструментарий среды для того, чтобы можно было ещё и разработать КД и вывести его на печать.
К примеру вставку листов разных форматов я внедрил прямо в код, не стал делать отдельных файлов. Применил для этого excel таблицы, вставил руками в файл pcb форматку, выделил все свойства всех линий, их координаты, ширины, координаты текстов и т.д. и внёс все это в обычный массив. Затем уже скрипт по порядку создавал каждую из линий форматки в самом файле платы. И так для каждого листа всех форматов.
Наши дни
Сейчас же программа выглядит уже вот так:
![image](https://habrastorage.org/webt/d5/t-/h2/d5t-h2pw8u7pak-tmo6qpntrdqw.png)
![image](https://habrastorage.org/webt/mp/pg/ze/mppgzexoeu6qnnvpdnqj9ebfu-e.png)
Я ни разу не дизайнер, кнопки пришлось иногда лепить куда попало, смотрел на самые известные САПР системы, как там сделаны меню, настройки, выпадающие кнопки и прочее.
![image](https://habrastorage.org/webt/oo/mj/ho/oomjhojolqjabtyjlpg-huftcau.gif)
![image](https://habrastorage.org/webt/y0/tp/ho/y0tpho_54yp0fe3zztiuxbtq2xm.gif)
Итого на борту:
- Более 50 настроек, сохранение их внутри файла платы
- Обновление чертежей при внесении изменений в плату
- Автоматическая вставка видов в центр листов
- Формирование PDF в одну кнопку
- Редактирование размеров с пересчетом отклонений налету
- Радиальная сетка, 4х сторонняя сетка, риски, настраиваемый шаг
- Сохранение эскизных рисунков в txt формате для дальнейшего использования
и многое другое.
Много нервов, сил, терпения, бессонных ночей — потрачено. Оформляем чертежи на работе — бесценно.
Скрипт пишется одним мною уже четвертый год, причем без применения гита, темных тем и прочего). Только паскаль, только хардкор. Спасибо, что долистали до конца, буду рад общению!
Пример оформленного чертежа внутри PCB
Версия программы, чтобы попробовать
Комментарии (61)
proton17
03.12.2018 11:07У нас немного другой САПР, но проблемы те же. Делаем экспорт в DXF а дальше конструктора быстро шлепают СБ и СП. Кстати по КДПВ, вроде сейчас для электронных архивов можно не делать координатную сетку на СБ платы. P.S.: а вообще так хочется все эти ЕСКД и ГОСТ послать в… у
Fandir
03.12.2018 11:09Сборка платы вообще бредовый бред, но военные требуют)
proton17
03.12.2018 11:11Да дело даже не в приемке, сам нормконртоль и архив требует полный перечень КД. Особенно бесит документ перечень элементов. Все САПР умеют делать BoM, что по сути есть готовая спецификация.
Fandir
03.12.2018 11:15Ну перечень то как раз документ не бесполезный в альтиуме кстати с перечнем проблем нет, они там в формирователь BOM добавили ПЭ, Специю, и ВП… по ГОСТ… Но я все равно эти доки делаю через другой сторонний софт… Почти автоматом…
GarryC
03.12.2018 11:12Если не секрет, как Вы собираетесь без этого «бреда» регулировать плату?
proton17
03.12.2018 11:15Ну далеко не все платы требуют регулировки это раз, а во вторых из самого САПР можно сделать вполне приличный чертеж, часто более понятный чем по ЕСКД. Вот только не один архив его не примет(
Fandir
03.12.2018 11:16-1Ну сборка платы вообще ничем не поможет при регулировке… А вот перечень вещь нужная, но с перечнем у Альтиума как раз проблем нет
GarryC
03.12.2018 11:40Забавно как то, то есть измерять в процессе регулировки Вы не намерены, если Вам сборка не нужна?
proton17
03.12.2018 11:51Это вопрос к конструкции платы. У нас есть платы где необходим процесс регулировки. Он включает замер ряда сопротивлений и напряжений в опорных цепях, но для этого на плате имеется специальный технологический разъемчик. Так что для регулировки настройщику нужна только инструкция и измерительный прибор. Схема или сборка ему без надобности. Но так, конечно, можно сделать не всегда.
Fandir
03.12.2018 11:52Что измерять? Мы говорим о сборке платы, это чертежи слоев ПП, вам она как поможет при регулировке? Я лично ни одного техника или наладчика, который бы при настройке платы пользовался бы СБ платы не видел, если нужно что-то посмотреть по трассировке, то ему проще открыть электронный чертеж в P-CAD или в Altium, чем смотреть шестислойную плату на бумаге… Вы возможно путаете со сборкой ячейки на которой отмечены позиции элементов, но это разные чертежи… И как уже правильно заметили по хорошему к плате должна быть инструкция по настройке и тестовый стенд куда плату воткнули и все характеристики сняли…
GarryC
03.12.2018 12:20Ну я то имел в виду сборочный чертеж печатной платы (он так и называется) с установленными элементами. Конечно же, чертеж слоев к данному документу не относится, но он вроде и по другому назывался.
proton17
03.12.2018 12:23С элементами это сборочный чертеж модуля, т.е. ПП + элементы. А СБ платы это по сути текстолит + металлизация + препеги и т.п. Обычно в СБ на плату еще приводят ее структуру.
Fandir
03.12.2018 12:24На как раз на всех картинках совсем не об этих чертежах речь идет… Хотя судя по гифке сборку с элементами этот скрипт тоже делать умеет… Но опять же сборка с элементами уже можно совместить со сборкой платы в корпус, а это делается через экспорт 3д модели платы туда, куда душе угодно… И дальше там уже чертежи не проблема сделать.
Fandir
03.12.2018 11:57Сборка платы это анахронизм тех времен, когда рисунок платы перечерчивали на текстолит ручками и потом травили, по сути сборка платы это предок Gerber файла и в современном производстве не нужна… Единственное где им пользуются это при согласовании разработанной платы с технологами… им вот как раз этот чертеж удобен, т.к. на нем же расположены размеры всех посадочных площадок, размеры отверстий, толщины проводников и прочие ТТХ платы… на КДПВ вы можете видеть такой чертеж. Настройщику он точно не нужен.
proton17
03.12.2018 12:06А координатная сетка была нужна для монтажных указаний и регистрации изменений и доработок. Типа перерезать дорожку в координате ххх yyy ну и т.п. А вообще вроде еще по СБ платы ОТК проводит входной контроль.
Fandir
03.12.2018 12:11Ну в любом случае на фиг нужны внутренние слои мне непонятно… Самые сложные для работы слои это плейны питания и земли, кстати в DXF они экспортируются как есть, т.е инвертированными, они очень сильно тормозят САПР и уж точно ни какой смысловой нагрузки не несут… Плюс вывести такой файлик на печать на плоттер тоже тот ещё геморой, помню на плоттере с LPT портом такой чертеж одного слоя земли печатался 40 минут.
proton17
03.12.2018 12:19У нас СБ платы это только габарит платы + маркировка и контактные площадки на топе и ботоме, т.е. то, что вы видите беря плату в руки. Никаких внутренних слоев и металлизации. Насколько я помню ГОСТ это допускает, для документах на электронных носителях.
Fandir
03.12.2018 12:23Ну вот это по делу, а у нас это сборка всех слоев… Нужно будет узнать может быть можно делать только верхний и нижний слой.
proton17
03.12.2018 12:30По ГОСТ 2.417-91:
30. При автоматизированном и полуавтоматизированном методе конструирования допускается чертежи печатных плат выпускать без изображения проводящего рисунка, включая в комплект конструкторской документации документы на носителях данных, определяющих конструкцию и способ изготовления печатных плат и их составных частей.
т.е. GERBER файлы короче)
Misaka10032
03.12.2018 11:16P.S.: а вообще так хочется все эти ЕСКД и ГОСТ послать в… у
У меня успешно получилось. Просто зарёкся работать в различных гос. учреждениях, которым пофиг на результат, лишь бы бумажками было прикрыто всё.
mmmmmike
03.12.2018 11:15Если бы я пользовался таким, то добавил бы площадь металлизации слоев. А в остальном всё прекрасно,
old_bear
03.12.2018 11:55Только паскаль
Что, правда?Fandir
03.12.2018 11:58Альтиум написан на Delphi так что возможно не такая это уж и плохая идея))
zloe_morkoffko
03.12.2018 12:08AD18 вроде как переписан на C#
altium_spark Автор
03.12.2018 12:13тут неправы немного. Он не был переписан, в 18 переписан 3D движок с directX9 на 10, в остальном все также. Но плагины для altium писать на с# можно, он ох подключает как доп. extensions. Но для их создания нужно получать официальный SDK
zloe_morkoffko
03.12.2018 12:2964-bit — the software now has access to more memory, and the code has been refactored in many areas, and written in C#, which has better memory management, and more efficient access to all that 64-bit and multi-threading has to offer.
Тогда о каком C# здесь они пишут?
Сорри, ссылку вставить не получается :(MrShoor
04.12.2018 00:05Там пишут, что был сделан рефакторинг во множестве областей. То есть не все переписано под C#. В первую очередь C# коснулся UI. Это всякие панели (но пока еще не все). Ядро PCB по прежнему пока на Delphi.
Ну и второй момент — это скрипты в AD. Они изначально имели Delphi синтаксис. Даже если бы ядро PCB переписали на C#, то скрипты остались бы с прежним синтаксисом как минимум из-за обратной совместимости.
altium_spark Автор
03.12.2018 12:11Да, без всяких внешних допов. Программа составляет два файла только, pas и одна форма
old_bear
03.12.2018 12:13Меня поразил не факт отсутствия сторонних зависимостей (это я как раз приветствую), а выбор языка. Прямо ностальгия накатила по
оченьстарым добрым временам.
GREGOR_812
03.12.2018 14:05+1В чём суть статьи? «Смотрите, как я могу»? Ни примера скрипта, ничего нет, зато есть 16к строк и 4 года «без гита и прочего».
A__D
03.12.2018 17:29+1Это тупо реклама и ничего более)
altium_spark Автор
03.12.2018 18:30какая реклама? я разве что-то предлагал? я поделился опытом оптимизации рабочего времени. Думаю таких поделок может очень много «зарыто» на рабочих компьютерах, много кто пишет мелкие скрипты, кто-то чуть больше, но все они могут пригодиться в реальной работе. Если очень захотеть, то данный скрипт можно и доработать под нужны любой организации и внедрить полноценно в работе, а для этого нужна огласка и распространение. Собственно для этого и нужны статьи — чтобы узнали, вышли, рассказали, заметили, не так ли?
GREGOR_812
03.12.2018 19:35+2Так ведь в статье нет ни ссылки на гитхаб или другой ресурс, где можно было бы посмотреть Ваш скрипт. Равно как и примеров самого кода в статье. Отсюда и вопросы, о чём статья вообще
altium_spark Автор
03.12.2018 20:58подумал, что с такими ссылками это будет явно пахнуть рекламой и не пройдет модерацию, первая статья всё-таки. Добавлю ссылки к статье тогда
bormotov
04.12.2018 01:48На мой вкус, ссылки на исходники, даже если лицензия не очень свободна, очень полезные ссылки.
Но «без гита» — в 2018 году звучит странно (я это читаю как «без контроля версий», может быть не прав?)
A__D
04.12.2018 15:47Что вы как маленький, сразу «дурачка» включили…
Да, ссылок нет (типа не дали ссылок прямых, что бы за рекламу не сочли, но интерес создали статьёй-пустышкой), но вполне гуглится то, о чем вы написали. (vk.com/altiumdraft — это ведь оно… а там уже и услуги по оформлению и саму программу можно купить, ой как удобно, да?)
alihovsky
03.12.2018 20:39Почему все таки не автокад?
altium_spark Автор
03.12.2018 20:52
в автокаде такое создать довольно трудоемко. И тем более здесь нативная связь чертеж-плата, можно легко обновить чертеж, при изменении платы
doublekey
03.12.2018 20:52Не смотрели в сторону Altium Draftsman для создания СБ?
Вроде бы он умеет рисовать и синхронизировать файл топологии и чертёж платы, можно добавлять сверловку. Технические требования пишутся текстом и вставляются отдельно в документ. Эти операции можно также автоматизировать с помощью вашего скрипта.altium_spark Автор
03.12.2018 20:54чертежи, оформленные в Draftsman не пройдут серьезный нормоконтроль, который есть в предприятиях ВПК. Толщины линий, стрелки, форматки листов, отсутствие координатной сетки и многие другие вещи в неё либо не настраиваются, либо отсутствуют
Karlson_rwa
А что вас заставило в самом альтиуме чертежи рисовать? Неужели нельзя было воспользоваться автокадом или компасом?
Fandir
В компас как то не очень кушает DWG со слоями платы, поэтому сборку платы немного геморройно сделать…
Karlson_rwa
А маршрут вида Altium->CAM350->DXF не пробовали? Да, я понимаю, что CAM350 это очередной платный софт в цепочке. Но всё же.
Fandir
Не пробовал нужно будет попробовать) Возможно это будет неплохой вариант… Пока для компаса — экспорт в формат Parasolid потом экспорт этого формата в компас… На выходе 3д модель платы в компасе… Её и режем для сборки, но все это очень тупит.
proton17
Я по Алтиуму не спец, а он в DXF не умеет?
mmmmmike
Умеет, но DXF выходит неудобоваримый для Компаса, нужно пересохранять в старых форматах.
proton17
Странно, но у нас связка Allegro->DXF->Autocad 2017/18 работает отлично. Возможно у Altium/Компас своя специфика.
mmmmmike
Именно через Автокад и приходилось перегонять.
altium_spark Автор
Так это опять DXF… связь односторонняя. Вы измените что-то в плате — чертёж почти заново оформлять
proton17
Ну заново это вы загнули конечно. Все что обычно может поменяться это положение некоторых элементов или маркировка. Это все передается отдельными слоями, так что конструктору надо 1 минуту на замену поплывшей маркировки или расположения элемента. Хотя, кто же спорит, лучше все делать в одной проге, если есть такая возможность.
Fandir
Умеет, но почему то DXF который нормально выглядит в AutoCAD в компасе выглядит ужасно…
altium_spark Автор
Во-первых, в компасе нельзя автоматически преобразовать все отверстия в условные обозначения, подсчёт для Таблицы отверстий — тоже ручной ввод, слишком долго «разлагать» все по слоям, зеркалить, сетку накладывать и прочее. Тем более при изменении платы нужно все делать заново если не хочешь ошибиться. А внутри альтиума можно нажать в программе «обновить чертеж» и все виды обновлены, таблица пересчитана и красота