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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍5 l, t4 ^+ V. ^6 E5 i9 I7 O

! d3 Q+ L, l5 w3 l错误处理
9 i# b# p+ |/ p: R" }% c1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:5 C* B  n# q$ a! }- r& A
(1)无效的参数输入- L& j  j9 x3 [
(2)企图创建无效的几何模型
  C8 H7 B- p/ H(3)不可预料的调用顺序; d+ Q: l. w  i, H  \
(4)得不到的系统资源,比如内存或者文件访问等
) E6 H8 o. ~3 v+ y! V- X" b. F  所有输出均为最新。
! `( P4 N- D$ v! s( N1 i& E! i* WLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入* R( T8 H1 H- s5 M
& L/ }0 G; _  Q$ }  Q
2 错误侦查2 \4 D' k# q7 q, |: ]
通常返回错误状态或者异常。, C( L- E! W% D- u. E- X0 B2 ^2 m" Q: n
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;. Y! l7 N" n8 T# O
对于NX Open 通过 Try/CaTCh的架构进行处理
: \/ i2 h' H5 k8 q3 错误报告
8 [0 j6 r5 K3 B1 ^1 @4 }(1)获取错误信息& H! g7 O! A% d  C' s! r+ H4 |
错误信息,获取一个错误码,并有一段可读的错误消息
, j4 Y+ Y8 k/ H% N! l ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
+ q# ?2 U1 z1 ? NXOpen 通过NXExcepion处理
5 L3 @8 x' D8 M# c8 i / |! H! |+ F$ M  r8 e5 O- E
(2)建立报告
+ E, x% S1 b* ?$ C$ V) n 需要增加信息去报告什么操作导致报错,以及如何处理& b+ N2 `" L$ j- T

3 e* M. m6 k! j" N (3)报告错误
; d7 m# x% k1 y. ^ 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
' t6 F9 q3 {, Q. I0 { 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。& [/ |1 d, Q1 d
% g' `1 N$ }* j: e
(4)错误修复! r4 m+ e2 K) c5 a: ]
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
: ^% U3 T9 U9 N( C NXOpen提供的错误修复包括:
) H$ Y  \& g2 y5 E, Y* r a.方法定义给于异常处理,让程序员来诊断错误
" B8 D/ d) j% Z. a b.当方法错误的时候,可以返回NX回话和part到一个有效的状态9 \' j$ P! D6 |, O" ?4 I* n& @  X
c.UDO进行处理,去返回曾经的状态
+ M- K  A: w1 e4 |$ z6 J0 A, H* h1 S, u

  1. : B% E; x+ [) A% b
  2. // ufun 的方法  s9 `1 x2 B! B4 i- d

  3. 8 p; ]9 F6 u/ X" ?2 @3 ]
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _" U1 q# w7 D) q4 ]2 x
  5. corner_pts[i], edge_lens, &features[i]);
    5 `* [. F+ J0 d: f% A8 p- m/ h
  6. //check for return value# P6 @/ `9 k# G/ Y
  7. if (status != 0)
    " P7 T" \5 h7 g* s
  8. {  d- Q) C, @/ o, Q- {
  9. //get the human readable error message, W1 |( p: n+ \
  10. UF_get_fail_message(status, ugErrorText);1 [0 h3 M% P& B5 P- g; K- `! S
  11. //report error to the user. h* W2 l; {7 h, \
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _- [4 b- S9 Z: b! ^' g
  13. &ugErrorText, 1, ..... );
    7 N9 g$ B: E0 Z1 y) [: ]* W  L
  14. //report error to syslog8 u" q( J& m$ T) M
  15. UF_print_syslog("Failed to create block\n", false);, U4 f+ N3 X( K* v
  16. return 1;
    , f6 p" j, U6 l& e3 x* G
  17. }! Q* R: K6 X+ t* C4 j; O
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    % N9 A  b2 `- Q+ T8 F6 H( X; H4 \
  19. if (status != 0)
    8 \/ Y0 F( m4 c  ]% T: n
  20. {
    # ~; T! D' H$ [9 [
  21. UF_print_syslog("Failed to get body from block\n", _
    " J" ?: m) O3 C! E. ]+ O( T8 j
  22. false);
    4 R0 S" {7 [" K0 y3 C$ ~, k6 a
  23. return;. D* U2 Z4 z' `! {) \8 j3 \
  24. }4 R) o9 W2 J; [: {6 ^, @& L
  25. 7 q+ S5 ?) c( e1 v3 C/ S: V
  26. //NXOpen 的方法,以下是java代码
    . T" ^6 c2 y$ b
  27. 8 q  Z& c" ~( O* Y
  28. try
    8 F( H* o, T" a) N+ f1 B
  29. {8 d5 u* E2 D8 ~; i% {; \
  30. Session theSession =(Session)SessionFactory.get("Session");
    0 q- l) ]1 R' d0 I5 K
  31. Part workPart = theSession.parts().work();* z. N& x* ~, S9 i4 E4 r. @3 {
  32. nxopen.features.Feature nullFeatures_Feature = null;
    2 k5 L" U" I$ h% a4 G6 ~' r
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;+ {, U4 W" [: K# Y8 v
  34. blockFeatureBuilder1 = workPart.features(). _' K4 Y) r5 p1 u$ k9 {
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    ) \& \- `# d2 Z' S+ S  Z1 C- }
  36. }3 g' t. u- E% A; b
  37. catch (Exception e)
    ; x; J/ e0 r/ P8 ~
  38. {! I$ i  c& k9 Q2 _% @
  39. //report error to syslog, Message property on _
    5 v7 w9 ~, I+ D: Z* m, E, c5 G' {3 I
  40. exception object already has human
      v( D* R6 d% n9 b$ b
  41. //readable message# h) L3 l0 x1 Z: w3 ?' ]7 X
  42. theSession.Logfile().WriteLine("Failed to create _! u$ H% M( B7 P
  43. block", + e.getMessage());, f% G( m- i' M
  44. }
复制代码
9 V$ h1 z5 d7 z% I9 J) F/ e) n$ F

/ g7 ~. }* G5 a1 {4 C: N
/ r' [5 L! x, E9 N/ V$ F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了