Трассировка печатных плат (Дэлфи)

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    55,12 Кб
  • Опубликовано:
    2013-01-19
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Трассировка печатных плат (Дэлфи)

Введение

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

1. Анализ технического задания

Рассмотрим более детально требования курсового проекта.

редактирование исходных данных из окна программы. Из этого требования вытекает, что программа должна иметь удобный графический интерфейс, позволяющий производить редактирование исходных данных. Кроме того, требованиями определен тип интерфейса SDI Single Document Interface.

сохранение изображения трассировки. Исходя из данного требования следует, что программа должна обеспечивать возможность построения графического изображения поля трассировки, контактных площадок, проводников. Если отталкиваться от средства разработки, а именно IDE Delphi, то можно сделать вывод, что работа будет идти с объектами класса TCanvas и его потомками;

отображение неразведённых связей. Из данного требования вытекает необходимость визуального выделения типов связей после трассировки;

отображение плотности трассировки по сечениям; Кроме самой области, на которой будет производиться трассировка, на интерфейсе следует предусмотреть область для отображения плотности трассировки по сечениям.

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

Все дополнительные требования технического задания, такие как классы, массивы и прочие особенности программной реализации будут рассмотрены на этапе разработки концептуальной объектной модели.

2. Разработка математической модели системы

Каноничным вариантом определения кратчайшего пути между двумя точками на матрице является волновой алгоритм. Для реализации данного алгоритма следует ввести ограничение: поле, на котором будет производиться трассировка, необходимо сделать дискретным. Таким образом, данное поле можно представить в виде прямоугольной матрицы, размерами n на m. Исходя из данного ограничения, реализация волнового алгоритма представляет собой тривиальную задачу.

Рассмотрим принцип волнового алгоритма. [1]

Волново́й алгори́тм - алгоритм, позволяющий найти минимальный путь в графе с рёбрами единичной длины.

На двумерной клетчатой карте (матрице), состоящей из «проходимых» и «непроходимых» клеток, обозначена клетка старта и клетка финиша. Цель алгоритма - проложить кратчайший путь от клетки старта к клетке финиша, если это, конечно, возможно. От старта во все направления распространяется волна, причем каждая пройденная волной клетка помечается как «пройденная». Волна, в свою очередь, не может проходить через клетки, помеченные как «пройденные» или «непроходимые». Волна движется, пока не достигнет точки финиша или пока не останется непройденных клеток. Если волна прошла все доступные клетки, но так и не достигла клетки финиша, значит, путь от старта до финиша проложить невозможно. После достижения волной финиша, от финиша прокладывается путь до старта и сохраняется в массиве.

Реализация волнового алгоритма относительна проста. В конкретном случае используется волновой алгоритм по 8 направлениям. Покажем пример работы алгоритма визуально:

Рисунок 1 - Пример волнового алгоритма

Алгоритм включает в себя две стадии:

прямой ход. Прямой ход обеспечивается итерационным процессом запуска волны. На рисунке 1 прямой ход изображен на стадиях 1 - 5;

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

. Разработка концептуальной объектной модели системы

Для программной реализации процесса трассировки используем объектно-ориентированную модель. Согласно данной модели следует выделить все основные сущности, которые будут использоваться при реализации процесса трассировки. Рассмотрим и опишем каждую из сущностей:

контактная площадка. Контактная площадка, которая должна располагаться на поле трассировки;

проводник. Кусок проводника, соединяющий две клетки поля трассировки;

поле трассировки. Поле для трассировки размером n на m, на котором будут располагаться контактные площадки и проводники;

связь. Контейнерная сущность. Содержит в себе информацию о связи двух контактных площадок, которая является комбинацией контактных площадок и набором проводников, обеспечивающих связь данных площадок;

диаграмма плотности трассировки. Диаграмма, на которой показана плотность заполнения поля трассировки.

Для управления данными сущностями и реализации логики работы алгоритма следует создать объект менеджер «трассировка». Данный объект будет инкапсулировать информацию о поле трассировки, список контактных площадок, связей и содержать диаграммы плотностей трассировки. Менеджер будет управлять жизнью сущностей, ограничивать доступ, обеспечивать контроль вводимых значений и прочее.

Непосредственное управление с клиента процессом трассировки будет обеспечиваться менеджером трассировки.

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

Рассмотрим сущности «контактная площадка» и «проводник». Обе сущности представляют собой дискретный элемент, располагающийся в ячейке сетки «поле трассировки». Обе эти сущности обладают одинаковыми свойствами, такими как размер и позиция. Кроме того, следует ввести свойство «тип элемента», которое бы определяло его тип. Например, состояние контактной площадки (свободна, слинкована, разведена), направление проводника (направо, направо-ввехр и т.д.). Единственное отличие данных сущностей (в рамках реализуемой задачи) заключается в их внешнем виде. Переходя к формализации этих сущностей можно выделить отдельную сущность «элемент трассировки», которая была бы родительской по отношению к сущностям «контактная площадка» и «проводник». Корректность наследования можно проверить следующим утверждением: «контактная площадка» является «элементом трассировки» и «проводник» является «элементом трассировки».

