PLM之家PLMHome-国产软件践行者

[原创] 关于NX 二次开发中,错误异常的处理详细介绍

  [复制链接]

2014-9-28 22:06:32 7213 2

admin 发表于 2013-11-8 13:35:27 |阅读模式

admin 楼主

2013-11-8 13:35:27

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
关于NX 二次开发中,错误异常的处理详细介绍  @+ f. ~8 d% V. M
3 n# {7 c$ x, }, r
错误处理
# w( v% ]9 n# r/ c# K1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:& g: ~4 m/ ]- ~  z% b
(1)无效的参数输入+ E; ?0 D8 b) s5 X2 W- a7 ^5 A' W
(2)企图创建无效的几何模型
! c7 K$ ]" \# T# N8 C0 P* S0 b(3)不可预料的调用顺序" [: i( F/ y9 X7 N" X# T
(4)得不到的系统资源,比如内存或者文件访问等
" R- }+ _/ A' p2 x9 p5 [  所有输出均为最新。) w, C  P% s; ?9 o" ]
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入* h6 N& R& D$ T! K; z+ N
! k5 r1 t) j' h+ u
2 错误侦查
. f: H6 D1 w% k7 z) h通常返回错误状态或者异常。. J4 {% C; M  S7 o$ j% G: q8 s
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;3 h- j) [' _! r- X- H
对于NX Open 通过 Try/CaTCh的架构进行处理
0 z& S. d" ]/ [$ x, t1 h3 错误报告
. Y* m. n5 I2 n% x$ B(1)获取错误信息
8 s$ G3 W% H3 K! d4 k5 r2 v错误信息,获取一个错误码,并有一段可读的错误消息5 e2 o4 T" H8 X( m4 b
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理; M- A9 j# K& a
NXOpen 通过NXExcepion处理
& h4 l8 g6 m1 {0 } 5 e) |" ^. }" G; _+ ]  `% l
(2)建立报告
, v; W3 }5 \7 }' Y) b, q2 z 需要增加信息去报告什么操作导致报错,以及如何处理
! e; Z( r( V( L) g" Q* m ( ~" Y2 v8 G9 k9 l* b& O$ u1 w
(3)报告错误' v: ]4 R/ z$ G8 ^8 Z
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
. |. F2 h3 J$ q9 @. n( R 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。$ d7 U) s) ]3 A4 J9 p

  k: k1 m5 O. L/ [8 F* K, N (4)错误修复% z; r! f. H0 v" O  Y$ R* J8 g
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。+ q: w/ j7 b4 w, g9 {
NXOpen提供的错误修复包括:
1 i+ t$ o+ [; s2 U7 p; C+ [ a.方法定义给于异常处理,让程序员来诊断错误* R7 W% \  n2 L
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
4 H: Y7 O4 O& a- L4 }4 x c.UDO进行处理,去返回曾经的状态
/ S4 G) x. X$ U7 X8 }- G" ?! P- e( j1 M7 Z* `! q
  1. , k4 R$ z+ F% }  n, j# t( p
  2. // ufun 的方法1 O! k( T. y' m" J9 M1 X
  3. - `1 C# ], V7 h6 u; t9 ~
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    8 h3 |7 a: n  h4 {: N( A, S9 r
  5. corner_pts[i], edge_lens, &features[i]);# D' p2 {; X& g3 }1 G3 @
  6. //check for return value
    ! e  X4 `9 j/ n; T- m) b
  7. if (status != 0): y, a" t! m$ ]! b3 t) ^; e3 r
  8. {
    $ H4 x! \; D1 \* q7 ]
  9. //get the human readable error message
    8 S+ q# o6 s, ~) E0 R' B
  10. UF_get_fail_message(status, ugErrorText);& K5 |- ]" D2 }/ h, U" i
  11. //report error to the user- u/ x5 t/ C/ J& N3 [
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    ; m7 Q8 |; e- g+ r8 _
  13. &ugErrorText, 1, ..... );
      a# o2 a( J' v9 `* |- M' j4 A
  14. //report error to syslog9 K) N+ h2 y, R1 \0 M0 L
  15. UF_print_syslog("Failed to create block\n", false);
    2 W5 [: ^, n3 d1 I2 b
  16. return 1;
    " t$ ]4 Q: g$ h; {' q% e$ Q2 z
  17. }6 [3 F8 X& s, H1 [' ?2 `
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);+ t" v9 z; O0 v5 M# b- I
  19. if (status != 0)3 y) l  H0 v7 ^9 j1 N% E: i
  20. {' u9 b  w: g4 b" W6 ~3 C
  21. UF_print_syslog("Failed to get body from block\n", _
    ; f, p! a) J; Y8 F
  22. false);
    " i  B! g6 Y7 |1 a) j$ F: L0 d; c
  23. return;2 ^/ U+ `& J9 y0 o
  24. }6 @% [( {: `8 ?
  25. ) ^+ i) P" T7 r4 T2 l7 n- V
  26. //NXOpen 的方法,以下是java代码
    ) r- g8 x2 V" O7 ]

  27. # O# z* D! }+ y4 k
  28. try. L3 p( g: h, {3 R" f6 M2 Z; X
  29. {3 J0 n/ }: n3 e: L/ C
  30. Session theSession =(Session)SessionFactory.get("Session");
    8 S" a- |* T1 ~$ E9 j
  31. Part workPart = theSession.parts().work();
    4 a. O7 U' H3 G$ E
  32. nxopen.features.Feature nullFeatures_Feature = null;) m1 |6 F, Z7 T& \
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;1 H# D% c4 i" s8 Y
  34. blockFeatureBuilder1 = workPart.features(). _& J' o) O6 y; O5 G
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    2 W5 F- D5 [! |9 H( a+ P% c
  36. }
    + _8 d8 |. z; L% T/ n
  37. catch (Exception e)
    8 u0 i8 G) H! {; h! r
  38. {
    $ C) m( O5 a0 Z6 }0 |! d4 w; b; d
  39. //report error to syslog, Message property on _* ]: C- u! s4 Q
  40. exception object already has human* t% q: X# |9 j- m3 F  C' `
  41. //readable message- r; ^. j9 x& `8 b- ?
  42. theSession.Logfile().WriteLine("Failed to create _
    5 b: m! D7 H* h  M6 [# v, U
  43. block", + e.getMessage());4 p8 _% j: \' N2 X1 \" k  }6 p
  44. }
复制代码
; p% u5 V3 w$ S& m" g/ N$ j9 U

4 ]' m% [) d" O  C' D# n
$ ]8 U8 Q' R+ M1 P4 M9 [
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复2

叶修 发表于 2014-9-28 22:06:32

叶修 板凳

2014-9-28 22:06:32

学习了,谢谢高手
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了