• Teamcenter_NX集成开发:使用NX、SOA连接Teamcenter


     

    最近工作中经常使用Teamcenter、NX集成开发的情况,因此在这里记录使用NX、SOA连接到Teamcenter的连接方式。

    主要操作:

    1-初始化UGMGR环境成功后就可以连接到Teamcenter。

    2-获取指定ID编码零组件标识和Latest Working(没记错的话应该是最新版本)版本ID。

    3-获取版本下相关数据集文件(UGMASTER、UGPART等)。

    4-ID、版本、文件类型Encode组成集成环境下NX可以打开的NX部件文件名称,并打开。

    5-获取Session,打印Teamcenter当前登录方式(二层或者四层等)及其他信息。

    6-关闭打开的零组件并释放内存。

      1 // Mandatory UF Includes
      2 #include 
      3 #include 
      4 #include 
      5 #include 
      6 #include 
      7 #include 
      8 #include 
      9 #include 
     10 
     11 // Internal+External Includes
     12 #include 
     13 #include 
     14 #include 
     15 #include 
     16 #include 
     17 #include 
     18 #include 
     19 #include 
     20 #include 
     21 #include 
     22 #include 
     23 #include 
     24 
     25 #include 
     26 #include 
     27 #include 
     28 #include 
     29 #include 
     30 
     31 // Std C++ Includes
     32 #include 
     33 #include 
     34 
     35 using namespace NXOpen;
     36 using namespace Teamcenter::Soa::Client;
     37 using namespace Teamcenter::Services::Core;
     38 using std::string;
     39 using std::exception;
     40 using std::stringstream;
     41 using std::endl;
     42 using std::cout;
     43 using std::cerr;
     44 
     45 void do_it()
     46 {
     47     int err = 0;
     48     UF_UGMGR_tag_t database_part_tag = NULL_TAG;
     49     err = UF_UGMGR_ask_part_tag("000000000AA000082", &database_part_tag);
     50     err = UF_UGMGR_set_config_rule("Latest Working");
     51 
     52     UF_UGMGR_tag_t part_revision = NULL_TAG;
     53     err = UF_UGMGR_ask_configured_rev(database_part_tag, &part_revision);
     54 
     55     char revision_id[UF_UGMGR_NAME_BUFSIZE] = { 0 };
     56     err = UF_UGMGR_ask_part_revision_id(part_revision, revision_id);
     57 
     58     int file_count = 0;
     59     char** file_types = NULL;
     60     char** file_names = NULL;
     61     err = UF_UGMGR_list_part_rev_files(part_revision, &file_count, &file_types, &file_names);
     62     if (file_count <= 0) return;
     63 
     64     for (int idx = 0; idx < file_count; idx++){
     65         if (file_names[idx] == NULL)
     66             continue;
     67         
     68         char encoded_name[MAX_FSPEC_BUFSIZE] = { 0 };
     69         err = UF_UGMGR_encode_part_filename("000000000AA000082", revision_id, file_types[idx], file_names[idx], encoded_name);
     70 
     71         tag_t partTag = NULL_TAG;
     72         UF_PART_load_status_t error_status;
     73         err = UF_PART_open(encoded_name, &partTag, &error_status);
     74 
     75         //===================
     76         // 打开零组件后获取Session,不然会报错。也可以获取零组件属性,打开的是图纸还可以导出PDF。
     77         //===================
     78         NXOpen::Session *theSession = NXOpen::Session::GetSession();
     79         NXOpen::Part *displayPart(theSession->Parts()->Display());
     80         NXOpen::PDM::PdmSession *thePdmSession = NULL;
     81         NXOpen::PDM::SoaConnectionHandle *connectHandle = NULL;
     82         Teamcenter::Soa::Client::Connection *tcSoaConnect = NULL;
     83 
     84         thePdmSession = theSession->PdmSession();
     85         connectHandle = thePdmSession->GetSoaConnectionHandle();
     86         tcSoaConnect = reinterpret_cast(connectHandle->GetHandle());
     87         Teamcenter::Services::Core::DatamanagementService *dmService = Teamcenter::Services::Core::DatamanagementService::getService(tcSoaConnect);
     88 
     89         Teamcenter::Soa::Common::Version clientVersion = tcSoaConnect->getClientVersion();
     90         Teamcenter::Soa::Common::Version serviceClient = tcSoaConnect->getServerVersion();
     91         Teamcenter::Soa::Client::Connection::Protocol protocol = tcSoaConnect->getProtocol();
     92         Teamcenter::Soa::Client::Connection::Binding binding = tcSoaConnect->getBinding();
     93 
     94         std::cout << "\nclientVersion.getTeamcenterVersion = " << clientVersion.getTeamcenterVersion() << std::endl;
     95         std::cout << "clientVersion.getTeamcenterVersionLabel = " << clientVersion.getTeamcenterVersionLabel() << std::endl;
     96         std::cout << "serviceClient.getTeamcenterVersion = " << serviceClient.getTeamcenterVersion() << std::endl;
     97         std::cout << "serviceClient.getTeamcenterVersionLabel = " << serviceClient.getTeamcenterVersionLabel() << std::endl;
     98 
     99         std::cout << "\ntcSoaConnect->getLocale = " << tcSoaConnect->getLocale() << std::endl;
    100         std::cout << "tcSoaConnect->getServerAddress = " << tcSoaConnect->getServerAddress() << std::endl;
    101         std::cout << "tcSoaConnect->getCurrentObjectPropertyPolicy = " << tcSoaConnect->getCurrentObjectPropertyPolicy() << std::endl;
    102 
    103         switch (protocol){
    104         case Teamcenter::Soa::Client::Connection::HTTP:
    105             std::cout << "\n\nTeamcenter::Soa::Client::Connection::HTTP" << std::endl;
    106             break;
    107         case Teamcenter::Soa::Client::Connection::TCCS:
    108             std::cout << "\nTeamcenter::Soa::Client::Connection::TCCS" << std::endl;
    109             break;
    110         case Teamcenter::Soa::Client::Connection::IIOP:
    111             std::cout << "\nTeamcenter::Soa::Client::Connection::IIOP" << std::endl;
    112             break;
    113         case Teamcenter::Soa::Client::Connection::TCTP:
    114             std::cout << "\nTeamcenter::Soa::Client::Connection::TCTP" << std::endl;
    115             break;
    116         default:
    117             break;
    118         }
    119         switch (binding){
    120         case Teamcenter::Soa::Client::Connection::REST:
    121             std::cout << "\n\nTeamcenter::Soa::Client::Connection::REST" << std::endl;
    122             break;
    123         case Teamcenter::Soa::Client::Connection::SOAP:
    124             std::cout << "\nTeamcenter::Soa::Client::Connection::SOAP" << std::endl;
    125             break;
    126         default:
    127             break;
    128         }
    129 
    130         err = UF_PART_free_load_status(&error_status);
    131         err = UF_PART_close(partTag, 1, 1);
    132     }
    133     
    134     UF_free(file_names);
    135     UF_free(file_types);
    136     file_types = NULL;
    137     file_names = NULL;
    138 }
    139 
    140 //===================
    141 // Entry Point
    142 //===================
    143 int main(int argc, char* argv[])
    144 {
    145     try{
    146         const char** dd = (const char**)(argv);
    147         int err = UF_UGMGR_initialize(argc, dd);
    148         do_it();
    149         err = UF_UGMGR_terminate();
    150         return err;
    151     }
    152     catch (const NXException& e1){
    153         cerr << "NXException: " << e1.ErrorCode() << endl;
    154         cerr << e1.Message() << endl;
    155     }
    156     catch (const exception& e2){
    157         cerr << "Exception: " << e2.what() << endl;
    158     }
    159     catch (...){
    160         cerr << "Unknown Exception: " << endl;
    161     }
    162 }
    View Code

     释放应该使用以下函数:

    1     UF_free_string_array(file_count, file_names);
    2     UF_free_string_array(file_count, file_types);
    View Code

     

    encode:把ID、版本、文件类型编码成NX可以打开的名称。

     

    控制台输出日志:

     

    注意事项:

      1-要以bat文件启动VS进行调试运行,bat文件中设置Teamcenter相关的环境变量,不然初始化函数UF_UGMGR_Initlization()会报错。

      2-连接两层Teamcenter客户端时:Tao窗口要成功启动。

      3-bat文件内容如下:

     1 cd /d %~dp0
     2 call "D:\PLM\Siemens\Teamcenter12\install\tem_init.bat"
     3 call "D:\PLM\Siemens\Teamcenter12\tc_menu\tc_config1.bat"
     4 
     5 set UGII_UGMGR_COMMUNICATION=IIOP
     6 set TPR=D:\PLM\Siemens\Teamcenter12\portal
     7 set UGII_BASE_DIR=D:\PLM\Siemens\NX
     8 set TC_ROOT=D:\PLM\Siemens\Teamcenter12
     9 set TC_DATA=D:\PLM\Siemens\tcdata
    10 set FMS_HOME=D:\PLM\Siemens\Teamcenter12\tccs
    11 
    12 set JAVA_HOME=%TC_JRE_HOME%
    13 set JRE_HOME=%TC_JRE_HOME%
    14 
    15 set PATH=%JAVA_HOME%\bin;%FME_HOME%\bin;%FMS_HOME%\lib;%TPR%;%UGII_BASE_DIR%\NXBIN;%UGII_BASE_DIR%\UGII;%PATH%;
    16 
    17 start "TAO ImR" /min cmd /c "D:\PLM\Siemens\Teamcenter12\iiopservers\start_imr.bat"
    18 cd "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"
    19 C:
    20 devenv.exe
    View Code

     

    零组件在Teamcenter中截图:

     

  • 相关阅读:
    systrace使用注意事项
    调试器通用波形显示工具
    BERT知识蒸馏Distilled BiLSTM
    TypeScript 5.1发布,新功能更新
    今天面了个腾讯拿38K出来的大佬,让我见识到了基础的天花板
    node深度打印对象
    【Swift 60秒】51 - Closures as parameters
    已解决:一个表中可以有多个自增列吗
    DC-5靶场下载及渗透实战详细过程(DC靶场系列)
    会话管理 : Cookie和Session
  • 原文地址:https://www.cnblogs.com/huangym1/p/17244587.html