Переходя непосредственно к классам, получаем:

Рисунок 2 - Диаграмма классов

Как было отмечено выше, классы TTracePad, TTraceWire отличаются друг от друга внешним видом. Класс TTraceElement абстрактный, который не имеет внешнего вида, т.к. является обобщающей сущностью. Исходя из этого, в классе TTraceElement следует выделить абстрактный метод Paint, который будут реализовывать потомки TTracePad, TTraceWire. Приведем сигнатуру класса TTraceElement:

TTraceElement = class

private

aWidth, aHeight: integer;

xpos, ypos: integer;

aType: integer;

aCanvas: TControlCanvas;

protected

procedure Paint; virtual; abstract;

property Canvas: TControlCanvas read aCanvas;

property Width: integer read aWidth write aWidth;

property Height: integer read aHeight write aHeight;

public

property Top: integer read ypos ;

property Left: integer read xpos;

property ElementType: integer read aType;

constructor Create(pCanvas: TControlCanvas; pWidth, pHeigth, pxpos, pypos, pType: integer);

destructor destroy; override;

end;

Рассмотрим поля класса TTraceElement:

aWidth - ширина элемента;

aHeight - высота элемента;

xpos, ypos - координаты элемента;

aType - тип элемента;

aCanvas - канва, на которой будет рисоваться элемент.

Тип поля aCanvas - TControlCanvas. Объекты данного типа имеют ссылку на объект типа TControl, который позволяет получить размер графического элемента, на котором происходит процесс рисования. Размер необходим для обеспечения масштабирования при изменении размера графического элемента. У класса TTraceElement объявлены свойства public: Top, Left, ElementType; Свойства имеют директиву public для возможности получения доступа к свойствам объектам со стороны клиента. Класс TTracePad расширяет функционал класса TTraceElement дополнительным свойством LinkPad, для обеспечения ссылки на связанную площадку:

TTracePad = class(TTraceElement)

 private

aLinkPad: TTraceElement;

public

property LinkPad: TTraceElement read aLinkPad write aLinkPad;

procedure Paint; override;

constructor Create(pCanvas: TControlCanvas; pWidth, pHeigth, pxpos, pypos, pType: integer);

destructor Destroy; override;

end;

= class(TTraceElement)

 private

public

procedure Paint; override;

end;

Далее рассмотрим класс, описывающий сущность «поле трассировки»

= class

 private

RowCount, ColCount: integer;

ACanvas: TControlCanvas;

function GetCellWidth: integer;

function GetCellHeight: integer;

public

constructor Create(pCanvas: TControlCanvas);

procedure Paint;

property CellWidth: integer read GetCellWidth;

property CellHeight: integer read GetCellHeight;

end;

Класс обладает двумя открытыми свойствами CellWidth и CellHeight, описывающими размеры ячейки таблицы.

Рассмотрим класс, описывающий сущность «связь».

 TCircuit = class

private

StartPad, FinishPad: TTraceElement;

Wires: array of TTraceWire;

public

constructor Create;

destructor destroy; override;

end;

Класс TCircuit является контейнерным классом, который содержит ссылки на объекты классов TTraceWire и ТТraceElement; Обработку данных класс не производит;

Рассмотрим класс, реализующий сущность «диаграмма плотности трассировки»:

= class

 private

aCanvas: TControlCanvas;

aDensityArray: TDensityArray;

aElemSize: integer;

aElemMaxCount: integer;

public

constructor Create(pCanvas: TControlCanvas; ElemSize: integer; ElemMaxCount: integer);

procedure Paint (pDensityArray: TDensityArray);

end;

Данный класс обеспечивает рисование диаграммы плотности трассировки. Рисование обеспечивает процедура Paint, в параметры которой передается массив со значениями плотностей трассировки.

Рассмотрим класс, описывающий менеджер трассировки.

= class

 private

aTracingGrid: TTracingGrid;

rc, cc: integer;

Pad: TTraceElement;

aCanvas: TControlCanvas;

aPads: TTraceElementArray;

aCircuits: array of TCircuit;

RowDens, ColDens: TTraceDiagram;

procedure SetRowCount(prc: integer);

procedure SetColCount(pcc: integer);

procedure PaintElements;

function IsTracePosible: boolean;

procedure PrepareBeforeTrace;

procedure Clear;

function GetLinkPads: TLinkPadsArray;

function GetDensityByRow: TDensityArray;

function GetDensityByColumn: TDensityArray;

public

property RowCount: integer read rc write SetRowCount;

property ColCount: Integer read cc write SetColCount;

property Pads: TTraceElementArray read aPads;

property LinkedPads: TLinkPadsArray read GetLinkPads;

constructor Create(pCanvas, pCanvasRow, pCanvasCol: TControlCanvas; aRowCount, aColCount: integer);

destructor destroy; override;

procedure Paint;

procedure CreateNewPad(xpad, ypad: integer);

function DeletePad(xpad, ypad: integer): Boolean;

procedure ShowPad;

function Trace: integer;

