Язык программирования tcl post builder

Язык программирования tcl post builder

История PostBuilder началась в 16-ой версии Unigraphics, именно в ней появились его первая реализация в исходных кода на Tcl/Tk. Но уже в обновлении Unigraphics 16.3.3 — создатели расчухались и вдруг не с того, и сего, закрыли исходники. Просто зашифровав их. При запуске функция . _decrypt ( или иная другая по названию) — расшифровывает функции в память, поэтому при запуске PostBuilder -а — компьютер ‘ вставал ‘ , и продолжает ‘ вставать ‘ , колом, если у него не хватало оперативной памяти.

Сначала, Все новички, используют PB, не поняв его — начинают вручную править и создавать ПП, но потом, после приобретения определенного опыта, поняв принципы и устои Юга, начинают пользоваться PB в полную силу.

Изначально, да и сейчас, структура работы PB не отличалась оригинальностью от обычной схемы работы оболочек Gui Unix\Linux .
Есть файл проекта — *. pui на его основе компилятор/сборщик формирует несколько файлов , в данном случает *. tcl , *.def. Взаимосвязь между ними довольна призрачна.

Я подразумеваю, что человек, читающий Это. Может запустить ПостБилдер. Может создать Адрес, Блок, Вспомогательную команду. Может редактировать. При создании постпроцессора в Постбилдере, он первым делом начинает редактировать описание адреса G_cutcom , убирая ненавистные уже +-999999999.9999. Ругаясь и чертыхаясь.

Порядок Адресов в кадре

Глубоко вникнуть в состав pui — файла меня вынудило несколько случаев. Один из них был просто дурацкий: мне нужно было получить такой порядок адресов в кадре : G90 G41. Используя PB , получалось только так: G41 G90 .

Читайте также:  Откуда появились языки программирования

Я много раз пытался сделать это — не выходило. Создавать свой адрес, когда был такой же в наличие (по функционалу), было как то глупо. Ругнулся и открыл pui -файл . Внимательно изучив содержимое, я обнаружил описание и порядок адресов, решил их переставить . и у меня получилось :):):)
Точно так же, мне удалось решить и проблему адресов еще для одного постпроцессора, и получить требуемое: M 3 S .

