Н33  

 

 История этого постпроцессора началась еще в 97-х годах прошлого столетия. В то время, я учился еще в универе, а на одном из предприятий решили купить и внедрить UniGraphics (в то время версии 13). Не знаю, кто и как, почему принимал решение, как проводился тендер. Но спустя много лет - думаю, без лапы, и подкупа не обошлось. Дело в том, что судя по изделиям и т.д и т.п - лучшем выбором для этого предприятия должна быть Catie. Но, обратное как говориться уже не воротишь.

    Ну так вот, в процессе внедрения модуля обработки - встал вопрос: как получить управляющие программы (УП) для станков в большинстве своем управляемых ЧПУ класса Н33 (Курс322, ПФСТ-1250, Луч-33, ..., Атака) - имеющие одинаковую математическую основу и разные аппаратные составляющие.

   Этой задачей занялась Маринина Наташа - очень умная девушка, сейчас уже мама двоих дочек, дай ей здоровья и ума, и всего хорошего. Почти всё, что ниже будет выложено, принадлежит Ей. Она создавала. Стояла у станка с часами. Испытывала и многое другое.
 Решение данной задачи состояло из нескольких проблем:

  1. внедрение UG изначально проводилось на станциях HP-UX (таких дорогих и тяжелых (>45 кг) - я ими с трудом ворочал, что даже спустя 7-и лет (в 2005г) -  их стоимость превышала 130 тыс руб., то-есть списать их не было ни какой возможности;

  2. необходимо было как то проводить кодирование подачи F стандартным образом для ЧПУ;

  3. самая главная проблема, заключалась в том, что создаваемые управляющие программы (после генератора UG, и кодирования подачи) на станке приводили к сбою системы и остановке станка или что хуже - оси станка начинали двигаться самопроизвольно, что приводило к порче изготовляемой детали и инструмента. Надо заметить, что данной проблемы не возникало в БПАПТ-е (на ЕС) или в Мастере. Проблема была в маленьких кадрах формируемых Югом, точность расчета составляла 0.00000000001, а вывод ЧПУ станка с дискретностью .01 знака!.

В 98 году Олег Чиж предоставил свой вариант постпроцессора для Н33:

 Для использования этого постпроцессора необходимо:

1. Создать операцию обработки в UG.
2. Сгенерируйте CLS файл.
3. В модуле Manufacturing, войдите в Tools-->CLSF...
4. Выберите CLS файл (который Вы сгенерировали в п.2).
5. В меню CLSF Manager выберите Postprocess.
6. В меню NC Postprocessing в поле MDF Name, выберите файл n33.mdfa.
7. Остальные опции этого меню можно оставить по умолчанию.
8. Нажмите клавишу Postprocess.

После этого Вы получаете .ptp файл (программу ЧПУ), в стандарте стойки Н33, за исключением того, что в этой программе, неправильно кодируются подачи.

Для перекодирования подач используется программа n33.exe.

Для ее запуска, в командной строке наберите: n33 <входной_файл> <выходной_файл>

Файл n33.c (вариант Чижа)    n33_v2.c (это я слегка подправил) - это исходные коды программы перекодирования подач. Для компиляции на HP-UX наберите: сс n33.c -o n33 -lm

  Вот еще нашел комплекс программ для создания УП УЧПУ Н33 (Атака) в AutoCad - разработка Иркутска:  Irkut_Kim_for_2000.zip (318 кб). Данный комплекс программ предназначался для машины КИМ и получения программ для плазменной резки. Очень интересный механизм подсчета времени выполнения и формирования торможения. Всё остальное стандартно.

 

Руководства по программированию:


Luch33.djvu ( сканированный )
 
 Н55-2 Инструкция по программированию (6M612Ф4,6М616Ф4).
H33 Инструкция по программированию (не очень удачный вариант и не полный).
"ЧПУ Н33. Паспорт, Техническое описание, Инструкция по эксплуатации, Инструкция по программированию"
 - Вы сможете найти на сайте http://stanoks.com
 

Таблица кодировки вращения шпинделя одного из станков : 

 

 Результат её труда,  состоял из целого комплекса программ:

Unix\Motif (1998-2003 гг.)

 
  Назвали постпроцессор немудрено: NEW_GPM - так он и начал свою жизнь.
Для использования этого постпроцессора необходимо:

1. Создать операцию обработки в UG.
2. Сгенерируйте CLS файл.
3. В модуле Manufacturing, войдите в Tools-->CLSF...
4. Выберите CLS файл (который Вы сгенерировали в п.2).
5. В меню CLSF Manager выберите Postprocess.
6. В меню NC Postprocessing в поле MDF Name, выберите файл станка alpha.mdfa или fp17smn.mdfa или ma655a2.mdfa.
7. В меню Postprocessor вместо gpm выбрать new_gpm.

new_gpm13.c    new_gpm14.c    new_gpm17.c  new_gpm18.c   new_gpm19.c

8. Остальные опции этого меню можно оставить по умолчанию.
9. Нажмите кнопку Postprocess.

После этого Вы получаете .up файл (программу ЧПУ) в стандарте стойки Н33.

Процесс работы состоял в том, что new_gpm запускал gpm+mdf(a), а после, полученную управляющую программу передавал на вход других программ:
   ptp_to_up,    razbivka,    time_cnt.

Исходники вспомогательных программ лежали в свободном доступе и состояли из следующих элементов:

  • - Для кодирования скоростей (ptp_t_up.exe), формирование кадров разгона-торможения:    ptp_t_up.c  ptp_t_up98.c

  • - Эта программа разбивает ленту (управляющую программу УП), длина которой превышает LEN_LIMIT (задается в байтах), на части:   razbivka.c   razbivka98.c

  • - расчета времени обработки управляющей программы на станке (time_cnt.exe):  time_cnt.c

  • - сглаживания PTP-программ (up_to_up.exe):   up_to_up.c  up_to_up98.c

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

   Я понял, что дальнейшим развитием постпроцессоров в Unigraphics будет дальнейшее развитие MOM. Более того, пользоваться сим созданием было крайне не удобно. Необходимо было переделать этот постпроцессор под Tcl. Но. Я столкнулся с 2-мя ограничениями, а именно, постпроцессор должен был в один - в один совпадать с рабочим. Вы спросите: "Почему?". Вы знаете - я был молодым специалистом, мне никто не помогал, не давал советов, я был не нужен и поэтому "варился" в собственном соку. Мне казалось, что развитие бюро, в котором я работал - шло не в том направлении. Поэтому я начал работу на свой страх и риск. Еще одним препятствием были старые опытные технологи. Они составляли основной костяк в работе отдела. Наизусть знали G-код и замечали малейшее изменение в УП, так как обычно просматривали их вручную. Задав себе целью постепенно перевести разработку всех постпроцессоров под PB (PostBuilder) - я изменил "шапку" УП одного постпроцессора, через 30 минут старый технолог пошел к зам. нач. отдела, чтобы выяснить причину изменения, еще через 15 минут - эта делегация стояла перед моим глазами. Можете представить мое состояние - "не стояния".


На досуге - я перевел программы ВЫШЕ на tcl\tk:
а также дополнил программой проверки формата для Н33 :
checkH33.tcl checkH33w.tcl

ptp_to_up.ui.tcl - кодирование подачи УП, формирование разгона-торможения, подсчет контрольных сумм,.. ( ptp_to_up_with_dialog.tcl )
time_cnt.ui.tcl - расчет времени выполнения УП, на основе файла и ускорения
Windows (2002-2003 гг.)  
  в 2002 году Наташа переделала свои программы под Windows. Объединив все 4-е программы в одной. Она сделала это в CBuilder :
 new_gpm_13_11_03.zip (исходные коды были получены без её ведома, выдал её начальник для исправления некоторых ошибок моему начальнику).

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

  •  Сначала я уточнил расчет касательных углов окружностей (у меня он вызвал сомнение - что и подтвердилось ): Raschet_tangen.mcd  - и заменил функцию расчета углов tangent на tangentn.
  •  Затем я попытался изменить числовой тип float на double - но потерпел фиаско. (Расчеты подачи F стали проводиться с ошибками). Разбираться было лень - это было не критично, хотя сообщения при компиляции раздражали.
  • немного избавил от наследия Unix ( именно: передача параметров через файл - была заменена на передачу через скрытый элемент формы), провел разукрашку форм, объединил вывод контрольной суммы и времени выполнения УП
  • добавил простое формирование УП - без учета торможения-разгона.
  • по нужде добавил возможность нумерации УП до 30000 кадров, вместо 999 - по стандарту.
  • исправил расчет углов между кадрами (cos=0)
  • пришлось изменить конструктора и деструкторы - выявилось ряд ошибок.
  • научить программу различать UG18 и UG NX  - так и не смог. Это было необходимо, так как произошло изменение синтаксиса команд запуска gpm.exe c Unix  -t: на -t=  для  Win.
    Для запуск
    а GPM на UNIX или Windows NT, минимальная команда: gpm -MDF=name.MDFA (or .MDF) -CLF=name.CLS (.CLF or .ISO)
  • сделал попытку подключить в CBuilder библиотеку UG\UGOpen:
     
    так как libufun.lib - изначально были подготовлены для формата Microsoft, то пришлось подготовить libufun.lib из libufun.dll через .\CBuilder\Bin\implib.exe.
    Но появилось 2 НО!
    1 - при смене использования версии Юниграфикса (скажем с 18 на 19(NX) и т.д.), приходилось заново формировать libufun.lib из libufun.dll.
    2 - запуск программы, подготовленной таким образом (то-есть с подключением UGOPEN+CBuilder) - происходит ОЧЕНЬ ДОЛГО!!!! минут 10-20!!! зависит от мощности Вашего компьютера.
     - пришлось отказаться от этого метода.

 

В итоге получилось вот это -  new_gpm.zip (2.9 мб)
последнее изменение: январь 2005 года.


Вообще, мне надоело запускать ptp_t_up.exe и time_cnt.exe из командной строки и я сделал быстренький проект на CBuilder:


Исходник: CorrectFeedH33.zip (программа 2003 года):

 Делать мне было нечего, и в раздумьях как и что мне сделать, я создал 2 класса :):) (вот - делать мне было нечего:):)).

  Class_Ptp_to_up.zip     Class_Time_cnt.zip