function OpenTraceFile(const FileName: string): boolean;

function SaveTraceFile(const FileName: string): boolean;

end;

Данный класс обеспечивает:

управление жизнью объектов, которые необходимы для реализации трассировки: полем трассировки (aTracingGrid: TTracingGrid), списком контактных площадок (aPads: TTraceElementArray), списком цепей (aCircuits: array of TCircuit), диаграммами плотностей (RowDens, ColDens: TTraceDiagram);

логику работы программы: создание и контроль контактных площадок (procedure CreateNewPad(xpad, ypad: integer)), связывание контактных площадок (function LinkPads(xpad1, ypad1, xpad2, ypad2: integer): boolean), непосредственную трассировку площадок (function Trace: integer;) и другие функции;

вспомогательные функции: запись и чтение файлов соответствующего формата (function OpenTraceFile(const FileName: string): boolean; function SaveTraceFile(const FileName: string): Boolean), информацию о данных трассировки (property Pads: TTraceElementArray read aPads; property LinkedPads: TLinkPadsArray read GetLinkPads).

Иные структурные типы, такие как массивы, записи, присутствующие в программе, в подробном описании не нуждаются. Они необходимы для обеспечения функционала основных классов программы.

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

. Проектирование программы

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

Разработка интерфейса

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

Спроектируем интерфейс по следующему принципу:

Рисунок 2 - Основная схема интерфейса

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

Управление исходными данными трассировки (списком контактных площадок, списком слинкованных площадок), следует организовать в виде отдельного окна, которое можно в любой момент закрыть.

Элементы управления программой следует расположить на панели управления.

. Разработка алгоритмов

трассировка проектирование интерфейс

Основной интерес представляет непосредственно алгоритм трассировки. В классе TTracing данный алгоритм реализует метод Trace. Рассмотрим укрупненную блок-схему данного алгоритма, а затем дадим более полное описание некоторым моментам работы данного алгоритма.

Рисунок 3 - Блок схема алгоритма

Коротко опишем особенности реализации каждого блока

Блок 1: Инициализировать данные перед трассировкой. Данный блок удаляет информацию о неразведенных площадках, если таковые остались после предыдущей трассировки и удаляет все связи.

Блок 2: Проверка трассировки. Данный блок проверяет, возможна ли трассировка. Имеются ли слинкованные площадки, все ли площадки слинкованы верно.

Блок 3: Определение пар площадок и их сортировка. В этом блоке определяются все пары слинкованных площадок и пары помещаются в динамический массив. Затем массив сортируется по возрастанию расстояний между площадками. Расстояние определяется по теореме Пифагора. Таким образом, при разводке первыми будут разведены площадки, расстояние между которыми минимально. Данный подход позволяет «экономить» пространство печатной платы при разводке.

Блок 4: Проверка обработки всех пар. Блок представляет собой цикл, обеспечивающий проход по всем парам площадок.

Блок 5: Инициализация данных. Данный блок обеспечивает подготовку вспомогательных данных, необходимых для обеспечения процедуры разводки. Происходит инициализация рабочей матрицы.

Блок 6: Попытка развода текущей пары. Данный блок обеспечивает проверку возможности построения проводника между двумя контактными площадками. При реализации данной проверки используется волновой алгоритм. (Принцип волнового алгоритма описан выше).

Блок 7:Создание цепи. Блок строит цепь, если существует путь между контактными площадками. Используя данные из матрицы, заполненной волновым алгоритмом, данный блок находит путь между площадками, двигаясь в обратном направлении.

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

. Кодирование программы

Кодирование программы производилось в IDE Delphi 7. Для реализации логики программы был создан отдельный модуль uTracing, содержащий все классы для обеспечения трассировки. Основной модуль, реализующий интерфейс и процесс управление программой - uMain.

Для отображения графических данных используется стандартный компонент TPaintBox. Данный компонент содержит свойство Canvas: TControlCanvas; Использование данного компонента позволяет получить размер компонента, на котором происходит рисование (класс TCanvas свойства Width, Height не реализует). Имея информацию о размере можно реализовать процесс масштабирования рисунка.

Заключение

В ходе курсового проектирования была создана программа, обеспечивающая процесс трассировки печатной платы. В ходе реализации программы была разработана объектно-ориентированная модель, которая была реализована посредством языка Object Pascal в среде Delphi 7. Курсовой проект полностью отвечает требованиям технического задания.

Список используемых источников

1.      Иванова Г.С. Технология программирования: Учебник для вузов. - 2-е изд., стереотип. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2003. - 320 с.

.        Петров В.Н. Информационные системы: Учебник для вузов. - СПб.: Питер, 2003. - 688 с.: ил.

.        Орлов С.А. Технология разработки программного обеспечения: учебник для вузов. - СПб.: Питер, 2002.

.        Технология программирования: Программа учебной дисциплины и методические указания к выполнению курсовой работы / Сост. И.Н. Паламарь ; РГ АТА. - Рыбинск, 2006. - 37 с.

Похожие работы на - Трассировка печатных плат (Дэлфи)

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!