查看: 7959|回复: 2

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

 火 [复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2013-11-8 13:35:27 | 显示全部楼层 |阅读模式

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

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

×
关于NX 二次开发中,错误异常的处理详细介绍
" L! q3 }) O9 U( @  V' Q
9 S5 K2 f% E+ H( |8 n5 e# U错误处理" T# J/ f- [; G0 x, t. v* C# C
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:( z6 z) i/ x7 k: U
(1)无效的参数输入
6 D' r' w/ u$ o* G' L: H' d(2)企图创建无效的几何模型* o# Y3 O$ Q- t1 b" Q
(3)不可预料的调用顺序
; U. [3 n/ ~( ]- b  `& H6 {(4)得不到的系统资源,比如内存或者文件访问等
- X- u6 x, {! r  所有输出均为最新。$ A) |. v, Y0 G0 Y  v' w
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
8 T0 G$ Z( m4 L, {- P
- G0 \* Z/ T  U* j6 v2 错误侦查
- f4 f* L* t0 |( e+ s5 b通常返回错误状态或者异常。+ n1 u0 t( j9 R3 C
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
3 C5 ?- |! \4 K4 N8 A% A8 T9 a2 j对于NX Open 通过 Try/CaTCh的架构进行处理
5 }$ u: L3 D3 c3 错误报告/ d8 t, H' Y% m7 w
(1)获取错误信息! t  B9 q7 O8 Z6 b2 H  F$ H% Y
错误信息,获取一个错误码,并有一段可读的错误消息
+ u6 Y, r- t$ b4 o5 U; z ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
0 P  @! R- e% \2 r. {- Q NXOpen 通过NXExcepion处理' ]7 i  _7 X0 N1 y+ R
. U5 g% h" |  l8 r, g
(2)建立报告3 r3 C/ M6 |2 f2 Q; Z  c
需要增加信息去报告什么操作导致报错,以及如何处理) m* B8 s& L3 L8 L' S

8 z" Z) V6 u9 ~; a& k8 R (3)报告错误4 _% d$ S3 s# T3 |. @* q; s& t
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。" U1 ]) w. b5 {% f! q/ `) x
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。8 B" m9 u2 Z- d" d  ]3 j

" \& o" [' q* Y+ S9 ` (4)错误修复
! S- e; D9 _+ ] 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
* b) G9 S4 P0 j NXOpen提供的错误修复包括:; u7 d! _" z" V+ \8 K" b" k
a.方法定义给于异常处理,让程序员来诊断错误
1 d, H0 Z- A6 w3 f5 W3 S+ y b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
. W" u0 ?) k) } c.UDO进行处理,去返回曾经的状态( C) Q4 z6 D, m. @
: t" x9 t6 R; W- Z& M& U6 W$ F
  1. $ y) Q9 _" w8 U, K
  2. // ufun 的方法3 H4 L3 \# }0 Z' P
  3. % P( O$ w$ b" J+ f5 y7 I+ N
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    3 A4 G2 D! ?& K* c+ v% w8 O( ]
  5. corner_pts[i], edge_lens, &features[i]);
    - w! h6 h  Q1 J
  6. //check for return value
    5 `4 T% }4 |2 J
  7. if (status != 0)7 E' d! K/ P7 b* x8 x: p% P# o8 u
  8. {; h2 A6 c' f: w# ?1 c
  9. //get the human readable error message
    # B. B7 c7 r  x( E
  10. UF_get_fail_message(status, ugErrorText);
    4 N/ w9 N+ J2 h. |
  11. //report error to the user) E% N1 u& R: F7 T& h$ l
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _7 ]2 [. ~$ U6 j% J- Z( Z- K: C
  13. &ugErrorText, 1, ..... );
    5 P; {- h& i0 {) Y
  14. //report error to syslog" L% _, O7 e" F/ b( q) y' l6 E' |
  15. UF_print_syslog("Failed to create block\n", false);+ d: t2 G+ C" n1 w: C! V# e) {
  16. return 1;
    $ {0 l+ g; ~1 _& j0 F) Z
  17. }, E7 t2 ]$ i; e1 s: U- v
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);. p& D7 Q6 I  _( |
  19. if (status != 0)
    ' N1 e) i" g9 x$ W; b+ S0 Y
  20. {3 \" S& _& O& ^! ~; l  C; }+ H; A: o
  21. UF_print_syslog("Failed to get body from block\n", _
    ) m: j- M0 A1 A0 V2 o4 h2 z3 d
  22. false);
    2 I* d1 w* i# Y. ]5 \
  23. return;. `: R/ H/ f5 J( ~
  24. }0 @( x3 k0 |2 W4 J
  25. - `: Z& C& E! a, q# ~* [& I
  26. //NXOpen 的方法,以下是java代码
    ! _/ p* |) A; u" V3 V4 G1 N
  27. . J7 X- t+ e" e7 r4 P+ }
  28. try
    ! N! w, J: o: x! ^3 |, D) ^
  29. {& D2 ]9 O8 w/ f( A. B
  30. Session theSession =(Session)SessionFactory.get("Session");6 o6 g6 b! k' C7 m% p
  31. Part workPart = theSession.parts().work();3 @# U4 e0 K' r
  32. nxopen.features.Feature nullFeatures_Feature = null;
    , C5 |5 S" v0 g0 A7 R. j* l- f
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;$ ~. P: W+ T; k9 n1 i
  34. blockFeatureBuilder1 = workPart.features(). _
    7 J/ N, }! x) n2 _1 C) y* A" M
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    2 i" R1 z' n8 g2 d( @' _5 ~$ f
  36. }1 g  d# d0 X: J; [; o
  37. catch (Exception e)% O2 A9 G6 v/ A4 a" p
  38. {
    * o  Q- a) G% u$ d8 P) P
  39. //report error to syslog, Message property on _
    ; L( o$ a) {4 {0 s0 L
  40. exception object already has human
    3 ~" f& {( U4 U) A
  41. //readable message
    8 [3 F4 G8 H% u' U7 S. l$ e
  42. theSession.Logfile().WriteLine("Failed to create _
    & e. N0 c1 z7 d* G& H
  43. block", + e.getMessage());8 j( O, @' ?. \( A+ y6 _( ]
  44. }
复制代码
# `/ [4 T8 O) U4 v" }, X7 N

0 T- ^" ~6 Q- F5 i
7 Q  R* r* R7 J1 ]
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

0

主题

44

回帖

104

积分

注册会员

积分
104
发表于 2014-9-28 22:06:32 | 显示全部楼层
学习了,谢谢高手
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部