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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍/ n% c6 C5 z- `; `: h
* i3 a/ @8 g2 ]5 Q* D
错误处理
' ~* L: H$ H! S% R( ^1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:( a0 U" T; z7 W2 f
(1)无效的参数输入# n/ R' m, Q1 l) [4 w
(2)企图创建无效的几何模型
4 h; h0 E- l+ x% s8 o(3)不可预料的调用顺序) ^4 R) Z. B. S& r, D1 e5 ?
(4)得不到的系统资源,比如内存或者文件访问等3 k! ]7 ^2 O$ |9 s5 X! b
  所有输出均为最新。7 D" o# H, Q2 A
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入  \: f7 x4 |2 p
) [' j' K. y' z/ s$ w: g: [! x
2 错误侦查( B: X* ?# v3 R( H6 t0 [* \' ~
通常返回错误状态或者异常。; [0 _( X5 b, X  I- [; f
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
, b' g. Q4 P3 }0 ]2 U/ Q对于NX Open 通过 Try/CaTCh的架构进行处理
1 p# J0 |% p7 p3 o2 V3 错误报告3 g/ R1 n, i9 X& H- i* a
(1)获取错误信息
6 E, [- F1 G" `: D# C错误信息,获取一个错误码,并有一段可读的错误消息
2 h0 R8 [/ ^! C" y8 X- i ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理# e  L' D$ H3 K9 N( @1 V+ l' o' q
NXOpen 通过NXExcepion处理: J3 j3 z8 f, h3 _6 o$ q( k+ u2 g& Z6 G

9 t) V8 o. s* J. N: C9 k/ j (2)建立报告
* s! `4 X) J! h3 L% D! C4 l0 l8 ^ 需要增加信息去报告什么操作导致报错,以及如何处理3 {2 q- r' ~4 i7 B, {3 `# w

& d* l+ ~: u, B (3)报告错误
7 N5 B# `# T! v4 N/ h 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。) T- _* \, w' d$ L$ K
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
' I! u4 d$ N, k) L, W( s 6 E; N. J  x6 w) J  {6 ~% K
(4)错误修复
, y: y6 a- t& t1 M! F1 b( @' @ 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。  L, d9 v* o& c7 w- [
NXOpen提供的错误修复包括:  r8 S7 S5 Q9 M5 n# ~  N4 F2 H
a.方法定义给于异常处理,让程序员来诊断错误
1 \3 k; k' g+ R3 k% b- N4 @ b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
/ c4 g: S( O0 e- b, ~ c.UDO进行处理,去返回曾经的状态9 B$ S  _$ m, y) _0 d

' s4 [0 x: ^3 S) d. t
  1. * C, W% H# o4 Y8 Y  g$ e+ o
  2. // ufun 的方法
    $ y- D& e/ H( `  b, ~8 \
  3. 0 n5 t; L( `7 V6 Y, M/ l) X& G
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _: I& `& j# M7 P) V& ^
  5. corner_pts[i], edge_lens, &features[i]);
    5 W1 h% Z7 i. H- t3 P' T
  6. //check for return value
    % X3 c0 C+ I4 c: V
  7. if (status != 0)0 V6 G% Z. k/ t/ J* E# T$ E
  8. {
    - V, k; [( y/ V; Q
  9. //get the human readable error message
    : h/ F3 k2 _6 h* ~, b8 z
  10. UF_get_fail_message(status, ugErrorText);8 o* y5 y% C* K' X0 Z0 F/ w
  11. //report error to the user' q1 \( O; R# H1 _0 {
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    3 z% y. e9 l5 s4 G+ |  H
  13. &ugErrorText, 1, ..... );  G: N! X8 U- ~5 N4 P
  14. //report error to syslog
    ( s4 {6 S  ]& q& t+ v2 [
  15. UF_print_syslog("Failed to create block\n", false);
    ; }9 g* y1 ~% S( q
  16. return 1;
    ; u8 `. e) g: _1 p( V
  17. }  g( H6 f4 [& D4 _, w  c3 V
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);) L) Q1 f. s0 X5 _; `  f/ a; V
  19. if (status != 0)
    8 q: r6 |  M9 a. ?9 J4 N
  20. {
    0 D) j$ M, {( s- s& u4 _! h8 S
  21. UF_print_syslog("Failed to get body from block\n", _% a; i0 w/ N- J! R& X
  22. false);! B2 A; I% ~& y% o9 E0 R- p
  23. return;* @* N6 H  r8 ~) O* F
  24. }. u! ?9 u. `3 Q0 o. A
  25. ; x+ ~$ \: d" O# a" m' K( s+ f7 H6 `
  26. //NXOpen 的方法,以下是java代码; Q; K, \! I7 i6 q7 s  \
  27. 1 E) E7 g: D. x) t+ N9 |# [
  28. try7 T, y+ _; j+ n  b  R
  29. {
    ! x) j/ e9 h- F
  30. Session theSession =(Session)SessionFactory.get("Session");& U" {8 k3 {2 [* H5 }
  31. Part workPart = theSession.parts().work();
    ; C7 f/ F/ b) k( R5 ?4 D) w
  32. nxopen.features.Feature nullFeatures_Feature = null;% m- U# Y/ |) V. a6 C8 W* K
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    ; x* Y$ d0 s  J' V, R& y0 t
  34. blockFeatureBuilder1 = workPart.features(). _2 K4 g4 G, C; d7 I, @' s. O6 L
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    ! L$ H$ s7 _- J3 p2 D! A) B7 x
  36. }; @% w+ C6 N& h4 L& _. v
  37. catch (Exception e)
    / w7 l) C8 O; ~* d3 p8 \
  38. {6 X6 r0 U1 r# V
  39. //report error to syslog, Message property on _
    ( B; \/ Y$ d: m6 R/ v
  40. exception object already has human
    , y* e. C1 S7 x8 W& e, H
  41. //readable message0 b; `6 Z* A' B  l  A/ V+ N
  42. theSession.Logfile().WriteLine("Failed to create _
    1 s" X4 K7 K; Z; T) ]
  43. block", + e.getMessage());0 v& p" z- e8 x6 r0 T9 X
  44. }
复制代码

1 E  X- n$ W& k& g5 ^$ F' r3 I1 m8 p4 s: a* o4 D) ~: I1 Q& P- Z
. h$ ]* |, i: [* [! L; O
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了