Андрей Смирнов
Время чтения: ~24 мин.
Просмотров: 0

Traceroute online with mapping

Суперсэмплинг

квадрата

Псевдокод трассировщика лучей

CanvasToViewport(x, y) {
    return (x*Vw/Cw, y*Vh/Ch, d)
}


ReflectRay(R, N) {
    return 2*N*dot(N, R) - R;
}


ComputeLighting(P, N, V, s) {
    i = 0.0
    for light in scene.Lights {
        if light.type == ambient {
            i += light.intensity
        } else {
            if light.type == point {
                L = light.position - P
                t_max = 1
            } else {
                L = light.direction
                t_max = inf
            }

            # Проверка теней
            shadow_sphere, shadow_t = ClosestIntersection(P, L, 0.001, t_max)
            if shadow_sphere != NULL
                continue

            # Диффузность
            n_dot_l = dot(N, L)
            if n_dot_l > 0
                i += light.intensity*n_dot_l/(length(N)*length(L))

            # Блеск
            if s != -1 {
                R = ReflectRay(L, N)
                r_dot_v = dot(R, V)
                if r_dot_v > 0
                    i += light.intensity*pow(r_dot_v/(length(R)*length(V)), s)
            }
        }
    }
    return i
}


ClosestIntersection(O, D, t_min, t_max) {
    closest_t = inf
    closest_sphere = NULL
    for sphere in scene.Spheres {
        t1, t2 = IntersectRaySphere(O, D, sphere)
        if t1 in  and t1 
А вот сцена, использованная для рендеринга примеров:
viewport_size = 1 x 1
projection_plane_d = 1

sphere {
    center = (0, -1, 3)
    radius = 1
    color = (255, 0, 0)  # Красный
    specular = 500  # Блестящий
    reflective = 0.2  # Немного отражающий
}
sphere {
    center = (-2, 1, 3)
    radius = 1
    color = (0, 0, 255)  # Синий
    specular = 500  # Блестящий
    reflective = 0.3  # Немного более отражающий
}
sphere {
    center = (2, 1, 3)
    radius = 1
    color = (0, 255, 0)  # Зелёный
    specular = 10  # Немного блестящий
    reflective = 0.4  # Ещё более отражающий
}
sphere {
    color = (255, 255, 0)  # Жёлтый
    center = (0, -5001, 0)
    radius = 5000
    specular = 1000  # Очень блестящий
    reflective = 0.5  # Наполовину отражающий
}


light {
    type = ambient
    intensity = 0.2
}
light {
    type = point
    intensity = 0.6
    position = (2, 1, 0)
}
light {
    type = directional
    intensity = 0.2
    direction = (1, 4, 4)
}

Принципы работы трассировки

Пересылаемые сетевые пакеты состоят из двух областей: заголовки и данные. В заголовках находится разная информация, например, IP адреса пункта отправки и пункта назначения, порты отправки и назначения, тип пакета, контрольная сумма пакета и прочее. Среди полей заголовка, у IP протокола есть такое поле как time to live (TTL) — время жизни пакета. Это счётчик с числом, которое уменьшается на единицу каждый раз, когда пакет проходит новый узел. Этот счётчик сделан для того, чтобы проблемный пакет (например, при ошибке, повлекшей закольцованный маршрут) не путешествовал по сети бесконечно. То есть любой пакет пройдя определённое количество узлов в конце-концов достигнет точки назначения или будет отброшен одним из узлов сети, когда закончится «время жизни».

Когда счётчик TTL становится равным нулю, очередной шлюз просто не пересылает этот пакет дальше. Но при этом шлюз на тот IP адрес, откуда пришёл пакет с истёкшим временем жизни, отправляет по протоколу ICMP ответ TIME_EXCEEDED (время жизни кончилось). И этот ответ содержит IP адрес шлюза, где пакет закончил своё существование.

Так вот, суть трассировки в том, что отправляется один пакет с временем жизни (TTL) установленным на единицу — первый шлюз уменьшает значение на единицу, смотрит, что счётчик стал равен нулю, никуда не отправляет этот пакет, зато нам отправляет ответ, что пакет «умер». Мы и так знаем, что пакет умер — из этого ответа нас интересует только IP адрес шлюза, где с пакетом случилось это несчастье. Затем отправляется пакет со счётчиком установленным на 2 — пакет проходит первый шлюз (его IP мы уже знаем), но несчастье (счётчик достигает нуля) с ним случается уже на втором шлюзе — мы получаем ICMP ответ с IP этого шлюза. Затем отправляется следующий пакет и т. д., пока не будут определены все узлы до нужного нам сетевого хоста.

Комплект для трассировки кабеля TEMPO CTS 132j

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

Автоматическое изменение ширины трассы в процессе трассировки

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

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

Эта возможность работает, когда:

  • задано правило Placement Room для области на плате, где требуются более узкие трассы;
  • задано правило Width Constraint с более высоким приоритетом, которое определяет ширину трасс в пределах этой комнаты. Используйте область действия для этого правила, как описано ниже.

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

Сегменты трассы подчиняются правилам и изменяют свою ширину при пересечении границ комнаты.

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

Создание правила для комнаты

Подменю Design » Rooms содержит в себе ряд команд, относящихся к определению комнат.

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

При создании комнаты вокруг выделенных компонентов будет выполнено следующее:

Для выбранных компонентов будет создан класс компонентов. Вы можете просмотреть этот класс (Design » Classes) и изменить его имя (Name), если необходимо.
Будет создано правило проектирования Placement Room Definition. Областью действия будет являться класс компонентов, созданный на шаге 1. Если вы изменили имя класса компонентов, то область действия правила (Full Query) должна быть изменена соответственно.
Имя правилу Placement Room Definition также будет присвоено автоматически. Измените имя, если необходимо

Обратите внимание, что другие правила будут ссылаться на это правило по его имени (Name).
Если необходимо, измените размеры комнаты. Для этого щелкните ЛКМ по ней один раз, чтобы выделить, затем зажмите ЛКМ на вершине или стороне для перемещения

После щелчка по вершине вы можете зажать Shift для симметричного изменения размера.

В этом примере, области действия правила было задано определенное посадочное место компонента в корпусе BGA (‘BGA50P18X18-180’), а не класс компонентов.

Правило Placement Room Definition обычно распространяется на один или множество компонентов. В данном случае, где правило будет использоваться только для управления шириной трасс, нет необходимости задавать компоненты в качестве его области действия. Например, вы можете задать значение в качестве области действия (Full Query), и ширина трасс также будет изменяться необходимым образом. Преимуществом задания компонентов в качестве области действия является то, что при необходимости перемещения компонентов можно использовать команду Design » Rooms » Move Room – в этом случае, комната будет перемещаться вместе с компонентами.

Создание правила проектирования на основе комнаты

После того, как была создана комната, определяющая область с отличной шириной трассировки, можно создавать правило для требуемой ширины трасс. На рисунке ниже показан пример правила Routing Width, который задает редактору плат ширину трасс 0,075 мм в тех местах, где трасса касается комнаты с именем Room_BGA. Для выполнения требований правила, модуль интерактивной трассировки Altium Designer автоматически завершит текущий сегмент трассы на границе комнаты и начнет новый сегмент.

Правило Routing Width задает ширину трасс 0,075 мм в комнате Room_BGA для всех цепей

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

Производительность

Трассировщик пути постоянно производит выборку (англ. sampling — семплинг) пикселей изображения. Изображение становится различаемым только тогда, когда проведено несколько выборок на один пиксель, вплоть до 100 выборок на пиксель. Как правило, для обычных изображений и для уменьшения цифрового шума до приемлемого уровня делают около 5000 выборок. Однако для патологических (англ.) случаев количество выборок становится намного больше. Процесс рендеринга может занять часы и дни в зависимости от сложности сцены и производительности аппаратного и программного обеспечения. Современные реализации графических процессоров обещают от 1 до 10 миллионов выборок в секунду, что делает возможным сгенерировать относительно бесшумное изображение приемлемого качества в течение нескольких секунд или минут. Цифровой шум создаёт особую проблему для анимации, создавая, как правило, нежелательный эффект «зернистости» изображения.

Группа методов Metropolis light transport (англ.) слегка изменяют ранее оттрассированные успешные пути и производит более важные для изображения выборки первыми. Это может привести к снижению шумности изображения и снижению количества выборок.

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

Прочие настройки и возможности интерактивной трассировки

Существует ряд дополнительных настроек интерактивного трассировщика, которые находятся в диалоговом окне Preferences, на странице PCB Editor — Interactive Routing

Важно понимать роль этих настроек, чтобы получить максимальный полезный эффект от интерактивной трассировки

Restrict to 90/45 (Ограничение только 90/45)

Нажимая Shift+Пробел, вы переключаете доступные режимы прокладки углов, которые включают в себя возможности добавления трасс под произвольным углом и дуг. Если в этих режимах нет необходимости, включите параметр Restrict to 90/45, чтобы ограничить прокладку углов только 90 и 45 градусов.

Follow Mouse Trail (Следовать траектории курсора)

Если этот параметр включен, трассировка будет пытаться следовать траектории курсора мыши.

Automatically Terminate Routing (Автоматически прекращать трассировку)

Включите этот параметр, чтобы автоматически завершать трассировку текущей цепи, если была достигнута целевая контактная площадка. Если этот параметр отключен, используйте ПКМ или клавишу Esc, чтобы прекратить трассировку соединения (этот параметр включен по умолчанию).

Automatically Remove Loops (Автоматически удалять петли)

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

Чтобы повторно проложить трассу, просто создайте новую – когда новая трасса будет соединена со старой, будет образована петля, и Altium Designer автоматически удалит эту петлю, если включен соответствующий параметр.

Обратите внимание, что в некоторых случаях необходимо, чтобы определенные цепи создавали петли (несколько трасс к одной точке) – например, для цепей питания. Вы можете выборочно отключить удаление петель для таких цепей – для этого в панели PCB, в режиме Nets, дважды щелкните ЛКМ по названию цепи; будет открыто диалоговое окно Edit Net, где можно включить или отключить параметр Remove Loops для этой конкретной цепи

Routing Gloss Effort (Эффективность сглаживания трасс)

При перемещении курсора в процессе интерактивной трассировки, модуль трассировки ищет наиболее короткий путь от положения последнего щелчка до текущего положения курсора. Параметр Routing Gloss Effort определяет, насколько хорошо этот путь может быть сглажен и как может быть уменьшено количество изломов.
Текущая настройка параметра Routing Gloss Effort отображается в строке состояния. Используйте сочетание клавиш Ctrl+Shift+G для переключения между вариантами этой настройки

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

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

Look Ahead Behavior (Поведение в режиме упреждения)

  • В процессе интерактивной трассировки, прокладываемые трассы отображаются заштрихованными или контурными (пустыми). Заштрихованные сегменты будут проложены при следующем щелчке ЛКМ.
  • Целью контурных, или упредительных, сегментов является планирование наперёд, которое позволяет проектировщику определить, где будет проложен следующий сегмент, без необходимости его фиксации. В процессе трассировки вы можете включать и отключать режим Look Ahead с помощью клавиши 1.

Контурные, или упредительные, сегменты используются для планирования размещения последующих сегментов.
Нажмите клавишу 1 для включения и отключения режима Look Ahead.

Поиск цепи и управление цветом линий соединения

Главная страница:

Неразведенная плата может выглядеть пугающе – множество линий соединений, пересекающихся по всей плате. Хорошим подходом к трассировке является работа из схемы, где можно легко найти важные компоненты и цепи. Вы можете использовать перекрестное выделение компонентов и цепей прямо на схеме, чтобы подсвечивать их соответствующие объекты на плате. Чтобы узнать подробнее, перейдите на страницу Работа между схемой и платой.

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

Щелкните ПКМ по выбранным цепям в панели PCB, чтобы изменить цвет их линий соединения.

Описание

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

Такое поведение математически описано в уравнении рендеринга. Данное уравнение пытается решить алгоритмы трассировки пути.

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

Псевдокод, реализующий трассировку пути, может выглядеть следующим образом:

  Color TracePath(Ray r,depth) {
    if(depth == MaxDepth)
      return Black;  // bounced enough times
    
    r.FindNearestObject();
    if(r.hitSomething == false)
      return Black;  // nothing was hit
    
    Material m = r.thingHit->material;
    Color emittance = m.emittance;
    
    // pick a random direction from here and keep going
    Ray newRay;
    newRay.origin = r.pointWhereObjWasHit;
    newRay.direction = RandomUnitVectorInHemisphereOf(r.normalWhereObjWasHit);
    float cos_t = DotProduct(newRay.direction, r.normalWhereObjWasHit);
    
    Color BRDF = m.reflectancePI;
    float scale = 1.0*PI;
    Color reflected = TracePath(newRay,depth+1);
    
    // return emittance + ( BRDF * scale * cos_t * reflected );
    return emittance + ( BRDF * scale * reflected );
  }

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

Описание алгоритма

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

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

Работа алгоритма включает в себя три этапа: инициализацию, распространение волны и восстановление пути.

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

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

Соседние ячейки принято классифицировать двояко: в смысле окрестности Мура и окрестности фон Неймана, отличающийся тем, что в окрестности фон Неймана соседними ячейками считаются только 4 ячейки по вертикали и горизонтали, в окрестности Мура — все 8 ячеек, включая диагональные.

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

Восстановление кратчайшего пути происходит в обратном направлении: при выборе ячейки от финишной ячейки к стартовой на каждом шаге выбирается ячейка, имеющая атрибут расстояния от стартовой на единицу меньше текущей ячейки. Очевидно, что таким образом находится кратчайший путь между парой заданных ячеек. Трасс с минимальной числовой длиной пути, как при поиске пути в окрестностях Мура, так и фон Неймана может существовать несколько. Выбор окончательного пути в приложениях диктуется другими соображениями, находящимися вне этого алгоритма. Например, при трассировке печатных плат — минимумом линейной длины проложенного проводника.

Постановка задачи трассировки

Трассировка соединений является, как правило, заключительным этапом конструкторского проектирования радиоэлектронной аппаратуры (РЭА) и состоит в определении линий, соединяющих эквипотенциальные контакты элементов, и компонентов, составляющих проектируемое устройство.

Задача трассировки — одна из наиболее трудоёмких задач, возникающих при автоматизации проектирования РЭА. Сложность объясняется, в частности многообразием способов конструктивно-технологической реализации соединений, для каждого из которых при алгоритмическом решении задачи применяются специфические критерии оптимизации и ограничения. С математической точки зрения трассировка — задача выбора оптимального решения из огромного числа вариантов.

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

Основная задача трассировки формулируется следующим образом: по заданной схеме соединений проложить необходимые проводники на плоскости (плате, кристалле и т. д.), чтобы реализовать заданные технические соединения с учётом заранее заданных ограничений. Основными являются ограничения на ширину проводников и минимальные расстояния между ними.

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

F=∑i=1pλifi,{\displaystyle F=\sum _{i=1}^{p}\lambda _{i}f_{i},}

где:

  • F{\displaystyle F} — аддитивный критерий;
  • λi{\displaystyle \lambda _{i}} — весовой коэффициент;
  • fi{\displaystyle f_{i}} — частный критерий;
  • p{\displaystyle p} — число частных критериев.

Рендеринг с тенями

ClosestIntersection(O, D, t_min, t_max) {
    closest_t = inf
    closest_sphere = NULL
    for sphere in scene.Spheres {
        t1, t2 = IntersectRaySphere(O, D, sphere)
        if t1 in  and t1 < closest_t
            closest_t = t1
            closest_sphere = sphere
        if t2 in  and t2 < closest_t
            closest_t = t2
            closest_sphere = sphere
    }
    return closest_sphere, closest_t
}
TraceRay(O, D, t_min, t_max) {
    closest_sphere, closest_t = ClosestIntersection(O, D, t_min, t_max)

    if closest_sphere == NULL
        return BACKGROUND_COLOR

    P = O + closest_t*D  # Compute intersection
    N = P - closest_sphere.center  # Compute sphere normal at intersection
    N = N / length(N)
    return closest_sphere.color*ComputeLighting(P, N, -D, sphere.specular)
}
ComputeLighting(P, N, V, s) {
    i = 0.0
    for light in scene.Lights {
        if light.type == ambient {
            i += light.intensity
        } else {
            if light.type == point {
                L = light.position - P
                t_max = 1
            } else {
                L = light.direction
                t_max = inf
            }

            # Проверка тени
            shadow_sphere, shadow_t = ClosestIntersection(P, L, 0.001, t_max)
            if shadow_sphere != NULL
                continue

            # Диффузность
            n_dot_l = dot(N, L)
            if n_dot_l > 0
                i += light.intensity*n_dot_l/(length(N)*length(L))

            # Зеркальность
            if s != -1 {
                R = 2*N*dot(N, L) - L
                r_dot_v = dot(R, V)
                if r_dot_v > 0
                    i += light.intensity*pow(r_dot_v/(length(R)*length(V)), s)
            }
        }
    }
    return i
}

Исходный код и рабочее демо >>Теперь

Отладка программы

Удалите кавычки в строке «WriteLn (‘До свидания…’);». Мы допустили ошибку, строковая константа обязана быть заключена в одинарные кавычки. Попробуйте запустить программу после этого (клавиши «Ctrl + F9»). Компилятор выдаст ошибку:

Фраза «До свидания…» не была воспринята как строковая константа.

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

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

Закройте исходный код программы, с которым мы работали ранее и создайте новый файл. Наберите в нем следующую программу:

program Calc;uses CRT;const Year = 2006;var BY, Age Integer;begin  ClrScr;  Write (‘Год вашего рождения: ‘);  ReanLn (BY);  if BY < Year then  begin    Age := BY — Year;    WriteLn (‘Ваш возраст: ‘, Age);  end else WriteLn (‘Ошибка ввода!’);  ReadLn;end.

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

Введите год своего рождения. Программа вычислит возраст. Текущий год содержится в константе «Year», если он не соответствует сегодняшнему году, измените его соответствующим образом.

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

Для того, чтобы найти строку программы, в которой содержатся ошибочные инструкции, можно воспользоваться отладочным режимом TBP7.0.

Среда TBP7.0 позволяет просматривать значения переменных во время выполнения программы. Добавить новую переменную, значение которой нас интересует, можно в пункте меню «Добавить наблюдение…» меню «Отладка» или нажав клавиши «Ctrl + F7».

В нашей программе всего 2 переменные: «BY» и «Age». Добавьте их в список Наблюдений. Чтобы отобразить список Наблюдений на экране, необходимо выбрать пункт меню «Наблюдения» меню «Отладка».

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

Чтобы запустить программу в режиме трассировки, необходимо выбрать пункт меню «Войти в подпрограмму» меню «Пуск» или нажать клавишу «F7». После этого будет выполнен первый шаг программы, а в окне Наблюдений высветится текущее значение переменных. Для перехода к следующему шагу программы нужно нажать клавишу «F7» повторно.

Найдите ту строку программы, после выполнения которой в переменной «Age» появляется отрицательное значение. Именно эта строка и содержит ошибку в коде, в результате которой мы получаем неверный результат.

Исправьте найденную ошибку и добейтесь того, что бы программа выдавала правильные ответы.

Если во время пошагового выполнения требуется приостановить работы программы, то нужно выбрать пункт меню «Сбросить программу» меню «Пуск» или нажать клавиши «Ctrl + F2».

Пошаговое выполнение программы неудобно в том случае, если программа очень большая. Нужно сделать много шагов, прежде чем выполнение программы дойдет то нужной точки. В таком случае отладчик TBP7.0 позволяет устанавливать точки останова, начиная с которых программа перейдет в режим трассировки (т.е. пошагового исполнения).

Для добавления новой точки остановки необходимо переместить текстовый курсор в нужную строку программы, выбрать пункт меню «Добавить точку останова…» меню «Отладка» и нажать кнопку «OK». Строка, в которой установлена точка останова выделяется красным цветом.

Удалить установленные точки останова можно через пункт меню «Точки останова…» меню «Отладка».

После установки всех необходимых точек останова, программа запускается в обычном режиме (клавишами «Ctrl + F9»).

Как только выполнение программы доходит до точки останова, программа прерывается и переходит в режим пошагового исполнения. К следующему шагу можно перейти, нажав клавишу «F7». Также можно вывести окно Наблюдений для просмотра значений переменных.

Что бы перейти из режима трассировки в режим обычного исполнения программы, необходимо нажать клавиши «Ctrl + F9». Программа продолжит выполнения до момента встречи новой точки останова или до своего окончания.

страницы: 6

Arigato, 2008programmersforum.ru

Начало работы

После установки клиента EasyEDA на ПК в первую очередь необходимо зарегистрироваться в центре пользователя. В нем будут храниться наши проекты, а так же библиотеки компонентов и корпусов.

Стоит отметь такую интересную фишку, как команды. Они позволяют принимать участи в совместном проектировании и разработке ПП с другими пользователями EasyEDA. Здесь, вы сможете проявить себя не только как рядового разработчика, но и лидера проекта.

Сильно углубляться в интерфейс программы пока не имеет смысла, поэтому рассмотрим основные моменты на простом примере.

Создание схемы электрической принципиальной

Вернемся к начальному экрану и создадим новый проект: Документ→Новый→Проект (необходимо указать только название проекта). Для удобства настроим формат рабочего листа, используя модальное окно Инструменты рисования.

В качестве примера соберем преобразователь напряжения с 9 до 180 вольт, схема которого приведена ниже:

Схема электрическая преобразователя напряжения 9В-180В

Используя вкладку EELib, она находится левее рабочего поля, разместим базовые компоненты. Для поиска микросхемы МС34063, стабилизатора LM7805 и всех элементов отсутствующих во вкладке EELib, нам потребуются библиотеки.

Слева от рабочего поля выбираем вкладку Поиск библиотек. В появившемся окне вводим название искомого компонента. Затем из списка выбираем подходящий нам по УГО и типу корпуса. Так же в этом окне можно увидеть следствие интеграции с сервисом LCSC. Внизу окна есть быстрый доступ к покупке компонента, указана его цена, наличие на складе и приведен даташит.

После того как все необходимые компоненты расположены на рабочем поле, соединяем их с помощью «Провода», который находится в меню, с выпадающим списком, Соединения и приводим схему в подобающий вид. Результат приведен на изображении ниже.

Компоновка и трассировка

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

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

После компоновки, как правило, трассировка, и здесь мы максимально облегчим себе работу. На верхней панели во вкладке Разводка перейдем к Автотрассировщику. Далее не задавая никаких правил трассировки, кроме ширины дорожки 0,35 мм., жмем запустить. Ширина дорожки обусловлена тем, что при моей компоновке автотрассивщик просто не позволил установить шире.

mtr и mtr-gtk (консольная и графическая версия)

Программа mtr совмещает в себе функциональность программа traceroute и ping в едином инструменте диагностики сети. То есть эта программа показывает маршрут до указанного узла и непрерывно пингует каждые хоп и при этом собирает общую статистику потерь — на основе этих данных можно определить проблемный узел, на котором теряются пакеты.

Пример запуска:

mtr suip.biz

Пример вывода:

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

Также она поддерживает разные форматы вывода для сохранения результатов, например, опция -C, —csv для сохранения результатов в формате CSV (обратите внимание, что на самом в качестве разделителя используется не запятая, а точка с запятой), а также опция -j, —json для сохранения в формате вывода JSON.

С помощью опции -n, —no-dns можно отключить преобразование IP в имена хостов.

Опцией -b, —show-ips можно включить отображение и имён хостов, и IP адресов.

Опцией -y n, —ipinfo n можно настроить вывод дополнительной информации о каждом IP хопа. В качестве n нужно указать цифру, которая означает:

              0   Показывать номер автономной системы (AS) (эквивалент -z)
              1   Показывать префикс IP
              2   Показать код страны на основе AS
              3   Показать RIR (ripencc, arin, ...)
              4   Показать дату выделения IP префикса

У меня при любых значениях -y всегда показывается только номер автономной системы. К счастью, между различными видами можно переключаться по кругу используя кнопку y:

Опция -z, —aslookup отображает номер Автономной Системы (AS) для каждого хопа.

Опция -f NUM используется для установки номера первого TTL. По умолчанию равно 1.

Опция -m указывать максимальное число хопов (максимальное значение time-to-live) которое будет обрабатываться при трассировке. По умолчанию равно 30.

Опция -U ЧИСЛО устанавливает максимум незнакомых хостов. По умолчанию равно 5. Видимо, после достижения этого значения дальнейшая трассировка будет остановлена.

С помощью опции -u, —udp программа будет использовать датаграммы UDP вместо ICMP ECHO.

А опцией -T, —tcp можно установить использование TCP SYN пакетов вместо ICMP ECHO. PACKETSIZE игнорируется, поскольку SYN пакеты не могут содержать данные.

В mtr можно использовать даже SCTP протокол для трассировки, для этого укажите опцию -S, —sctp и будет задействованы пакеты Stream Control Transmission Protocol вместо ICMP ECHO.

Порты:

       -P ПОРТ, --port ПОРТ
              Номер целевого порта для TCP/SCTP/UDP трассировок.

       -L ЛОКАЛЬНЫЙ_ПОРТ, --localport ЛОКАЛЬНЫЙ_ПОРТ
              Номер исходного порта для UDP трассировок.

Во время работы программы доступны интерактивные команды. Если нажать на d, то можно переключаться между различными отображениями:

Кнопкой r можно сбросить статистику.

Кнопкой o можно поменять порядок полей. Кстати, опцией -o можно установить, какие поля вы хотите отображать и их последовательность. Подробности смотрите по:

man mtr

Поиск оптического кабеля

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

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

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации