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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
/ z8 F; z3 T6 @" p* {/ U- s0 f  w/ Z. a" N; g5 V3 m
错误处理
% B0 Y8 {1 c& \1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
2 m/ p7 I- l: S7 v* D(1)无效的参数输入$ |1 N+ {! y2 w4 A9 \' V" |
(2)企图创建无效的几何模型
) m  S) K: T+ W$ Z3 N5 t9 Q: V. {4 e& Y(3)不可预料的调用顺序
8 m' x" x" [" ?5 y1 p(4)得不到的系统资源,比如内存或者文件访问等
; @* A& Y' E. I8 O) c, M1 z  所有输出均为最新。3 n+ y6 Y# l; f5 p; p' b6 Z
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
: [2 m% Z' {8 l( |+ K$ R. d# ^2 V: P# y% b
2 错误侦查
8 S9 q; S% t+ j  Y) ^" j& O通常返回错误状态或者异常。
9 h/ y- n, ~9 ~& D, H/ g对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;2 Z# W* H( b! K5 q5 i$ {* p# Q# Y
对于NX Open 通过 Try/CaTCh的架构进行处理/ e. y0 m. e4 x7 d; L" {" F7 k' g
3 错误报告
5 D5 r: s! _- y# r5 W(1)获取错误信息* |1 O; k+ w( F7 N- N5 w* h
错误信息,获取一个错误码,并有一段可读的错误消息( e1 i, r* U# _2 l' M3 F; ^$ a
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理# D2 |) l$ x# w+ B, V
NXOpen 通过NXExcepion处理
9 Q; L% r4 b3 c" y
# q9 i9 X# I7 o (2)建立报告
7 h2 O2 S6 p" s8 C0 a 需要增加信息去报告什么操作导致报错,以及如何处理+ }. l7 v7 M" ^% r% M. _( Y$ W
! ?2 d2 P% _( T1 @
(3)报告错误
4 @2 `3 C) V3 o. e& n! l% \: \ 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。$ v7 p# j& o" i# T- A: N! F  b
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。5 V& p' G0 }: P- F3 @7 Y

0 n- G0 \9 v* j' N+ d4 q0 F (4)错误修复
* k9 A7 ?/ ]# b 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
0 w) E! J) M% P4 w NXOpen提供的错误修复包括:
: j5 a. F+ N0 W. q' v; v- E a.方法定义给于异常处理,让程序员来诊断错误
2 w/ _- n5 p% X8 A7 C b.当方法错误的时候,可以返回NX回话和part到一个有效的状态2 f# n, M! `  M: o# d
c.UDO进行处理,去返回曾经的状态6 N( Q, M, @; M) a- c9 [( B! o* s1 l
3 o0 K9 x7 A7 `. s7 f

  1. * L: Y5 p, H% L% J
  2. // ufun 的方法* H/ B& F, `* ?, @
  3. ! U* U, E+ z" }
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _, P* C9 H0 X  {; `/ r) o
  5. corner_pts[i], edge_lens, &features[i]);7 V/ U  N) F  E
  6. //check for return value
    + z: t* w8 N: I8 {0 W
  7. if (status != 0). T- j) i$ ?/ X! G* y
  8. {
    # d0 ^/ o2 `8 U% }
  9. //get the human readable error message  D, v! a- f4 @8 E0 v" h. l4 f  p
  10. UF_get_fail_message(status, ugErrorText);; U  Y8 y3 s- b  P& P. ?- M
  11. //report error to the user
    " e& W  b! i2 E+ B; O' X# N5 |' b
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    ' E# x+ {8 P6 g
  13. &ugErrorText, 1, ..... );+ S, B$ Z& S' w$ T- s8 O& E$ @. `3 I
  14. //report error to syslog
    4 ~' T, R( ?5 E' P
  15. UF_print_syslog("Failed to create block\n", false);
    5 k) H1 ?# l6 k* Z
  16. return 1;( o2 F* o& K7 ~1 k% S0 u9 L0 k
  17. }
    7 n1 d! S3 c, ~! |# ^
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    9 [4 v% j% V1 W) e& t8 G
  19. if (status != 0)0 h& ~6 }7 l' ~0 o
  20. {& Q9 Y0 f6 j& b: k+ x
  21. UF_print_syslog("Failed to get body from block\n", _
    + n% p# @: V6 f9 J
  22. false);
    ! w$ f: v$ }6 |- F9 T! d$ @( L4 Z+ b
  23. return;
    ! ?7 _" _- h$ o! Q9 o
  24. }
    1 k$ ]+ z$ W; u

  25. : o5 `8 `9 X( u! g! F# j  r+ y$ I
  26. //NXOpen 的方法,以下是java代码& K' y: M+ G- C) x

  27. + m: O" f# I! e2 s; \+ h
  28. try
    . v& \& c2 [( f1 `4 \  [
  29. {
    1 f+ V! r0 X4 x, i5 r
  30. Session theSession =(Session)SessionFactory.get("Session");
    ; c( Y9 L" s# Y. B/ P
  31. Part workPart = theSession.parts().work();3 M% K# c$ e* L& J  L9 h
  32. nxopen.features.Feature nullFeatures_Feature = null;
    : x! m5 ^* N; A" h
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    + @% L. ^) G4 U
  34. blockFeatureBuilder1 = workPart.features(). _( R- a! C5 y$ d
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    / k# h4 X: v8 b2 O  q7 L! @
  36. }
      P: J  t5 @1 d: ]) [; J" F& K9 M
  37. catch (Exception e)6 Y8 I) W4 b& U; t
  38. {5 y  T( E- C& C, L1 r1 E( o3 U( U6 w
  39. //report error to syslog, Message property on _
    ! m1 [4 c. p$ u5 z- T% z8 w9 N
  40. exception object already has human
    ! D, e# k; q5 ^- x& P
  41. //readable message& H* V3 C; g* B7 {6 j9 z+ ?
  42. theSession.Logfile().WriteLine("Failed to create _
      s; @; t0 h; \1 i. c, k& O
  43. block", + e.getMessage());" b( C7 Q$ Z/ s' K6 S1 I
  44. }
复制代码

8 X$ q/ |, Z: r3 H. m  X- Q9 t8 v: ~/ K8 G2 u
& h4 l% H6 j9 K- Y6 t0 P' i
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了