class Ptp_to_up 
{
public:
Ptp_to_up();
virtual ~Ptp_to_up();

int SPEED_LIMIT; /* Максимально допустимая подача при полном реверсе
(мм/мин)*/
int FEED_MAX; /* Максимально допустимая подача холостого хода (мм/мин)*/
int a; /* Ускорение (мм в сек*сек) */
int acenter; /* Центростремительное ускорение */
int PLANE; /* Плоскость круговой интерполяции */
int G; /* G=2 - круговая интерполяция по часовой стрелке; G=3 -
круговая интерполяция против часовой стрелки */
int flag;
char UP_file[100];
struct post { 
char kadr[80]; /* кадр */
int feed; /* подача */
double span; /* перемещение */
}P[20];

int i; /* Индекс для массива структур P */
int k; /* Счетчик кадров */
int f; /* Подача текущего кадра curr */
int mode; /* Флаг */
double SUMX,SUMY,SUMZ;
char s_curr[200],*curr,s_next[200],*next;
FILE *input,*out;
int read_word(char *, char, char *);
void replace_word(char *,char,char *);
void feed_convert(int,int,char *);
void feed_del(char *kadr);
void analiz(char *curr,char *next) ;
int otkat(int j);
void tangent(double ,double ,double *,double *);
int main_Ptp_to_up(void);

private :

protected:
FILE *log_file; // указатель на лог-файл
int flError,SUMErr; // код ошибки, их количество
char strFileLog; // имя лог-файла
int issueError (int ecode, char *format, ... ) ; //Error
time_t t1; //Time
double system_tolerance; //..системный допуск

};
class Time_cnt 
{
public:
Time_cnt();
virtual ~Time_cnt();

double a; /* ГбЪЮаХЭШХ (ЬЬ Т бХЪ*бХЪ) */
struct post { 
int feed; /* ЯЮФРзР */
double span; /* ЯХаХЬХйХЭШХ */
}P[3];
int i; /* ёЭФХЪб ФЫп ЬРббШТР бвагЪвга P */
int f; /* їЮФРзР вХЪгйХУЮ ЪРФаР */
char s_prev[200],*prev,s_curr[200],*curr,s_next[200],*next;
FILE *inp;
double TIME;
int F4; /* їаШЧЭРЪ аХЦШЬР вЮаЬЮЦХЭШп */

int read_word (char *, char, char *);
int feed_convert1(int ff);
void push(char *kadr);
double analiz(void) ;

int main_Time_cnt(void);

private :

protected:
FILE *log_file; // указатель на лог-файл
int flError,SUMErr; // код ошибки, их количество
char strFileLog; // имя лог-файла
time_t t1; //Time
double system_tolerance; //..системный допуск

int issueError (int ecode, char *format, ... ) ; //Error

};
 