## MASTER SEQUENCE START G_cutcom "$mom_sys_cutcom_code(OFF)" 0 "Cutcom G-Code" 0 G_plane "$mom_sys_cutcom_plane_code($mom_cutcom_plane)" 0 "Plane G-Code" 0 G_adjust "$mom_sys_adjust_code" 0 "Tool Length Adjust G-Code" 0 G_feed "$mom_sys_feed_rate_mode_code($feed_mode)" 0 "Feedrate Mode G-Code" 0 G_spin "$mom_sys_spindle_mode_code($mom_spindle_status)" 0 "Spindle Output Mode G-Code" 0 G_return "$mom_sys_cycle_ret_code(MANUAL)" 0 "Return Plane for Canned Cycles" 0 G_motion "$mom_sys_linear_code" 0 "Motion G-Code" 0 G_cycle "$mom_usd_add_var" 0 "(G_cycle)" 1 G_mode "$mom_sys_output_code($mom_output_mode)" 0 "Positioning Mode G-code" 0 G "$mom_sys_blank_code" 0 "Other G-Codes" 0 X "$mom_sys_blank_code" 0 "X Axis Position or Canned Cycle X Axis Position" 0 Y "$mom_sys_blank_code" 0 "Y Axis Position or Canned Cycle Y Axis Position" 0 Z "$mom_sys_blank_code" 0 "Z Axis Position or Canned Cycle Z Axis Position" 0 fourth_axis "$mom_sys_blank_code" 0 "4th Axis Position" 0 fifth_axis "$mom_sys_blank_code" 0 "5th Axis Position" 0 I "$mom_sys_blank_code" 0 "X Axis Position of the Circle Center" 0 J "$mom_sys_blank_code" 0 "Y Axis Position of the Circle Center" 0 K "$mom_sys_blank_code" 0 "Z Axis Position of the Circle Center" 0 . F "$mom_sys_blank_code" 0 "Feedrate" 0 S "$mom_sys_blank_code" 0 "Spindle Speed" 0 . M_spindle "$mom_sys_spindle_direction_code($mom_spindle_direction)" 0 "Spindle Direction M-Code" 0 . N "" 0 "Sequence Number" 0 . Text "" 0 "Text String" 0 ## MASTER SEQUENCE END
## MASTE SEQUENCE START G_mode "$mom_sys_output_code($mom_output_mode)" 0 "Positioning Mode G-code" 0 G_cutcom "$mom_sys_cutcom_code(OFF)" 0 "Cutcom G-Code" 0 G_plane "$mom_sys_cutcom_plane_code($mom_cutcom_plane)" 0 "Plane G-Code" 0 G_adjust "$mom_sys_adjust_code" 0 "Tool Length Adjust G-Code" 0 G_feed "$mom_sys_feed_rate_mode_code($feed_mode)" 0 "Feedrate Mode G-Code" 0 G_spin "$mom_sys_spindle_mode_code($mom_spindle_status)" 0 "Spindle Output Mode G-Code" 0 G_return "$mom_sys_cycle_ret_code(MANUAL)" 0 "Return Plane for Canned Cycles" 0 G_motion "$mom_sys_linear_code" 0 "Motion G-Code" 0 G_cycle "$mom_usd_add_var" 0 "(G_cycle)" 1 G "$mom_sys_blank_code" 0 "Other G-Codes" 0 X "$mom_sys_blank_code" 0 "X Axis Position or Canned Cycle X Axis Position" 0 Y "$mom_sys_blank_code" 0 "Y Axis Position or Canned Cycle Y Axis Position" 0 Z "$mom_sys_blank_code" 0 "Z Axis Position or Canned Cycle Z Axis Position" 0 fourth_axis "$mom_sys_blank_code" 0 "4th Axis Position" 0 fifth_axis "$mom_sys_blank_code" 0 "5th Axis Position" 0 I "$mom_sys_blank_code" 0 "X Axis Position of the Circle Center" 0 J "$mom_sys_blank_code" 0 "Y Axis Position of the Circle Center" 0 K "$mom_sys_blank_code" 0 "Z Axis Position of the Circle Center" 0 . F "$mom_sys_blank_code" 0 "Feedrate" 0 M_spindle "$mom_sys_spindle_direction_code($mom_spindle_direction)" 0 "Spindle Direction M-Code" 0 S "$mom_sys_blank_code" 0 "Spindle Speed" 0 . N "" 0 "Sequence Number" 0 Text "" 0 "Text String" 0 ## MASTER SEQUENCE END

Вывод: порядок Адресов в кадре — задается в pui. И его нужно при необходимости менять.
Исключение: Вывод адреса N .

Читайте также:  Css язык программирования примеры

Добавление MOM-команд, функций в структуру pui (tcl, def).

1. Меня всегда интересовало, почему в PB так неудобно и не понятно работает с Nurbs и H elix — интерполяцией. В принципе, она была обычным видом движения. Но реализация через uplevel < >— раздражала.
В pui— файле за это отвечает следующая часть:

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

#Motions Start          <>  <> #Motions End

После открытия модифицированного Pui в PB получим следующую картинку, и более того , в tcl — файле будут образованы следующие команды, которые мы можем редактировать и наполнять прямо из PB :

#========================================== proc MOM_nurbs_move < > < #========================================== >#========================================== proc MOM_helix_move < >

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

##Tool Path Start #Control Functions Start <>  <>  <>              <>  <>  <>                 <>                        #Control Functions End

2. Используя выше приведенную методику. Теперь вы можете, добавлять в меню PB нужные Вам функции. И не только, начинающееся на знакомое PB_CMD_*.
Ограничение, я думаю одно — процедура не должна содержать аргументы.
Если, Вы, хотите добавить свою собственную процедуру, то предварительно, опишите её в tcl — файле, дополните pui , а уж , затем открывайте Ваш проект в PB.

