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 формате для дальнейшего использования

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

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

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

Пример оформленного чертежа внутри PCB

Версия программы, чтобы попробовать

Комментарии (61)


  1. Karlson_rwa
    03.12.2018 10:56

    А что вас заставило в самом альтиуме чертежи рисовать? Неужели нельзя было воспользоваться автокадом или компасом?


    1. Fandir
      03.12.2018 11:05

      В компас как то не очень кушает DWG со слоями платы, поэтому сборку платы немного геморройно сделать…


      1. Karlson_rwa
        03.12.2018 11:07

        А маршрут вида Altium->CAM350->DXF не пробовали? Да, я понимаю, что CAM350 это очередной платный софт в цепочке. Но всё же.


        1. Fandir
          03.12.2018 11:11

          Не пробовал нужно будет попробовать) Возможно это будет неплохой вариант… Пока для компаса — экспорт в формат Parasolid потом экспорт этого формата в компас… На выходе 3д модель платы в компасе… Её и режем для сборки, но все это очень тупит.


          1. proton17
            03.12.2018 11:13

            Я по Алтиуму не спец, а он в DXF не умеет?


            1. mmmmmike
              03.12.2018 11:15

              Умеет, но DXF выходит неудобоваримый для Компаса, нужно пересохранять в старых форматах.


              1. proton17
                03.12.2018 11:18

                Странно, но у нас связка Allegro->DXF->Autocad 2017/18 работает отлично. Возможно у Altium/Компас своя специфика.


                1. mmmmmike
                  03.12.2018 11:22

                  Именно через Автокад и приходилось перегонять.


                1. altium_spark Автор
                  03.12.2018 11:39

                  Так это опять DXF… связь односторонняя. Вы измените что-то в плате — чертёж почти заново оформлять


                  1. proton17
                    03.12.2018 11:47

                    Ну заново это вы загнули конечно. Все что обычно может поменяться это положение некоторых элементов или маркировка. Это все передается отдельными слоями, так что конструктору надо 1 минуту на замену поплывшей маркировки или расположения элемента. Хотя, кто же спорит, лучше все делать в одной проге, если есть такая возможность.


            1. Fandir
              03.12.2018 11:17

              Умеет, но почему то DXF который нормально выглядит в AutoCAD в компасе выглядит ужасно…


    1. altium_spark Автор
      03.12.2018 11:37

      Во-первых, в компасе нельзя автоматически преобразовать все отверстия в условные обозначения, подсчёт для Таблицы отверстий — тоже ручной ввод, слишком долго «разлагать» все по слоям, зеркалить, сетку накладывать и прочее. Тем более при изменении платы нужно все делать заново если не хочешь ошибиться. А внутри альтиума можно нажать в программе «обновить чертеж» и все виды обновлены, таблица пересчитана и красота


  1. proton17
    03.12.2018 11:07

    У нас немного другой САПР, но проблемы те же. Делаем экспорт в DXF а дальше конструктора быстро шлепают СБ и СП. Кстати по КДПВ, вроде сейчас для электронных архивов можно не делать координатную сетку на СБ платы. P.S.: а вообще так хочется все эти ЕСКД и ГОСТ послать в… у


    1. Fandir
      03.12.2018 11:09

      Сборка платы вообще бредовый бред, но военные требуют)


      1. proton17
        03.12.2018 11:11

        Да дело даже не в приемке, сам нормконртоль и архив требует полный перечень КД. Особенно бесит документ перечень элементов. Все САПР умеют делать BoM, что по сути есть готовая спецификация.


        1. Fandir
          03.12.2018 11:15

          Ну перечень то как раз документ не бесполезный в альтиуме кстати с перечнем проблем нет, они там в формирователь BOM добавили ПЭ, Специю, и ВП… по ГОСТ… Но я все равно эти доки делаю через другой сторонний софт… Почти автоматом…


        1. mmmmmike
          03.12.2018 11:20

          del


      1. GarryC
        03.12.2018 11:12

        Если не секрет, как Вы собираетесь без этого «бреда» регулировать плату?


        1. proton17
          03.12.2018 11:15

          Ну далеко не все платы требуют регулировки это раз, а во вторых из самого САПР можно сделать вполне приличный чертеж, часто более понятный чем по ЕСКД. Вот только не один архив его не примет(


        1. Fandir
          03.12.2018 11:16
          -1

          Ну сборка платы вообще ничем не поможет при регулировке… А вот перечень вещь нужная, но с перечнем у Альтиума как раз проблем нет


          1. GarryC
            03.12.2018 11:40

            Забавно как то, то есть измерять в процессе регулировки Вы не намерены, если Вам сборка не нужна?


            1. proton17
              03.12.2018 11:51

              Это вопрос к конструкции платы. У нас есть платы где необходим процесс регулировки. Он включает замер ряда сопротивлений и напряжений в опорных цепях, но для этого на плате имеется специальный технологический разъемчик. Так что для регулировки настройщику нужна только инструкция и измерительный прибор. Схема или сборка ему без надобности. Но так, конечно, можно сделать не всегда.


            1. Fandir
              03.12.2018 11:52

              Что измерять? Мы говорим о сборке платы, это чертежи слоев ПП, вам она как поможет при регулировке? Я лично ни одного техника или наладчика, который бы при настройке платы пользовался бы СБ платы не видел, если нужно что-то посмотреть по трассировке, то ему проще открыть электронный чертеж в P-CAD или в Altium, чем смотреть шестислойную плату на бумаге… Вы возможно путаете со сборкой ячейки на которой отмечены позиции элементов, но это разные чертежи… И как уже правильно заметили по хорошему к плате должна быть инструкция по настройке и тестовый стенд куда плату воткнули и все характеристики сняли…


              1. GarryC
                03.12.2018 12:20

                Ну я то имел в виду сборочный чертеж печатной платы (он так и называется) с установленными элементами. Конечно же, чертеж слоев к данному документу не относится, но он вроде и по другому назывался.


                1. proton17
                  03.12.2018 12:23

                  С элементами это сборочный чертеж модуля, т.е. ПП + элементы. А СБ платы это по сути текстолит + металлизация + препеги и т.п. Обычно в СБ на плату еще приводят ее структуру.


                1. Fandir
                  03.12.2018 12:24

                  На как раз на всех картинках совсем не об этих чертежах речь идет… Хотя судя по гифке сборку с элементами этот скрипт тоже делать умеет… Но опять же сборка с элементами уже можно совместить со сборкой платы в корпус, а это делается через экспорт 3д модели платы туда, куда душе угодно… И дальше там уже чертежи не проблема сделать.


            1. Fandir
              03.12.2018 11:57

              Сборка платы это анахронизм тех времен, когда рисунок платы перечерчивали на текстолит ручками и потом травили, по сути сборка платы это предок Gerber файла и в современном производстве не нужна… Единственное где им пользуются это при согласовании разработанной платы с технологами… им вот как раз этот чертеж удобен, т.к. на нем же расположены размеры всех посадочных площадок, размеры отверстий, толщины проводников и прочие ТТХ платы… на КДПВ вы можете видеть такой чертеж. Настройщику он точно не нужен.


              1. proton17
                03.12.2018 12:06

                А координатная сетка была нужна для монтажных указаний и регистрации изменений и доработок. Типа перерезать дорожку в координате ххх yyy ну и т.п. А вообще вроде еще по СБ платы ОТК проводит входной контроль.


                1. Fandir
                  03.12.2018 12:11

                  Ну в любом случае на фиг нужны внутренние слои мне непонятно… Самые сложные для работы слои это плейны питания и земли, кстати в DXF они экспортируются как есть, т.е инвертированными, они очень сильно тормозят САПР и уж точно ни какой смысловой нагрузки не несут… Плюс вывести такой файлик на печать на плоттер тоже тот ещё геморой, помню на плоттере с LPT портом такой чертеж одного слоя земли печатался 40 минут.


                  1. proton17
                    03.12.2018 12:19

                    У нас СБ платы это только габарит платы + маркировка и контактные площадки на топе и ботоме, т.е. то, что вы видите беря плату в руки. Никаких внутренних слоев и металлизации. Насколько я помню ГОСТ это допускает, для документах на электронных носителях.


                    1. Fandir
                      03.12.2018 12:23

                      Ну вот это по делу, а у нас это сборка всех слоев… Нужно будет узнать может быть можно делать только верхний и нижний слой.


                      1. proton17
                        03.12.2018 12:30

                        По ГОСТ 2.417-91:
                        30. При автоматизированном и полуавтоматизированном методе конструирования допускается чертежи печатных плат выпускать без изображения проводящего рисунка, включая в комплект конструкторской документации документы на носителях данных, определяющих конструкцию и способ изготовления печатных плат и их составных частей.
                        т.е. GERBER файлы короче)


    1. Misaka10032
      03.12.2018 11:16

      P.S.: а вообще так хочется все эти ЕСКД и ГОСТ послать в… у

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


      1. vova_pcb
        05.12.2018 23:44

        А если за «бумажки» зарплату предложат в 2 раза выше?


    1. radonit
      03.12.2018 12:11

      А через СТП поменять это не пробовали? У самолётчиков такие финты проходили, если военные это СТП согласны подписать.


      1. proton17
        03.12.2018 12:21

        СТП нужно заниматься, что-то уже протащили, но все равно еще куча всякой фигни остается.


  1. mmmmmike
    03.12.2018 11:15

    Если бы я пользовался таким, то добавил бы площадь металлизации слоев. А в остальном всё прекрасно,


  1. old_bear
    03.12.2018 11:55

    Только паскаль

    Что, правда?


    1. Fandir
      03.12.2018 11:58

      Альтиум написан на Delphi так что возможно не такая это уж и плохая идея))


      1. zloe_morkoffko
        03.12.2018 12:08

        AD18 вроде как переписан на C#


        1. altium_spark Автор
          03.12.2018 12:13

          тут неправы немного. Он не был переписан, в 18 переписан 3D движок с directX9 на 10, в остальном все также. Но плагины для altium писать на с# можно, он ох подключает как доп. extensions. Но для их создания нужно получать официальный SDK


          1. zloe_morkoffko
            03.12.2018 12:29

            64-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# здесь они пишут?

            Сорри, ссылку вставить не получается :(


            1. MrShoor
              04.12.2018 00:05

              Там пишут, что был сделан рефакторинг во множестве областей. То есть не все переписано под C#. В первую очередь C# коснулся UI. Это всякие панели (но пока еще не все). Ядро PCB по прежнему пока на Delphi.
              Ну и второй момент — это скрипты в AD. Они изначально имели Delphi синтаксис. Даже если бы ядро PCB переписали на C#, то скрипты остались бы с прежним синтаксисом как минимум из-за обратной совместимости.


    1. altium_spark Автор
      03.12.2018 12:11

      Да, без всяких внешних допов. Программа составляет два файла только, pas и одна форма


      1. Fandir
        03.12.2018 12:12

        А как кстати ваш скрипт выводит плейны? Как в DXF в виде линий или нормально?


      1. old_bear
        03.12.2018 12:13

        Меня поразил не факт отсутствия сторонних зависимостей (это я как раз приветствую), а выбор языка. Прямо ностальгия накатила по очень старым добрым временам.


        1. mmmmmike
          03.12.2018 12:25

          И даже больше — в Altium встроено скриптование на Паскале


        1. altium_spark Автор
          03.12.2018 18:37

          помню как стоял выбор, ткнул что первое было:


  1. GREGOR_812
    03.12.2018 14:05
    +1

    В чём суть статьи? «Смотрите, как я могу»? Ни примера скрипта, ничего нет, зато есть 16к строк и 4 года «без гита и прочего».


    1. A__D
      03.12.2018 17:29
      +1

      Это тупо реклама и ничего более)


      1. altium_spark Автор
        03.12.2018 18:30

        какая реклама? я разве что-то предлагал? я поделился опытом оптимизации рабочего времени. Думаю таких поделок может очень много «зарыто» на рабочих компьютерах, много кто пишет мелкие скрипты, кто-то чуть больше, но все они могут пригодиться в реальной работе. Если очень захотеть, то данный скрипт можно и доработать под нужны любой организации и внедрить полноценно в работе, а для этого нужна огласка и распространение. Собственно для этого и нужны статьи — чтобы узнали, вышли, рассказали, заметили, не так ли?


        1. GREGOR_812
          03.12.2018 19:35
          +2

          Так ведь в статье нет ни ссылки на гитхаб или другой ресурс, где можно было бы посмотреть Ваш скрипт. Равно как и примеров самого кода в статье. Отсюда и вопросы, о чём статья вообще


          1. altium_spark Автор
            03.12.2018 20:58

            подумал, что с такими ссылками это будет явно пахнуть рекламой и не пройдет модерацию, первая статья всё-таки. Добавлю ссылки к статье тогда


            1. bormotov
              04.12.2018 01:48

              На мой вкус, ссылки на исходники, даже если лицензия не очень свободна, очень полезные ссылки.

              Но «без гита» — в 2018 году звучит странно (я это читаю как «без контроля версий», может быть не прав?)


        1. A__D
          04.12.2018 15:47

          Что вы как маленький, сразу «дурачка» включили…
          Да, ссылок нет (типа не дали ссылок прямых, что бы за рекламу не сочли, но интерес создали статьёй-пустышкой), но вполне гуглится то, о чем вы написали. (vk.com/altiumdraft — это ведь оно… а там уже и услуги по оформлению и саму программу можно купить, ой как удобно, да?)


  1. devprodest
    03.12.2018 20:22

    смотрю в комментах знакомые ники с форумов альтиум и миландра))


  1. alihovsky
    03.12.2018 20:39

    Почему все таки не автокад?


    1. altium_spark Автор
      03.12.2018 20:52



      в автокаде такое создать довольно трудоемко. И тем более здесь нативная связь чертеж-плата, можно легко обновить чертеж, при изменении платы


  1. doublekey
    03.12.2018 20:52

    Не смотрели в сторону Altium Draftsman для создания СБ?
    Вроде бы он умеет рисовать и синхронизировать файл топологии и чертёж платы, можно добавлять сверловку. Технические требования пишутся текстом и вставляются отдельно в документ. Эти операции можно также автоматизировать с помощью вашего скрипта.


    1. altium_spark Автор
      03.12.2018 20:54

      чертежи, оформленные в Draftsman не пройдут серьезный нормоконтроль, который есть в предприятиях ВПК. Толщины линий, стрелки, форматки листов, отсутствие координатной сетки и многие другие вещи в неё либо не настраиваются, либо отсутствуют


  1. siargy
    05.12.2018 13:55

    навскидку, половина вопросов решается правильным OutJob-ом