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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
) W* ]( @, v3 x& b8 q$ S+ }! k9 k3 Y9 o0 ^( m8 H3 C9 ?1 H; U8 P
错误处理
" c+ s# k  [7 D* ~1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
, I0 o. n1 R% y; Q  H(1)无效的参数输入
0 J: R# X( V" @* Y- ]8 n* F$ V(2)企图创建无效的几何模型. O% `5 a! \  Y3 |( Z
(3)不可预料的调用顺序
8 H+ K2 n! i5 R7 E3 A8 m(4)得不到的系统资源,比如内存或者文件访问等
; C! O6 {+ i0 I; p( K: j0 N  所有输出均为最新。. }8 Y5 \) e! M+ _0 E
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
3 p  c& l) r. n% d6 L: y& s0 n
2 I9 E: o6 V" ?) M* q! q2 错误侦查
) b8 C1 h5 ^, @: r通常返回错误状态或者异常。  y& j  \' J: H  [, f* q  Z
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;9 W. f# F. [9 b) V
对于NX Open 通过 Try/CaTCh的架构进行处理
8 t$ s, B9 e: u6 p3 错误报告, X) |  P  E; Q1 |- J2 T
(1)获取错误信息
& x, q1 y6 `8 }& K5 I错误信息,获取一个错误码,并有一段可读的错误消息
* m4 z) F% W% m! E* V/ T ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
! I0 G# i6 L' P6 } NXOpen 通过NXExcepion处理
$ e4 z: u0 ~: ]! A) w9 C& A
% {3 K# h/ o' X* T5 a (2)建立报告
" V( h% E' i. L 需要增加信息去报告什么操作导致报错,以及如何处理
6 a# A0 v! i1 w  S
( C  e( R& ]. e7 f9 V9 E) v$ W (3)报告错误
) }( b0 P( u; b& f, i 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。7 J. @( U; T4 Z( H1 C" n1 O
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
! I) K. }0 k% o8 b5 ~7 X) C1 f( u % J" x4 d% c: G$ W
(4)错误修复
1 Q& v5 W. }% i+ A3 ]7 k 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
6 ?8 o% @  @* r! ]: D( ?8 H) b NXOpen提供的错误修复包括:
9 o. O9 Y+ A: A a.方法定义给于异常处理,让程序员来诊断错误4 A1 K: O, c3 g8 O, X
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态* n2 |' P1 a5 S# `
c.UDO进行处理,去返回曾经的状态
1 c+ M+ _! o$ ?' ~2 Q
- R5 [0 [4 A1 s  |& J; c
  1. ; Z" F5 O& [2 R* T
  2. // ufun 的方法
    : Y5 g% j" x. ^$ p

  3. . {1 K' G. I0 e6 H
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    ) h& m6 B) {: X1 s7 L, K
  5. corner_pts[i], edge_lens, &features[i]);1 E7 c8 o( w; D8 r
  6. //check for return value# x- p$ x7 p" t" A
  7. if (status != 0)  P) J6 @$ q: c  E3 l6 j
  8. {  k3 d$ D* X9 t) N0 x
  9. //get the human readable error message
    ) B! b( V& P1 [
  10. UF_get_fail_message(status, ugErrorText);
    ; k. G" x4 w: L; p. ]' \
  11. //report error to the user
    8 z4 m9 ^9 ]$ M0 E, T
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    ' s7 x% {' O3 C( J+ f. U
  13. &ugErrorText, 1, ..... );
    1 J( H9 q! L5 }, f
  14. //report error to syslog
    4 b: q! X" X/ h8 a& x6 ^  h
  15. UF_print_syslog("Failed to create block\n", false);
    ( P" |! ^$ ^, \6 |) J* d8 E" ?
  16. return 1;
    7 y  z) o% D$ Z* N, v
  17. }( ^- `5 ?  }9 H5 @5 ~
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);7 u( V2 r/ Y9 H' `! J/ \9 t$ U- \
  19. if (status != 0)
    2 D5 f3 J5 ^: k" C3 a7 I
  20. {
    $ L. Q; m! Q+ R+ n7 K$ j
  21. UF_print_syslog("Failed to get body from block\n", _) \9 [! L) i8 @& Q# N9 V
  22. false);
    ( d  d6 M7 w- H* E! x) Z: d, x
  23. return;
    $ R5 \/ J: F6 ?, J' @: c
  24. }+ Z" ]3 \. G; ?  T: X, ~

  25. 6 X) f1 q, c5 h- y/ @/ d
  26. //NXOpen 的方法,以下是java代码* A' Z+ L; j) d" p0 `

  27. 1 f8 w' v! G5 K* r  W5 }
  28. try
    7 L7 H; i5 s6 f  m" G8 u9 `7 P
  29. {( ~% p8 k5 X4 t; [# |/ ~1 x
  30. Session theSession =(Session)SessionFactory.get("Session");
    3 C0 c; u1 A5 h3 d9 G& o
  31. Part workPart = theSession.parts().work();7 P; U! O4 D1 t% _2 s8 A6 S7 `
  32. nxopen.features.Feature nullFeatures_Feature = null;% B. ]3 ?  U. r
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;: c. Q+ s2 R; T- w* W' \& ?
  34. blockFeatureBuilder1 = workPart.features(). _
    4 Q4 V& U8 X8 A  z
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    2 p8 y/ X2 U" q) e) i7 o8 u* [
  36. }
    ' q# e9 Z/ l: I+ e* d7 N7 _
  37. catch (Exception e)  E+ y4 j; \/ t. t% m
  38. {/ F4 a+ b' V/ w- E6 }" ~
  39. //report error to syslog, Message property on _
    5 T  A4 |1 y3 H& k* i2 p
  40. exception object already has human
    3 Y9 w/ M. b+ m- i) P- M) s$ d( V
  41. //readable message
    " |0 h8 r* U" B
  42. theSession.Logfile().WriteLine("Failed to create _% v3 G- f' p1 u4 \  z
  43. block", + e.getMessage());& g5 C$ s% t% Y! ~3 b! R
  44. }
复制代码

6 |, Z2 M5 S1 `0 x2 z9 U
7 T9 n+ d1 C! t2 S2 ?7 H9 Q
) y1 s9 ~; _$ Z+ O8 y
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复2

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
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了