H33title_windows.zip - также в раздумьях, создал окна постпроцессора для диалога: выбора станка и параметров на Tcl\Tk.

Программа для построения диаграмм подач (Tcl/Tk) - из разряда простейшие :):)

Историей создания преследовало 2-е цели, с одной стороны графически увидеть подачи в управляющей программе ЧПУ Н33 для исследования динамики, с другой стороны чисто образовательные цели (более глубокое освоение Tk).
 Исходники:
diagFeed_TCL.zip

Повторяю, делать было нечего - я думал :)):) : поэтому создал несколько простейших шаблонов для буферизации данных на Tcl : readFileBuf_TCL_BC.zip


Постпроцессор для Н33.

  Вся моя работа шла на общественных началах, без приказа свыше.
   В итоге, после долгих компромиссов, поисков, я создал постпроцессор, который считал более экспериментальным, чем рабочим. Но он стал рабочим, к сожалению:(.
 Создал я его на основе собственно исходников Наташи Марининой, дополнил алгоритмами от Геммы, Катрана, и хотел создать свой постпроцессор на основе старого алгоритма ЛКИ - обязательно только на
Tcl. Но доделать не успел:(, не дали.

  Скриншоты:



 Исходники: H33.zip 
   - пускай Вас не смущает английская буква H в названии. Просто когда выбирал название - буква N как то выглядела не по-русски :):):)

   Вообще то, по-хорошему, следовало отказаться от диалога выбора. Практика подтвердила, что технологу глубоко пофиг на это окно, он не изменяет параметры, а только выбирает станок.
  Необходимо было сделать так:

