//Эта страница доступна также на следующих языках://
[[faq-gnetlist|English]], [[faq-gnetlist.fr|Français]].

====== gnetlist ======





====== Создание перечня элементов (BOM) ======
Для **gnetlist** есть пять разных драйверов экспорта перечня элементов. Они
вызываются с помощью ключа ''-g'', при этом ключом ''-o'' необходимо задать
имя выходного файла:
<code>
gnetlist -g partslist3 -o output.bom schematic.sch
</code>

**gnetlist** спускается в листы подсхем и перечисляет их содержимое вместе с
компонентами из основного документа.

Для драйверов **bom** и **bom2** должен быть доступен на чтение локальный
файл //''attribs''//. В этом файле в виде отдельных строк должны содержаться
имена атрибутов, которые должны быть приведены в перечне. Например:
<code>
value
footprint
description
</code>

Драйверы по-разному перечисляют и сортируют компоненты в текстовом файле.
Выберите тот, который вам больше нравится:

=== bom ===
Драйверу **bom** нужен файл //''attribs''// (см. выше). В перечне,
произведённом с помощью **''-g bom''**, будет содержаться столько строк,
сколько имеется компонентов. Столбцы разделяются знаками табуляции. Строки
не сортируются.

=== bom2 ===
Драйверу **bom2** также нужен файл //''attribs''//. С помощью **''-g
bom2''** одинаковые позиционные обозначения компонентов будут собраны в одну
строку.  Столбцы разделяются двоеточиями. Несколько элементов в одном и том
же столбце разделяются запятыми.

=== partslist1 ===
Перечень, производимый драйвером **partlist1**, содержит строки для каждого
компонента. Строки сортируются в алфавитном порядке по позиционному
обозначению (''refdes''). Используются столбцы ''refdes'', ''device'',
''value'', ''footprint'' и ''quantity''. Так как каждая строка содержит
только один компонент, количество (''quantity'') всегда равно ''1''.

=== partslist2 ===
Данный драйвер производит вывод, подобный выводу **partslist1**. Строки
сортируются по значению атрибута ''device''.

=== partslist3 ===
Драйвер **partslist3** собирает все компоненты с одинаковым значением в одну
строку, очень похоже на **bom2**. Строки сортируются по атрибутам ''value''
и ''device''.  Четвёртый столбец сообщает количество компонентов в строке.
Столбцы разделяются знаками табуляции, элементы --- пробелами.

====== Проверка соответствия проектным нормам (DRC) ======
===== Как мне проверить свои схемы? =====
Можно проверять схемы с помощью драйвера **drc2** для **gnetlist**. Он
проверит схемы на предмет самых общих ошибок, таких как одинаковые
обозначения, неподключенные выводы, неиспользуемые [[geda:glossary.ru#Секция
компонента|секции многосекционных компонентов]] и прочее.

Запустите драйвер **drc2** следующей командой:
<code>gnetlist -g drc2 -o MyDesign.drc MyDesign.sch</code>

Вывод DRC ([[geda:glossary.ru#Проверка соответствия проектным
нормам|проверки на соответствие проектным нормам]]) записывается этой
командой в файл //''MyDesign.drc''//. Этот файл можно затем открыть в
текстовом редакторе и посмотреть предупреждения и ошибки DRC.

===== Как увидеть вывод DRC на экране, без записи в файл? =====
Запустите драйвер **drc2** следующей командой:
<code>gnetlist -g drc2 -o - MyDesign.sch</code>

Вы увидите вывод DRC непосредственно на экране.

===== Я хочу запретить некоторые из проверок DRC для схем. Как это сделать? =====
Драйвер **drc2** очень гибко настраивается. Вам нужно записать в файл
несколько специальных команд и вызвать **gnetlist** с ключом ''-l'', задав
после него имя этого файла.

