Вот что у меня получилось:
1. код берем тут: 
https://code.launchpad.net/~xepecine/figaro/trunk
2. запускаем python figaro.py input 
3. gкод будет в input.ngc
4. теперь самое интересное как он работает...
Надо тестировать! Если влом все читать, внизу пример использования!
Feeders - фидеры
 Хранятся в файле который берется из figaro.ini. 
Формат файла: из файла берутся все описания фидеров которые выглядят так: 
Параметры фидеров
 Что должно быть внутри каждого фидера: 
Компонент, который хранится в фидере. 
Код: Выделить всё
# Feeder Parameters separated by any space
# \n\t can be used for multiline parameters
# Parameters =	x(x,y,z,a)	capacity
Parameters =	(10.0, 20.0, 30.0, 40.0)	40.0
# State =	cx(x,y,z,a)	remain
State      =		(10.0, 20.0, 30.0, 40.0)	4.0
Параметры, в строке могут разделяться любым пробелом. 
Parameters - x(x,y,z,a) начальное положение фидера, capacity емкость фидера.
State =	cx(x,y,z,a) - текущее положение фидера, remain - текущий остаток.
Дальше самое интересное - описание функций фидера
 Каждая функция описывается так: 
<тип функции>-function = <строка вызова функции> параметры разделенные \t
Пока есть два типа функций Next и Fill.
- В функции Next есть три основных типа: 
Фиксированный - fixed_tape, x_tape, y_tape - это функции next для фидера в виде ленты закрепленной на столе. (Как тут http://www.youtube.com/watch?v=-CqpbsTfVtM). Параметры для этих функций - для fixed_tape - сдвиг dx,dy, для остальных сдвиг по 1 оси.
Пример:
 
- С протяжкой - pull_tape (p1)  (p2), эта функция для описания филера который нужно протягивать. Параметры - две точки (x1,y1,z1,a1) (x2,y2,z2,a2) 
Пример: 
Код: Выделить всё
# Next-function = pull_tape	(x0,y0,z0,a0)	(x1,y1,z1, a0)
Next-function = pull_tape	(0,0,0,0)	(10,0,0,0)
 
- И еще одна функция на все случаи жизни - flat_gcode - просто чистый Gкод, который будет добавляться в выходной файл.
Пример:
Код: Выделить всё
# [Any]-function = flat_gcode [Any string with ∅ ='', &='&', &tab;, &newline; \n\t=&newline]
Next-function = flat_gcode	M03
	(можем все что захотим)
	(и даже это)
	(...)
 
По фидерам пока все.
Компоненты
 Компоненты также хранятся в отдельном файле. Синтаксис файла такой же. 
Параметры компонентов
 Comp-Ref = R - ссылка на ref компонента
Код: Выделить всё
# Pick-Place =	(x,y,z,a)	(x,y,z,a)
Pick-Place =	(0.0, 0.0, 0.0, 0.0)	(0.0, 0.0, 0.0, 0.0)
Две точки, которые добавляются к точке взятия компонента и точке постановки компонента. Может пригодиться, если нужно брать не за центр, или если берем из универсального фидера (О нем позже).
Функции компонентов
- Cluch-function = flat_gcode	M03
Функция фиксирования компонента. Пока тут есть только flat_gcode. 
- Release-function = flat_gcode	M03
Функция установки компонента. Пока тут есть только flat_gcode. 
- Adjust-function = flat_gcode	M03
Функция юстировки компонента. Пока тут есть только flat_gcode. 
Пример использования.
Пример использования
 Пробуем запустить python figaro.py input
..... 
Нужна реальная плата... 
.... 
В архиве есть примерные конфиги с 2 фидерами и 1 компонентом 
Что будет происходить после генерации Gкода - Компоненты R будут браться из фидера Plain1.
Все остальные компоненты будут браться из универсального фидера с Comp-ref=*, по мере опустошения фидеров на экран будет выводиться сообщение, поставьте в такой-то фидер такие-то компоненты. 
Что нужно сделать дополнительно.
 Надо указать 0 платы. Для этого едем в референсную точку платы и настравиаем в ней G55, т.е. делаем G10 L20 P2 X0 Y0 Z0 A0 . Все компоненты устанавливаются в G55.
Нужно задать #<z_safe> для безопасного перемещения. #<z_safe> указывается для G54!