Ресурсы Unigraphics: Создание постпроцессоров. Использование PostBuilder.Запуск PB в Windows

Запуск PB в Windows.

   Запуск PB - производиться довольно оригинально. Наверно, Вы не раз сталкивались с ситуацией, что простого запуска post_builder.bat  недостаточно.
На деле, при запуске post_builder.bat передаются аргументы ( это видно из свойства ярлыка меню и самого post_builder.bat).

"C:\Program Files\UGS\NX 6.0\POSTBUILD\post_builder.bat" "C:\Program 
Files\UGS\NX 6.0\"
 

Например, запуск Постбилдера 16.3.3 зависел от 25 ниже указанных библиотек: на самом деле ему было нужны всего лишь 2-е! остальные  просто тянулись сборкой.

edsps110.dll
edsps111.dll
libcams.dll
libcgm.dll
libcmod.dll
libcustdef.dll
libdman.dll
libdrft.dll
libfemg.dll
libgrip.dll
libhidl.dll
libimage.dll
libinterop.dll
liblwks.dll
libplotq.dll
libptr.dll
libsmdmsmd.dll
libsyss.dll
libufun.dll
libugft.dll
libuglm.dll
libugmath.dll
libugmr.dll
lightwks.dll
ugflex.dll

 

Рассмотрим по ближе файлы участвующие в запуске:

post_builder.bat => в этом файле происходит установка переменных окружения и запуск Постбилдера

UG16-NX4 NX6-NX75
@echo off

REM================================================
REM PB_HOME is the only env var referenced in the Post Builder source codes.
REM It should be set base on the Post Builder installation.
REM================================================
set base=%1
set base_dir=%base:"=%
set PB_HOME=%base_dir%\postbuild

REM================================================
REM UG DLL's search path.
REM================================================
set PATH=%base_dir%\UGII;%PATH%

REM================================================
REM Some vars for Tcl etc.
REM================================================
set PB_TCL=%PB_HOME%\tcl
set TCL_LIBRARY=%PB_TCL%\share\tcl8.0
set TK_LIBRARY=%PB_TCL%\share\tk8.0
set TIX_LIBRARY=%PB_TCL%\share\tix4.1

REM================================================
REM Tcl DLL search path
REM================================================
set PATH=%PB_TCL%\exe;%PATH%

REM================================================
REM Start Post Builder
REM================================================
"%PB_HOME%\app\post_builder.exe"

REM================================================
REM Post Builder returns 0 as the result of a successful run, otherwise
REM it returns a non-zero value.
REM================================================
if ERRORLEVEL 0 goto END
pause

:END
@echo off

REM================================================
REM PB_HOME is the only env var referenced in the Post Builder source codes.
REM It should be set base on the Post Builder installation.
REM================================================
set base=%1
set base_dir=%base:"=%
set PB_HOME=%base_dir%\postbuild

REM================================================
REM UG DLL's search path.
REM================================================
set PATH=%base_dir%\UGII;%PATH%

REM================================================
REM Some vars for Tcl etc.
REM================================================
set PB_TCL=%PB_HOME%\tcl

rem<01-21-08 gsl> Corrected env vars
rem set TCL_LIBRARY=%PB_TCL%\share\tcl8.0
rem set TK_LIBRARY=%PB_TCL%\share\tk8.0
rem set TIX_LIBRARY=%PB_TCL%\share\tix4.1

set TCL_LIBRARY=%PB_TCL%\share\tcl8.4
set TK_LIBRARY=%PB_TCL%\share\tk8.4
set TIX_LIBRARY=%PB_TCL%\share\tix8.4

REM================================================
REM Tcl DLL search path
REM================================================
set PATH=%PB_TCL%\exe;%PATH%

REM================================================
REM Start Post Builder
REM================================================
"%PB_HOME%\app\post_builder.exe" "%*"

REM================================================
REM Post Builder returns 0 as the result of a successful run, otherwise
REM it returns a non-zero value.
REM================================================
if ERRORLEVEL 0 goto END
pause
 

post_builder.exe => в этом файле производиться проверка лицензии UG и запуск %PB_HOME%\app\Postino с параметрами.

16 NX4 NX6
IMPORTS TABLE:

libufun.dll
----- -----
3067 UF_get_fail_message
1171 UF_MISC_set_program_name
3069 UF_initialize
3079 UF_terminate

libuglm.dll
----- -----
29 check_license
32 leave_a_module
IMPORTS TABLE:

libufun.dll
----- -----
4552 UF_get_fail_message
4556 UF_initialize
1611 UF_MISC_set_program_name
4567 UF_terminate

libuglm.dll
----- -----
20 UGFLEX_enter_module
26 UGFLEX_set_display
13 UGFLEX_ask_display
24 UGFLEX_leave_module
EXPORTS TABLE:
void __cdecl NXSigningResource(void)

IMPORTS TABLE:

libsyss.dll
----- -----
6025 public: static void __cdecl UGS::Memory::CppMemory::free(void *)
5372 public: static void * cdecl UGS::Memory::CppMemory::allocate(unsigned int)

libjam.dll
----- -----
357 int __cdecl JAM_enter_module(
319 void __cdecl JAM_ask_server_info(char * const,char * const)
447 int __cdecl JAM_leave_module()
327 int __cdecl JAM_check_availability()

libufun.dll
----- -----
5197 UF_terminate
5171 UF_free
356 UF_CFI_spawn
5175 UF_get_fail_message
5180 UF_initialize
1811 UF_MISC_set_program_name
5155 UF_allocate_memory
5185 UF_print_syslog

%PB_HOME%\app\Postino .

  NX4-NX6-NX75
IMPORTS TABLE:
tcl*.dll
----- -----
311 Tcl_GetVar
327 Tcl_Init
139 Tcl_Alloc
433 Tcl_SetPanicProc
364 Tcl_NewListObj
146 Tcl_AppendStringsToObj
487 Tcl_WrongNumArgs
309 Tcl_GetStringFromObj
303 Tcl_GetObjResult
426 Tcl_SetIntObj
186 Tcl_CreateObjCommand
318 Tcl_GlobalEval
347 Tcl_ListObjLength
440 Tcl_SetVar
319 Tcl_GlobalEvalObj
348 Tcl_ListObjReplace
TK*.DLL
----- -----
362 Tk_Main
356 Tk_Init
tix*.dll
----- -----
202 TkConsoleCreate
132 Tix_Init
Создаются команды в интерпретаторе и он сам: 
proc UI_PB__main_menu {top}

proc UIPB__createGauge {}
proc UIPB__updateGauge {val1 val2}
proc UIPB__destroyGauge {} 

и другие команды.
.......................................................

Суммируем Итог:

  • post_builder.bat  - создает переменные окружения PB_HOME, PB_TCL, TCL_LIBRARY, TK_LIBRARY, TIX_LIBRARY
  • post_builder.exe - проверяет лицензию у сервера и запускает postino передавая ему аргументы.
  • Postino.exe  -  файл прямо не зависит от лицензии. Он вообще не зависит от библиотек UGS, кроме tcl. Надо заметить, так было не всегда. Я уже где то писал, что для того, чтобы запустить Постбилдер в UG17 было нужно 11 библиотек. Так вот, в 16-ой и 17-версии Юга предпринималась попытка объединить Postino и post_builder.

    .text:00401000 ; Library: \\fsnac2\wntipref\ugv1702\ip2\libs\libufun.lib
    .text:00401000 ; Library: ..\tcl\exe\tcl80.lib
    .text:00401000 ; Library: ..\tcl\exe\tk80.lib
    .text:00401000 ; Library: ..\tcl\exe\tix4180.lib
    .text:00401000 ; Library: \\fsnac2\wntipref\ugv1702\ip2\libs\libuglm.lib

    В Postino создается TCL - интерпретатор, и команда UI_PB__main_menu + окно с бегущей строкой (параллельно ведется декодирование) и заставка, далее осуществляется загрузка исходников самого Постбилдера. Лицензия (номер) и тип передается через аргументы командной строки. В самом файле - номер (называемый паролем) и лицензия  уже зашита.
    Попутно, мы выяснили, что в исходниках Постбилдера предусматривалась команда и лицензия на импортирование MDFA - файлов и предусмотрено 4 типа лицензии:

    gPB(PB_LICENSE) UG_POST_MILL
    gPB(PB_LICENSE) UG_POST_ADV_BLD
    gPB(PB_LICENSE) UG_POST_NO_LICENSE
    gPB(PB_LICENSE) UG_POST_AUTHOR ; # - этот вид лицензии появился в NX6

    Для  того, чтобы выяснить, какие параметры передаются  - сделал простейшие программы (в 2-е строки), которые читают параметры командной строки и выводят в окно (это для тех, кому лень): первый вариант  - MFC cmdprg.rar , второй вариант - TCL\TK cmdprg_ui.rar (упакован в exe-файл посредством  http://freewrap.sourceforge.net . Так что, извиняйте за размеры .

    параметры------------------------------   
    запуск без лицензии %PB_HOME%\app\Postino.exe "NO_LICENSE" UG_POST_NO_LICENSE 
    UG16%PB_HOME%\app\Postino.exe "!$%^(@*#&)" UG_POST_MILL 
    NX4  (PB 3.303 - 3.41)%PB_HOME%\app\Postino.exe 1456928370 UG_POST_MILL 
    NX6%PB_HOME%\app\Postino.exe 2006061812 UG_POST_ADV_BLD "L N D" %PB_HOME%

    - здесь 
    "L N D" - это название лицензионного сервера (см. Лог-файл).
     
    NX75%PB_HOME%\app\Postino.exe "2006061812 UG_POST_ADV_BLD "1002010 - *L*N*D*" "{CAM_KIT_POST_100 754} {CAM_KIT_POST_101 756} {CAM_KIT_VNC_100 755} {CAM_KIT_VNC_101 757}" %PB_HOME%"

    - здесь  "L N D" - это название лицензионного сервера (см. Лог-файл),
     
    {CAM_KIT_POST_100 754} - типы лицензий.
     
       
    Зная, все написанное выше, теперь мы можем запускать Postino.exe минуя post_builder.exe:
    для Nx4 для Nx6
    @echo off

    REM========================настраиваемые переменные==========================

    rem любой 'левый' путь - без кириллицы
    set UGII_BASE_DIR=D:\UGNX4
    Set USERNAME=Admin

    set PB_HOME=.\POSTBUILD

    REM==========================================================================

    set PB_TCL=%PB_HOME%\tcl

    REM=========================================
    REM Tcl DLL search path
    REM=========================================
    set PATH=%PB_TCL%\exe;%PATH%

    set TCL_LIBRARY=%PB_TCL%\share\tcl8.0
    set TK_LIBRARY=%PB_TCL%\share\tk8.0
    set TIX_LIBRARY=%PB_TCL%\share\tix4.1

    rem %PB_HOME%\app\Postino.exe 1456928370 UG_POST_ADV_BLD
    rem
     
    %PB_HOME%\app\Postino.exe 1456928370 UG_POST_MILL

    if ERRORLEVEL 0 goto END
    pause

    :END
    @echo off

    REM========================настраиваемые переменные==========================


    rem любой 'левый' путь - без кириллицы
    set UGII_BASE_DIR=C:\UGNX6\
    Set USERNAME=Admin


    set PB_HOME=.\POSTBUILD

    rem =============================================

    set PB_TCL=%PB_HOME%\tcl

    REM======================================================
    REM Tcl DLL search path
    REM======================================================
    set PATH=%PB_TCL%\exe;%PATH%

    rem<01-21-08 gsl> Corrected env vars
    set TCL_LIBRARY=%PB_TCL%\share\tcl8.4
    set TK_LIBRARY=%PB_TCL%\share\tk8.4
    set TIX_LIBRARY=%PB_TCL%\share\tix8.4

    %PB_HOME%\app\Postino.exe 2006061812 UG_POST_ADV_BLD "L N D" %PB_HOME%

    if ERRORLEVEL 0 goto END
    pause

    :END
     
    1. Для чего в 'батник' я устанавливаю фиктивное значение переменной UGII_BASE_DIR  ?   Дело в том, что в Postino в функции вывода 'Окна' о версии PB -  Postino опрашивает переменные среды для показа в окне диалога.

    1.   По мимо этого, Вы можете добавить команду:  set USERNAME=admin, тогда PB будет создавать и сохранять постпроцессор от имени этого Юзера.

    2.    С запуском PostBuilder 16-ой версии у Вас может случиться заминка. Дело в том, что просто вызвать 
      %PB_HOME%\app\Postino.exe "!$%^(@*#&)" UG_POST_MILL

       недостаточно. Postino.exe - при запуске проверяет запущен ли он как подчиненный процесс ))))) и передаваемые параметры.
      Для решения этой проблемы - я сделал заменитель post_builder - а :
        post_builder.zip    с простыми строчками кода.

         char str[256]="";  int err;
         sprintf(str,"%%PB_HOME%%\\app\\Postino.exe \"%s\" %s \0","!$%^(@*#&)","UG_POST_MILL");
         err=system(str);

      Все. И даже не стал править батник - оставив в нем запуск  %PB_HOME%\app\post_builder.exe.

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

    Copyright © 2001—2008  че