Наиболее общие команды:
  * (define dont-check-non-numbered-parts 1) ;; Запретить проверку на ненумерованные компоненты
  * (define dont-check-duplicated-references 1) ;; Запретить проверку на одинаковые обозначения
  * (define dont-check-one-connection-nets 1) ;; Запретить проверку на соединения с одним единственным подключением
  * (define dont-check-pintypes-of-nets 1) ;; Запретить проверку типа выводов
  * (define dont-check-not-driven-nets 1) ;; Запретить проверку на соединения, не имеющие питающих подключений((Питающими подключениями могут быть выводы питания, выходы и т. п. При данной проверке, например, недопустимыми окажутся соединения, подключенные только ко входным выводам. --- //Прим. перев.//))
  * (define dont-check-unconnected-pins 1) ;; Запретить проверку на неподключенные выводы
  * (define dont-check-duplicated-slots 1) ;; Запретить проверку на дублирование секций многосекционных компонентов
  * (define dont-check-unused-slots 1) ;; Запретить проверку на неиспользуемые секции многосекционных компонентов
  * (define dont-check-slots 1) ;; Запретить проверку на количество секций многосекционных компонентов
  * (define action-unused-slots #\w) ;; Вывести сообщение о неиспользуемых секциях многосекционных компонентов как предупреждение
  * (define action-unused-slots #\e) ;; Вывести сообщение о неиспользуемых секциях многосекционных компонентов как ошибку
  * (define action-unused-slots #\c) ;; Считать нормой наличие неиспользуемых секций многосекционных компонентов
  * (define case_insensitive 1) ;; Все проверки производить без учёта регистра символов

Есть и несколько других продвинутых команд для изменения матрицы DRC и типов
выводов, которые можно считать питающими подключениями. Посмотрите файл
драйвера //''gnet-drc2.scm''// в текстовом редакторе. Там, в начале, есть
документация.

Скопируйте нужное вам из вышеуказанных строк в файл (например,
//''drc_rules.txt''//), причём каждая команда должна записываться отдельной
строкой, и запустите проверку:
<code>gnetlist -g drc2 -l drc_rules.txt -o MyDesign.drc MyDesign.sch</code>

Вывод DRC ([[geda:glossary.ru#Проверка соответствия проектным
нормам|проверки на соответствие проектным нормам]]) записывается этой
командой в файл //''MyDesign.drc''//. Этот файл можно затем открыть в
текстовом редакторе и посмотреть предупреждения и ошибки DRC.

===== Можно ли включить проверку соответствия проектным нормам в Makefile и при нахождении ошибок или предупреждений останавливать обработку? =====
Да. Драйвер **drc2** возвратит код ошибки, если есть ошибки или
предупреждения, поэтому можно добавить в свой //''Makefile''// следующее:
<code>$(objects).drc : $(objects).sch
          gnetlist -g drc2 $(objects).sch -o $(objects).drc</code>

Если вы собираетесь моделировать работу своей схемы, в Makefile можно
добавить следующее:
<code>$(objects).cir : $(objects).sch $(objects).drc
          grep -v ERROR $(objects).drc >/dev/null 2>&1
          gnetlist -g spice-sdb $(objects).sch  -o $(objects).cir</code>

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

===== Некоторые предупреждения, выдаваемые для моего проекта, мне уже известны. Можно ли сделать так, чтобы они не учитывались в возвращаемом значении? =====
Используйте ключ ''-O ignore-warnings-in-return-value'':
<code>gnetlist -g drc2 -o - MyDesign.sch -O ignore-warnings-in-return-value</code>

Будьте осторожны с этим! Вы вообще никаких предупреждений не увидите!
====== Проблемы сборки и работы gnetlist ======

===== При работе gnetlist я получаю ошибку "parenthesis mismatch" (несоответствие скобок). Что происходит? =====

Начиная с **Fedora Core 6** и **SuSE 10.2**, многие пользователи сообщали об
ошибке, выглядящей подобным образом:

<code>
$gnetlist -g spice-sdb -o TwoStageAmp.cir TwoStageAmp.sch
Command line passed = gnetlist -g spice-sdb -o TwoStageAmp.cir TwoStageAmp.sch
gEDA/gnetlist version 20061020
gEDA/gnetlist comes with ABSOLUTELY NO WARRANTY; see COPYING for more details.
This is free software, and you are welcome to redistribute it under certain
conditions; please see the COPYING file for more details.

Remember to check that your schematic has no errors using the drc2 backend.
You can do it running 'gnetlist -g drc2 your_schematic.sch -o
drc_output.txt' and seeing the contents of the file drc_output.txt.

Loading schematic [/home/nano/TwoStageAmp/TwoStageAmp.sch]
Probably parenthesis mismatch in /usr/share/gEDA/scheme/gnet-spice-sdb.scm
Most recently read form: (#@begin #<unspecified>)
ERROR: Unbound variable: spice-sdb
</code>

Эта проблема обнаруживается для нескольких драйверов **gnetlist**, включая
**spice-sdb** и **drc2**.

Это программная ошибка в **guile-1.8.X**. Разработчики gEDA работают над
исправлением. Пока попробуйте откатить **guile** к версии 1.6.7, которая,
как известно, работает с gEDA безупречно.

===== Драйвер gnetlist bom не работает. В чём дело? =====
Если при запуске **gnetlist** следующим образом
<code>gnetlist -g bom filename.sch</code>

выводится сообщение об ошибке
<code>Loading schematic [filename.sch]
ERROR: In procedure open-file:
ERROR: No such file or directory: "attribs"</code>

то вам нужно создать файл //''attribs''// в текущем каталоге, содержащий
атрибуты, которые вы хотите увидеть в bom-файле. Вот пример такого файла:
<code>device
value</code>

Информацию по созданию BOM смотрите [[#Создание перечня элементов (BOM)|
выше]].

===== Некоторые драйверы gnetlist приводят к переполнению стека. Как это исправить? =====
Если при обработке определённой схемы большого размера некоторыми драйверами
вы получаете такое сообщение об ошибке
<code>ERROR: Stack overflow</code>

добавьте следующее в файл //''~/.gEDA/gnetlistrc''// или локальный
//''gnetlistrc''// (в текущем рабочем каталоге):
<code>(debug-options (list 'stack 200000))
(eval-options (list 'stack 200000))</code>

Если так не заработает, отредактируйте соответствующий драйвер (обычно с
названием //''gnet-имя_драйвера.scm''//) и добавьте вышеуказанные строки в
начало данного файла. Драйверы **gnetlist** можно найти в каталоге
//''${prefix}/share/gEDA/scheme''//. Также отправьте электронное письмо в
рассылку //geda-user//, чтобы напомнить разработчикам исправить
это. Запомните, прежде чем писать в //geda-user//, вам нужно подписаться на
этот список рассылки.

===== gnetlist создал список соединений с дублированными выводами!? =====
Было по крайней мере одно сообщение о следующей ошибке, выдаваемой **pcb**
после загрузки списка соединений, созданного с помощью **gnetlist**:
<code>28: Error! Element R117 pin 2 appears multiple times in the netlist file.
29: Error! Element C167 pin 2 appears multiple times in the netlist file.</code>

Что здесь произошло? **gnetlist** (а в самом деле **libgeda**) создал два
соединения вместо одного. Это происходит, когда вывод присоединяется в точке
пересечения двух соединений. Заметьте, что пересекающиеся соединения не
подключены друг к другу. Это демонстрирует следующая схема:

{{:geda:ambiguous1.ru.png}}

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

{{:geda:ambiguous1_fixed.ru.png}}
