PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍- s$ d* }. W1 H( b1 g1 T
- _( l! s6 c  \; j
错误处理# }3 V% `) v, s8 G( I
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
1 m' m. h; _6 ?. h. y) r. v(1)无效的参数输入1 b2 ~: T- H/ d* l
(2)企图创建无效的几何模型
( I3 D) U: S6 O3 v! X' g0 z(3)不可预料的调用顺序
1 s% _6 x. H& C3 R0 A5 i# Y(4)得不到的系统资源,比如内存或者文件访问等
, K) o$ D0 ]4 X) U( t: ~7 z5 ^  所有输出均为最新。
6 b  q) e# P- h9 eLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
3 K/ S% g7 N; A5 N' O( Y) \9 j& \& j0 w4 P0 Y( |- X! W! m# ~
2 错误侦查" y1 F; J4 v+ T* J  }7 l, a& e4 A/ s
通常返回错误状态或者异常。
  N( R$ U1 N7 Y; x对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
7 S. S/ D, Z" x& D/ j7 o! y; \# A对于NX Open 通过 Try/CaTCh的架构进行处理
( Q' H$ {' Z9 W- z; p3 错误报告+ n- L$ @. U) F: l5 l0 [
(1)获取错误信息9 B$ D6 u: m* Y5 m/ b
错误信息,获取一个错误码,并有一段可读的错误消息
" E9 [" i" E2 v1 P# ~ ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理2 E/ o! h7 o( q7 A+ W  |# l
NXOpen 通过NXExcepion处理" r! y% H2 B9 q9 P( p
$ R0 E1 D! u+ R  f% h
(2)建立报告
3 G& D5 C, I$ w) n 需要增加信息去报告什么操作导致报错,以及如何处理8 W" y2 O) `9 J( D* |
7 c6 \2 F7 ~- O: x8 s) U
(3)报告错误1 N, U; Z5 E+ U/ k" v+ a2 r: p- ?
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
+ D/ D0 X3 G& n' I' }+ g9 R  R) D& ~2 U 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
5 y: |& t- `3 S. {; l: C; T2 a" ^ 3 b4 X  e# Y4 A
(4)错误修复3 W+ j9 Q$ d" H; V& C+ h. x
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
$ M( }/ `2 c( t NXOpen提供的错误修复包括:
* t. w1 l9 {& o$ k! {7 D8 C a.方法定义给于异常处理,让程序员来诊断错误
$ n& T* L% f" s/ U3 P b.当方法错误的时候,可以返回NX回话和part到一个有效的状态) c* |5 k/ l1 H  W
c.UDO进行处理,去返回曾经的状态# M& R& u. y; {) E' R; f9 u

6 K$ P3 j7 f& u. l. p: V' i
  1. , d% w6 [  ^8 M
  2. // ufun 的方法
      e: n1 R% [# ^  B2 [" Z
  3. ! Z% ~$ R! f) l  e) ]
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _( K6 A0 I: ^5 j/ x$ G  d# M
  5. corner_pts[i], edge_lens, &features[i]);
    . @' Q, Q) ]5 S4 y& T
  6. //check for return value3 ~# S! f5 [2 l% N. _6 R+ m0 ]
  7. if (status != 0)
    1 |/ h: {( Q- g" N3 e3 o3 }! {
  8. {/ E, C1 A; U1 z9 h2 s- _  ^
  9. //get the human readable error message+ `6 b2 }& I- ^) w& U+ F& L
  10. UF_get_fail_message(status, ugErrorText);5 C. c, h  l  h0 k( S/ W: ]6 q
  11. //report error to the user7 b( B0 k+ h# a, ]- m% F6 {
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _4 V: A# p/ F$ x0 [5 l
  13. &ugErrorText, 1, ..... );4 L+ M6 _: A* G4 d
  14. //report error to syslog
    6 e2 F! ]- c, G1 T
  15. UF_print_syslog("Failed to create block\n", false);" |6 `$ t& l1 C6 X
  16. return 1;
    ) i! b- @1 p, c7 f) x
  17. }: e; g$ X1 S- {8 y3 w
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    5 ]3 @" z' d& c6 l% }& A9 }- A
  19. if (status != 0)9 \, ^% I! n! g! E5 I
  20. {
    4 U6 r+ u  U& N* \/ _$ I
  21. UF_print_syslog("Failed to get body from block\n", _! f3 e+ M7 g6 r6 K/ Q, y( s
  22. false);
    7 p* K0 D2 W: d7 H, J7 i
  23. return;
    : h& a' w& G7 h" H
  24. }; M& K5 Z' F7 u

  25. 1 _( x' Z8 B- P* u8 H  j1 M+ @3 c
  26. //NXOpen 的方法,以下是java代码
    7 z  t) Z& u2 x3 h
  27. . o4 _, L+ s  H5 K( S
  28. try( C) I# g+ P7 J
  29. {6 [& _. u0 M5 G4 @
  30. Session theSession =(Session)SessionFactory.get("Session");
    / T4 c* m  B9 p9 y
  31. Part workPart = theSession.parts().work();
      I( `, ~) d! v
  32. nxopen.features.Feature nullFeatures_Feature = null;3 x6 z  |1 ?$ [0 P3 n& U
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    2 P. E# E! x0 y2 X. x& X7 N+ Q1 N
  34. blockFeatureBuilder1 = workPart.features(). _
      |* E* z8 v8 J( J6 W0 r
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    1 w# j9 H, l7 z; n2 x7 p) n5 X
  36. }7 R" U8 N$ Y7 Z5 C4 ^
  37. catch (Exception e)) D! J# }8 a6 C" @1 ]9 ~7 ?
  38. {1 n0 n4 W# a: m1 u2 Y
  39. //report error to syslog, Message property on _
    3 T, O, t* C# \- R  R$ ]
  40. exception object already has human
    7 P4 C. h, l0 H8 y' `) i, y
  41. //readable message
    " `: j8 f! {% C. R2 o! m' ?$ X
  42. theSession.Logfile().WriteLine("Failed to create _
    # z  X. }  o  E+ s
  43. block", + e.getMessage());7 R7 u) |, L" R* |" ?( n7 }
  44. }
复制代码

7 J  G5 Q) @( x/ z& Y" N9 c( _5 \- R& g3 D6 V2 ]- x0 ]: g: f  j
: u! k1 M5 b3 |* ?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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二次开发专题模块培训报名开始啦

    我知道了