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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
1 k- r, P3 }7 \3 h, P
  {- E& j1 a) Y1 ]5 v错误处理
  t  p; u" N/ m' h# x! Z$ W1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
6 F# `! }0 R* L& G9 H(1)无效的参数输入" p; g$ n+ Z8 H$ y
(2)企图创建无效的几何模型
: S+ V+ h: x: W! b2 R(3)不可预料的调用顺序) [9 y4 z6 @3 q" K; |! C* F
(4)得不到的系统资源,比如内存或者文件访问等; j( e( |; h0 W1 l! Q
  所有输出均为最新。
$ `1 q, a+ i/ n6 ELINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入. v( ]1 r4 u$ C4 H8 [+ q

6 Y& L1 r, v& w1 ^2 错误侦查7 K3 h* l% N7 B* t  k8 k
通常返回错误状态或者异常。7 p& R  P2 U9 ]
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;+ W0 b$ p5 H* M% C, v3 {6 ]
对于NX Open 通过 Try/CaTCh的架构进行处理
  s9 i+ z1 V6 e: d3 错误报告$ G) e2 h1 x+ h  j6 X* `
(1)获取错误信息
. C3 A# J7 [2 D: f5 _4 m错误信息,获取一个错误码,并有一段可读的错误消息$ w- f; {9 F; s
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理9 u. U& {: A9 k4 u
NXOpen 通过NXExcepion处理+ I" k& M9 E6 F# _$ u' }1 j( d

& F5 i: _3 q$ J" A& \! V" s (2)建立报告
7 S! i/ q1 |- h& f$ Y0 ~ 需要增加信息去报告什么操作导致报错,以及如何处理$ R+ J/ V* O. ~4 C3 I

& x3 g; K$ J! C7 O% X5 z, H1 ~ (3)报告错误9 d. J7 W- b$ E
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。3 _, f) X; V) F, I' l
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
' b$ A9 h: ]6 o0 I# _2 t4 x
! ?/ a+ @$ `" \5 u5 o% R) k (4)错误修复. B! w- ^* k+ o# v
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。  h! A" h; T- N
NXOpen提供的错误修复包括:
/ q* |" M7 E. t6 U# Z/ O a.方法定义给于异常处理,让程序员来诊断错误
! |% [7 V! o. K b.当方法错误的时候,可以返回NX回话和part到一个有效的状态- J0 z: H* K! U
c.UDO进行处理,去返回曾经的状态( B0 c7 [- C0 S& Z4 [; e+ z) i  p
9 w, y5 Y* {9 M& G5 m. v0 Q

  1. . i8 K/ T( B3 X( J3 P
  2. // ufun 的方法
    $ }" k7 E, h7 ]' j

  3. # R/ \  i' [, i
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _7 P$ |6 C% k4 A# X. C0 T
  5. corner_pts[i], edge_lens, &features[i]);
    2 f/ K. u3 L! H6 X
  6. //check for return value
    9 ]0 M% x: W5 }/ y* |/ Z
  7. if (status != 0). K* ]* O2 n' Q, @  [
  8. {( L$ F8 i1 X0 Q9 r7 R
  9. //get the human readable error message
    5 P: h% i& @( D
  10. UF_get_fail_message(status, ugErrorText);$ p/ h1 h4 l/ X( u& ?/ K4 r
  11. //report error to the user
    , z$ I$ m- N- F7 t( T" i
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    7 G+ F! M0 _+ K
  13. &ugErrorText, 1, ..... );1 R6 G1 ^5 [. a- C0 N
  14. //report error to syslog
    & a8 ^9 d/ o/ ~) l$ {- M
  15. UF_print_syslog("Failed to create block\n", false);
    # D: Q1 p8 y0 r6 v. i) x6 u1 e- {/ \
  16. return 1;
      q$ H5 Y) x* }% \8 O  g
  17. }" F; X( @- _8 j9 s; Z
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    ) Z6 r7 n+ h! _1 O$ N6 k
  19. if (status != 0)
    , |7 M! _: J- I& B5 k! K
  20. {
    1 A6 @: f0 K7 m- P% S% Q7 \8 E; R! l
  21. UF_print_syslog("Failed to get body from block\n", _
    0 b) a/ o: |" I( U& e& c4 b/ E
  22. false);
    , X( H4 H8 i( F1 M6 j7 {. d8 g
  23. return;
    . X& G1 u, T: `0 ^3 ^; ^) J
  24. }
    & l5 [- Z) t( v' q

  25. - o# p3 {9 x( f/ ?8 A& B, e
  26. //NXOpen 的方法,以下是java代码  b) Z3 o3 [' z, K2 ~) I
  27.   G+ y! x5 S4 V- Y9 d$ h, @5 w  D! H
  28. try6 A. B9 X4 B, Z% `' N7 F
  29. {
    ; x+ j. Z' r% w/ q+ l' ^+ B
  30. Session theSession =(Session)SessionFactory.get("Session");" Z( Z/ T, I7 R) Y" k- P
  31. Part workPart = theSession.parts().work();7 P+ \& G8 v. [* B  C5 T) m' o
  32. nxopen.features.Feature nullFeatures_Feature = null;9 |$ L' n. h. s0 @8 K. g) [1 \6 `; [
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    + D! m/ [5 i- ~8 f
  34. blockFeatureBuilder1 = workPart.features(). _& \( o4 Q4 s8 Y. o
  35. createBlockFeatureBuilder(nullFeatures_Feature);! [! g+ S3 m3 q+ L. [1 Q% d5 m
  36. }
    ; E+ k9 D/ t  m
  37. catch (Exception e)  \) Q0 w! D  k/ z1 f
  38. {
    ( y6 z6 A3 v! s& R
  39. //report error to syslog, Message property on _
    % Q. S8 h  n6 q' q- D
  40. exception object already has human; y8 [; a4 r' ~; v4 o  S+ a; c
  41. //readable message
    , g5 |5 H' I: k6 `( c
  42. theSession.Logfile().WriteLine("Failed to create _
    4 a% S9 J8 H2 c4 \0 L" r
  43. block", + e.getMessage());
    4 x& j1 D0 [( v5 S% M
  44. }
复制代码

- p+ B# `# L9 X: F1 ^8 f) s5 V* Y9 U4 j8 D

8 _& D, Q' @4 r6 s! J+ O  c8 Q
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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二次开发专题模块培训报名开始啦

    我知道了