Click to order
Ваш заказ:
Total: 
Статьи

Как создать прикладную программу для Altium Designer?

Современные системы проектирования РЭА позволяют решать широкий круг задач различным категориям пользователей. Однако периодически возникает необходимость в реализации дополнительного функционала, не предусмотренного разработчиками системы. Поэтому разработчики сложных систем, включая Altium Designer, разрабатывают программные API для расширения функциональных возможностей. В Altium Designer такие модули называются Extentions

Существует два способа создания программных модулей для Altium Designer:

    Altium SDK (Software Developer Kit) - модуль поставляется в виде dll, для создания используются языки программирования C++, C#, Delphi;Altium Designer API (Application Programming Interface) - поставляется в виде исходного кода на языках программирования PascalScrtipt, JScript, VBScript, Query LanguageДва данных метода кардинально отличаются подходом в построении прикладных программ, набором доступного функционала и принципом исполнения.Использование Altium SDKДля использования SDK необходимо иметь доступ к программе разработчиков Altium DXP Developer. Доступ открывается после запроса через вашего поставщика решений Altium. Зарегистрировавшись по данной программе для разработчиков в разделе «Extensions & Updates» появится дополнительное расширение "Altium Developer". Для установки расширения необходимо иметь подключение к личному кабинету.

    После установки расширения в меню File появится дополнительный раздел (рис.1), с помощью которого можно создать собственный Extension и зарегистрировать его.

    Для написания программы с помощью SDK необходимо использовать любое доступное средство для разработки под конкретный язык, например Borland Delphi при использовании языка Delphi или Visual Studio для языка C#. В каждом случае при создании собственной программы необходимо использовать SDK под конкретный язык.

    Версий SDK на данный момент существует 5 версий:


    SDK 1.0 - для Altium Designer 14.2 + и выше;


    SDK 2.0 - для Altium Designer 15+ и выше;


    SDK 3.0 - для Altium Designer 16+ и выше;


    SDK 3.1 - для Altium Designer 17+ и выше;


    SDK 4.0 - для Altium Designer 18 и выше.


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

    Рис 1 – Меню создания Extension
    Рис 1 – Меню создания Extension
    Используя меню Extension, необходимо подключить созданный проект на любом доступном языке, задать имя будущего плагина, назначить иконку и другие параметры. Подробнее о формировании Extension можно ознакомиться на сайте Altium [1].Итогом создания прикладной программы с помощью SDK является библиотека dll, которая будет встроена в Altium Designer как обычный Extension и будет загружаться в систему при каждом запуске. Запуск программы будет зависеть от реализации проекта – это может быть кнопка в панели инструментов, отдельная панель или масштабный модуль, затрагивающий множество функциональных возможностей Altium Designer. Использование SDK – метод, требующий хороших навыков программирования и умения разбираться в сторонних библиотеках для извлечения и использования нужных методов для реализации необходимых прикладных задач. Менее трудоемким процессом создания прикладных программ является использование API.
    Использование Altium Designer API

    API – интерфейс для создания скриптов средствами самого Altium Designer, в отличии от SDK при этом не требуется сторонних компиляторов для формирования dll библиотеки, не требуется создания Extension и подключения его. Для запуска и исполнения скрипта необходимо в меню File \ Run Script указать нужный проект с созданной программой и указать исполняемый файл с кодом программы.

    Для создания прикладной программы (скрипта) с помощью API в Altium Designer необходимо создать проект PrjScr через меню File. Затем в данный проект необходимо вставить Script Form и после этого можно приступать к созданию программы. Используя API, сам код и интерфейс скрипта разрабатывается средствами встроенного интерфейса (рис.2). В нижней части рабочей области есть кнопки переключения между визуальной частью скрипта (Form) и исполняемым кодом (Code).

    Рис 2 – Создание интерфейса скрипта в Altium Designer
    Рис 2 – Создание интерфейса скрипта в Altium Designer
    При использовании API есть описание всех необходимых интерфейсов Altium в документации на сайте [2]. Для некоторых приемов в документации приведены примеры использования.Весь предоставленный программный интерфейс разделен на несколько разделов:- System API (работа с файлами)- Integrated Library API (работа с библиотеками)- FPGA API (работа с FPGA моделями)- PCB API (работа с PCB редактором)- Schematic API (работа со схемотехническим редактором)
    - Workspace Manager API (работа с проектами)
    В каждом из разделов есть свой набор интерфейсов со своими методами.

    Для создания графического интерфейса скрипта используется панель Tool Palette, в которой есть стандартные визуальные WindowsForms примитивы для отображения в окне программы. Все вставленные объекты в форму в редакторе кода можно обрабатывать и по различным действиям на объекты производить определенный набор необходимых действий. После завершения написания скрипта команду его запуска можно внедрить во вновь созданную строчку меню или кнопку в панели инструментов, для этого в меню Edit Command редактирования кнопки необходимо вставить:

    Process : ScriptingSystem:RunScript

    Parameters : ProjectName=[имя проекта]|ProcName=[файл кода].pas>[имя метода]

    Примеры реализации скрипта

    В качестве примера приводим код скрипта на языке Delphi с использованием API и на языке c# с использованием SDK. Программа выполняет поиск переходных отверстий на плате, координаты которых не кратны текущей координатной сетке и накладывает на такие отверстия маску, тем самым скрывая все остальные примитивы плат. Результат выполнения скрипта представлен на рис.3.
    Рис.3 Результат выполнения примера скрипта
    Рис.3 Результат выполнения примера скрипта
    Следующий пример создан на языке Delphi, используя API и можно повторить, создав следующий файл viagrid.pas, внеся в него следующий код и вызвал через меню File – Run Script:function viagrid;varBoard : IPCB_Board;Iter : IPCB_BoardIterator;Via : IPCB_Via;grid, x, y : double;beginBoard := PCBServer.GetCurrentPCBBoard;
    If Board = Nil then exit;
    ResetParameters;
    AddStringParameter('Scope','All');
    RunProcess('PCB:DeSelect');
    Iter := Board.BoardIterator_Create;
    Iter.AddFilter_ObjectSet(MkSet(eViaObject));
    Iter.AddFilter_AllLayers;
    Via := Iter.FirstPCBObject;
    While (Via <> nil) do begin
    x := roundto(coordtomms(Via.x-Board.BoardOutline.BoundingRectangle.Left),-3);
    y := roundto(coordtomms(Via.y-Board.BoardOutline.BoundingRectangle.Bottom),-3);
    grid := roundto(coordtomms(Board.ComponentGridSize),-3);
    if ((frac(x / grid) <> 0) or (frac(y / grid) <> 0))
    then Via.Selected := True;
    Via := Iter.NextPCBObject;
    end;


    Board.BoardIterator_Destroy(Iter);
    Client.PostMessage('PCB:RunQuery','Apply=True|Expr=IsSelected|Mask=True',
    Length('Apply=True|Expr=IsSelected|Mask=True'), Client.CurrentView);
    end;

    Пример реализации той же программы на языке c# с использованием SDK:
    public void Command_Viagrid(IServerDocumentView view, ref string parameters)
    {
    IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;
    if (pcbServer == null) return;
    IPCB_Board pcbBoard = pcbServer.GetCurrentPCBBoard();
    if (pcbBoard == null) return;
    DXP.Utils.RunCommand("PCB:DeSelect", "Scope=All");
    var boundingRect = pcbBoard.GetState_BoardOutline().BoundingRectangle();
    var gridSize = (int)pcbBoard.GetState_ComponentGridSize();
    var delta = EDP.Utils.MMsToCoord(0.001);
    IPCB_BoardIterator iterator = pcbBoard.BoardIterator_Create();
    iterator.AddFilter_ObjectSet(new PCB.TObjectSet(PCB.TObjectId.eViaObject));
    iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet);
    iterator.AddFilter_Area(boundingRect.Left, boundingRect.Bottom, boundingRect.Right, boundingRect.Top);
    IPCB_Primitive pcbObject = iterator.FirstPCBObject();
    while (pcbObject != null)
    {
    if (pcbObject is IPCB_Via via
    && (via.GetState_XLocation() % gridSize > delta
    || via.GetState_XLocation() % gridSize > delta))
    via.SetState_Selected(true);
    pcbObject = iterator.NextPCBObject();
    }
    pcbBoard.BoardIterator_Destroy(ref iterator);
    DXP.Utils.RunCommand("PCB:RunQuery",
    "Apply=True|Expr=IsSelected|Mask=True|Select=True");
    }
    Оба данных примера доступны для общего пользования в публичном репозитории по адресу https://github.com/glavkondev.

    Заключение

    Открытые средства для разработки прикладных программ для Altium Desinger позволяют решить любые возникающие у пользователей подзадачи. В руках программистов данные средства могут значительно увеличить эффективность работы с системой проектирования для рядовых пользователей. Скрипты и плагины могут быть различной сложности от обычного вывода справочной информации до сложных интеграционных систем, позволяющих обеспечить связь Altium Designer с другими внедренными на предприятии системами.


    За всю историю развития Altium Designer инженерами-энтузиастами были написано множество прикладных программ и скриптов, решающих конкретные узконаправленные задачи. Множество из них находится в открытом доступе [3], их можно установить, модифицировать и использовать для решения любых возникающих задач.

    Реализованные проекты

    Компания Главкон испольуя API и SDK, реализовала следующие проекты:

    Board Assistant - программный комплекс, разработан с целью автоматизировать процесс проектирования, а именно выпуск конструкторской и схемотхенической документации по ЕСКД.


    Разработка инстурмента для оформления чертежей на печатную плату дляАО "ОДК- СТАР"
    image
    Реализовано более 100 пунктов по доработкам продукта, под требования заказчика.

    Интеграционное решение Altium Designer Windchill PDM для АО"НИИ ВЕКТОР"




    Интеграционное решение Altium с СДС системой дистанционного снабжения компании Компэл(реализация механизмов сверки складских остатков с возможностью заказа прочих ЭРИ и расчеа стоимости производства печатного основания) https://sds.compel.ru/

    Интеграционное решение Altium Designer Windchill PDM для АО "НИИ ТМ"



    Литература
    Документация Altium DXP Developer
    https://www.altium.com/ru/documentation/altium-dxp-developer
    Документация по Altium Designer API
    https://techdocs.altium.com/display/SCRT/Altium+Designer+API+Reference
    Сборник скриптов для Altium Designer
    https://github.com/Altium-Designer-addons/scripts-libraries
    Altium Designer