Как я писал самый большой скрипт для Altium Designer

в 17:57, , рубрики: Delphi, Производство и разработка электроники

15680 строк, 800 053 знаков — именно такой величины сегодня мой скрипт, созданный внутри Altium Designer — системы по разработке печатный плат.

image

Начало

Был 2014 год, я работал инженером-конструктором, разрабатывал печатные платы. Военная приемка, оформление полной конструкторской документации (КД), нормоконтроль ЕСКД — все это заставляет трепетать заграничный австралийско-китайско-американский софт, коим является система Altium. Поскольку им чужды советские ГОСТы, старые инструкции и стандарты по оформлению чертежей. Один сотрудник нашего отдела порой тратил целую рабочую смену, чтобы чертеж платы удовлетворял всем нормам и правилам по оформлению КД.
Сейчас это делается минут за 10.

Я решил, что можно упростить жизнь и себе, и ещё десятку человек на работе. Начал разбираться, нашел, что есть открытый API, стал смотреть примеры и вуаля, мой первый скрипт для Altium уже рисует линию на плате -радости нет предела.

Потихоньку помаленьку я расширял свои знания в программировании, поскольку до этого особо с ним не сталкивался, в универе помню маятник написал за семестр и всё.

Первый интерфейс

Дошло до того, что нужно было делать интерфейс, в самом начале он был таким:

image

Эта версия уже умела рисовать размеры, выноски со стрелками.

Надо понимать, что особых разъяснений в документации не было, опыта ни у кого в использовании функций из API тоже не было, только некоторые скрипты на гитхабе и стандартные альтиумовские. Описание на wiki и по сей день из разряда:

SetState_Enabled method
(IPCB_Primitive interface)
Syntax
Procedure SetState_Enabled (Value : Boolean);
Description
Example
See also
IPCB_Primitive interface

И всё описание, хотя методом проб и ошибок получалось определять как это работает.

Каждый новый раз введение новых функций доставляло удовольствие, ведь когда ты видишь, как твоими трудами люди пользуются и всё получается — это ли не то, зачем создаются программы. На этом этапе время оформления чертежей уже удалось сократить почти вдвое.

Развитие

Следующая версия уже выглядела так:

image

Она уже умела вставлять листы внутрь платы, штриховать полигоны для чертежа, вставлять сетку и прочие элементы для чертежа.

Главная проблема заключалась в том, что среда разработки Altium — это система для разработки печатных плат. В ней недостаточно инструментов для оформления КД, и тем более по российским стандартам. В основном написание скриптов расширяло стандартный инструментарий среды для того, чтобы можно было ещё и разработать КД и вывести его на печать.

К примеру вставку листов разных форматов я внедрил прямо в код, не стал делать отдельных файлов. Применил для этого excel таблицы, вставил руками в файл pcb форматку, выделил все свойства всех линий, их координаты, ширины, координаты текстов и т.д. и внёс все это в обычный массив. Затем уже скрипт по порядку создавал каждую из линий форматки в самом файле платы. И так для каждого листа всех форматов.

Наши дни

Сейчас же программа выглядит уже вот так:

image

image

Я ни разу не дизайнер, кнопки пришлось иногда лепить куда попало, смотрел на самые известные САПР системы, как там сделаны меню, настройки, выпадающие кнопки и прочее.

Вот пример работы самого скрипта

image

image

Итого на борту:

  • Более 50 настроек, сохранение их внутри файла платы
  • Обновление чертежей при внесении изменений в плату
  • Автоматическая вставка видов в центр листов
  • Формирование PDF в одну кнопку
  • Редактирование размеров с пересчетом отклонений налету
  • Радиальная сетка, 4х сторонняя сетка, риски, настраиваемый шаг
  • Сохранение эскизных рисунков в txt формате для дальнейшего использования

и многое другое.

Много нервов, сил, терпения, бессонных ночей — потрачено. Оформляем чертежи на работе — бесценно.

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

Автор: рыцарь со стволом

Источник

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