###############################################################################
  ФП-9 (Н33),${UGII_CAM_POST_DIR}H33\fp9.tcl,${UGII_CAM_POST_DIR}H33\H33.def   ФП-17 (Н33),${UGII_CAM_POST_DIR}H33\fp17.tcl,${UGII_CAM_POST_DIR}H33\H33.def
  6КМНЦ (Н33),${UGII_CAM_POST_DIR}H33\6kmn.tcl,${UGII_CAM_POST_DIR}H33\H33.def

  но, никто отмашку не давал. Я лишь пожал плечами, потому - что уже получал по голове - за своевольную перестановку и переименование постпроцессоров в основном списке. :)

Расчет к интерполятору ЛКИ



Этот "постпроцессор", ни раз и ни два, пытались "изнасиловать"..... Насилуют до сих пор.. :)

В 2008 году моя "тупая" (простите за слово) начальница потребовала от меня сделать в постпроцессоре деление программы (файла) на несколько частей.
 Сразу возникли сложности,
  во-первых, формирование подач и режимов торможения производилось уже после окончания вывода файла. Поэтому производить деление по времени не представлялось возможным ( разные части имели разное время выполнения, было необходимо применять иной метод -  на это было необходимо время ( а не 3-и дня ! ). Приступил к реализации, но не доделав ушел в отпуск. В отпуске огрехи выползли, на меня спустили всех собак и дружно облаяли. Но когда я вышел из отпуска - мне об этом никто и ничего не сказал. А вообще, при разборе ситуации оказалось, что я+постпроцессор вообще не причем.
  во-вторых, заданный (требуемый от меня) алгоритм деления поверг меня в "странное" состояние. Судите сами:

Чтобы Вы поняли до конца: вот примерно какая ситуация могла возникнуть в металле

  Откуда постпроцессор знает где металл?? где кончается?? где начинается деталь??? 
   На все мои доводы никто не обращал никого внимания. Я специально пустил все на самотек. Хорошо технологи, вовремя начали думать головой. И сами стали делить операции.
  Тоже самое задание, дали выполнять еще другому человеку - это свидетельствовало о недоверии ко мне.


Copyright © 2001—2009 че