Источник

Язык программирования tcl post builder

Разработчики UniGraphiCS — однажды приняли простое гениальное решение: они решили внедрить в прослойку между решателем (ядром Parasolid ) и пользователем своеобразную программную среду. В качестве одной из такой оболочки они выбрали Tcl\Tk. Надо признать, что в 1987 году Джон Оустерхаут разрабатывал Tcl как интерфейс, для программного обеспечения CAD проектов PCB и IC. Tcl стал очень популярным в этой области, которое в те времена называлось «ECAD» (Electronics CAD) или EDA (Electronic Design Automation).

Не побоюсь написать, но огромное количество языков поздней заделки многое почерпнули и взяли от него. Tcl — был создан в 1988 году , а появление Perl, Python, можно отнести к середине 90 гг. Это простой скриптовый язык, предназначенный для обработки строк, а библиотеки Tk — стали непременным атрибутом Perl, Python и многих других.
Разработчики в ? 97-98 гг. ? приобрели лицензию у Scriptics Corporation на коммерческое использование Tcl\Tk .

Немного о Tcl.

Ниже я выложил файлы презентация от самого John Ousterhout. Сами файлы были сделаны в старом формате . ppt , поэтому наотрез отказались открываться в MS Office 2003 и 2007 . Для того чтобы привести их читабельному виду, пришлось установить любимый мой Office XP , и сохранить в нужном формате. К сожалению, у меня только 4 файла, вместо обещанных 5-и.

This directory contains course materials for a one-day Tcl/Tk short course that John Ousterhout has given over the last few years. The course consists of five talks:

Unigraphics

UniGraphiCS имеет 2 — типа постпроцессоров.
Graphics Postprocessor Module (GPM) — на основе связки gpm (собственно постпроцессор) + mdf(a) (файл описания оборудования).
Manufacturing Output Manager (MOM) — под управлением модуля МОМ ( [ Machine Output Manager ] = Модуль управления выводом). Этот модуль преобразует параметры операций и внутреннюю геометрию в переменные языка ( Tcl) , используя в качестве файла описания станка скрипт, сгенерированный системой на языке описания сценариев Tcl . Постпроцессор этого типа — можно написать вручную, а можно создать\изменять через генератор постпроцессоров ( PostBuilder ) .

  • До 14 — версии UnigraphiCs, основным постпроцессором являлся GPM ( gpm.exe + mdf ).
  • 15-ой версии появились первые признаки присутствия Tcl : Unigraphics15.zip — обратите внимание , что не было разделения и все лежало в одной папке MACH. Интересно, что скрипты для отладки были написаны немецкими программистами ( mom_debug_wish.tcl . ). В файле ugpost.dat — содержались списки постпроцессоров .
  • В 16-ой версии, окончательно были сформирована схема » ядра » , а в 18-ой доведена до совершенства, на котором она работает по сей день.
  1. 2000 год, на англ. (Stan S.) и русском (перевод Чижа Олега): ppt_eng.zipppt_rus.zip
  2. Создание UD Е событий : fs_ude_condensed.html
global tcl_version if < [string compare "$ptp_file_name" "$pre_ptp_name"] > < if < $tcl_version < 8.0 > < MOM_close_output_file $ptp_file_name >else < MOM_close_output_file [file nativename $ptp_file_name] >>

Насколько глубоко Tcl внедрен в Ug можно понять по простому примеру:
включите в одну из процедур постпроцессора команду exit
Вы увидите, как Unigraphics не сказав и ничего не спросив, тихо и быстро закроется.

Кратко рассмотрим состав дистрибутива Юниграфики:

Unigraphics не любит, не понимает, и не работает с кириллицей. ( Болезнь от Unix ).
Поэтому кириллицы не должно быть :
— не в пути файлов,
— не в названии файлов и папок,
— не в имени компьютера.

