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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍3 N3 p2 q5 d7 I6 \: N4 D) ?
4 I: Q* N* m9 |* T+ t) y
错误处理; g; x( \% R9 X; S# Y' J
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:% v; g  w7 \* J# V3 s7 V) E2 ^
(1)无效的参数输入# l! F3 b/ I9 n* I
(2)企图创建无效的几何模型
$ {4 T' o' ~% d  a3 S" J. z1 L" o(3)不可预料的调用顺序# j3 A. U0 d5 W# a
(4)得不到的系统资源,比如内存或者文件访问等
. k9 x8 [* S% r0 m  所有输出均为最新。
3 i& f1 i! K0 s' |, oLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
, k) h4 s% f3 }- L) i8 W4 }$ r) i) x
2 错误侦查5 \* Z' t: o: a
通常返回错误状态或者异常。
& d: S4 f* p& w5 A- l1 q对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
5 U+ n# w$ g' R. A- T3 @5 U. ?对于NX Open 通过 Try/CaTCh的架构进行处理
( W8 w' R  }# |( M1 S, @# [3 错误报告( G& p, {* x1 P* ^
(1)获取错误信息
1 j, y4 u" T  {4 b) O错误信息,获取一个错误码,并有一段可读的错误消息
8 }1 n7 H: ?0 {" Z0 ] ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
: g. C# j/ y5 _2 j NXOpen 通过NXExcepion处理- p& |0 T4 V$ K6 V) a6 k: i
& S; b% ~6 x$ ^
(2)建立报告% ^) v# h0 P  a6 Z8 s
需要增加信息去报告什么操作导致报错,以及如何处理
  t2 @+ D! _( i4 }: @
' y) O* Y4 W9 p* Q! y (3)报告错误
2 H& i* V4 x  [& W+ ` 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
0 A. @2 ^8 x  x5 f, g# l  _ 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。) F. M8 \) J8 l( u6 n: v

6 y$ K( B# w! ]) s (4)错误修复. B  Z3 b1 f7 {0 O
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。7 O6 K& R0 j8 o1 f+ e
NXOpen提供的错误修复包括:
8 M- G# U" k4 v, ^) H6 i a.方法定义给于异常处理,让程序员来诊断错误
' g8 F# u9 o* {6 W  V b.当方法错误的时候,可以返回NX回话和part到一个有效的状态  G2 ]/ I4 j" D* [( O
c.UDO进行处理,去返回曾经的状态/ h3 N: @5 P9 D* L7 p0 G

! f: ~9 _4 Y- v% A

  1. & |7 K+ I6 E3 o# }% d( u% m
  2. // ufun 的方法, K( d: H. n4 m7 ]0 l

  3. 0 A% B- u  L, s5 {
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    % B/ e' X  k7 E' S
  5. corner_pts[i], edge_lens, &features[i]);% h; j  Z) k! o6 ^
  6. //check for return value
    & G* R' {7 l; O* @" @
  7. if (status != 0)
    , `6 M  ]$ q+ L( ^% L  Z9 O7 g4 E6 p
  8. {- F8 ^9 z' s$ o. P. J, z
  9. //get the human readable error message
    9 J# u) p' J3 R; T9 n0 b/ K
  10. UF_get_fail_message(status, ugErrorText);# P0 k: F' ~5 ?* C: |% B
  11. //report error to the user
      w$ s6 t$ ~+ W% [. H+ i  p+ G
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    6 g7 {* |8 H5 C3 z  A( O" K5 i
  13. &ugErrorText, 1, ..... );/ L% P# x# u" q: ~# V. s: n- I
  14. //report error to syslog
      K# O; n2 y# N4 V
  15. UF_print_syslog("Failed to create block\n", false);
    7 F/ Y  ^& ~4 i# {* v$ R
  16. return 1;' q8 V" H1 K/ ^+ w
  17. }
    9 g- B1 a" h' W( y4 r* P
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    % u/ I5 y8 E1 Q9 p
  19. if (status != 0)+ w: P4 I# K2 V; @+ E/ _
  20. {5 b% K2 G' n: C3 |) k$ m" ^1 e! m
  21. UF_print_syslog("Failed to get body from block\n", _
    0 Y: F2 a7 s- {7 g: F
  22. false);
    $ k1 ?! u- t# |. V$ H8 d
  23. return;4 R6 T% B( D% o* c; d3 \/ }
  24. }+ g8 |/ i" a+ c$ a5 J

  25. 3 E0 P: N% _( w) \6 K9 J1 I7 E
  26. //NXOpen 的方法,以下是java代码9 c2 o0 d3 H( X9 M

  27. 2 u0 l! I3 m# I8 j- h
  28. try% c. C8 ?+ r. s
  29. {
    2 o. B/ n+ q, l" Q) k
  30. Session theSession =(Session)SessionFactory.get("Session");+ I5 F% x' L; i3 m: b8 C7 ?
  31. Part workPart = theSession.parts().work();1 N' R7 a! n# y8 `
  32. nxopen.features.Feature nullFeatures_Feature = null;; E: c* B3 c7 @. D. {
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;8 H5 P, |' k- A
  34. blockFeatureBuilder1 = workPart.features(). _
    . @* |' I+ Y0 T2 j& Z
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    , r, Q  Z6 Q$ i! P& s# }
  36. }
    4 Y0 s5 q/ g, U. @8 M
  37. catch (Exception e)
    7 J: A, @; A; q2 s+ k
  38. {: k* @: M4 M3 P
  39. //report error to syslog, Message property on _
    5 W  [6 o5 m1 z/ F/ o; D
  40. exception object already has human
    + Y! V' a' M  w/ m" \8 }7 a
  41. //readable message
    : i" a# C  M* ]2 a, G8 K
  42. theSession.Logfile().WriteLine("Failed to create _
    3 p6 s, M. v* e/ Z1 Q+ P
  43. block", + e.getMessage());
    . T1 L  Z! _" Z" D
  44. }
复制代码
( y) I, `/ \0 y3 v% G; L
. p+ i# q- o" h$ K1 R! r* D. b
9 Q9 C6 ?0 u! V# ^- M! ]* B+ F) h
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了