— очень интересная библиотека. Появилась негласно еще в NX1 . Сначала для декодирования файлов ISV — Machine Tool Drivers (MTD) — (\MACH\resource\postprocessor\vnc_base_ xxx x_tcl.txt ) . Затем её возможности распространили для декодирования постпроцессора с помощью экспортируемой её функции :
MOM_decrypt_source
( UF_MOM_extend_xlator ( mom_obj, «MOM_decrypt_source», mom_decrypt_source ).
Своеобразное кодирование на основе лицензии выполняется в PostBuilder. Появилось это только в версии NX 6.0.0.2.
Вообще, о кодировании \ декодировании ПП — менеджеры компаний по продаже UG — заикались еще в 2003-2004 гг. Цель и мотив Этого, неясен до сих пор.

— библиотека расширенной кинематики. (Advanced Kinematics Module !>)
\ src\ugpadvkins\no\ind\uf_mom_add_ufun_tclexts.c
— Зачем эта кинематика? Реализует неортогональную кинематику — но всегда можно подстроить её (опытным путем). Зачем этот геморрой с IKS в PostBuilder ? . Зачем расширения кинематической схемы именно в таком виде, без включения в ядро решателя.? Вопросов больше — чем ответов. Да и пересчет, странный, с точки зрения математики.
Экспортирует следующие МОМ — функции ( для применяемых типов станков — 5_axis_head_table 5_axis_dual_head 5_axis_dual_table):

UF_MOM_extend_xlator ( mom, «MOM_exit_kinematics_module», mom_exit_kinematics_module )
UF_MOM_extend_xlator ( mom, «MOM_map_to_rotated_csys», mom_map_to_rotated_csys )
UF_MOM_extend_xlator ( mom, «MOM_rotate_mach_csys», mom_rotate_mach_csys )
UF_MOM_extend_xlator ( mom , «MOM_get_tool_attribute», mom_get_tool_attribute )
UF_MOM_extend_xlator ( mom, «MOM_convert_point», mom_convert_point )
UF_MOM_extend_xlator ( mom, «MOM_load_kinematics», mom_load_kinematics )

в Dll усиленно применяют функции:

UF_VEC3_cross
UF_VEC3_scale
UF_VEC3_is_parallel
UF_VEC3_distance
UF_VEC3_is_zero
UF_VEC3_affine_comb
UF_VEC3_is_equal
UF_VEC3_sub
UF_VEC3_dot
UF_VEC3_copy
UF_VEC3_angle_between
UF_VEC3_add
UF_VEC3_unitize
UF_MTX3_rotate_about_axis
UF_MTX3_multiply
UF_MTX3_z_vec
UF_MTX3_vec_multiply_t
UF_MTX3_copy
UF_MTX3_x_vec
UF_MTX3_y_vec
UF_MTX4_edit_rotation
UF_MTX4_vec3_multiply_t
UF_MTX4_rotation
UF_MTX4_ask_rotation
UF_MTX3_vec_multiply
UF_MTX4_vec3_multiply
UF_MTX4_multiply
UF_MTX4_vec_multiply
UF_MTX4_csys_to_csys

по характеру которых можно понять функциональность модуля.

— а это обычный — Tk DLL tk82.dll (версии 8.2.2.2) Tk 8.2 for Windows Scriptics Corporation
собранный и сжатый upx.exe http://upx.sourceforge.net , выполняемый файл (после распаковки размером > 1.5 мб). Смело его заменяйте на более новую версию wish. Хотя я бы рекомендовал сборки:
http://www.equi4.com/tclkit/ — единственный файл, включающий в себя runtime — скрипты, GUI (Tk), объектную систему (IncrTcl), Tcl Virtual File System (TclVFS).

— Алгоритм работы можно представить следующими функциями

int main(int argc,const char **argv,const char *envp) UF_MISC_set_program_name UF_initialize UF_get_fail_message UF_PART_open UF_CAM_init_session UF_SETUP_ask_setup UF_SETUP_ask_program_root UF_NCGROUP_ask_object_of_name UF_SETUP_generate_program "Post %s generated successfully\n" UF_terminate Вспомогательные функции : UF_free_string_array UF_free UF_PART_ask_units

Источник

Оцените статью