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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
- ~# j7 y# ], N. v/ f7 i) H9 Z! L2 ~
, G4 l8 ~+ L3 z错误处理
) N6 s; n+ W: {$ s# H1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
  W/ o- U: z+ e* S0 H; e(1)无效的参数输入% i! m5 @" ~1 I  l* N) \( }
(2)企图创建无效的几何模型, I1 V3 V  j+ d" l1 @* h3 z7 {1 w) G
(3)不可预料的调用顺序
& O) A$ H5 f; W(4)得不到的系统资源,比如内存或者文件访问等% }% r7 B3 m6 v: c# o- O
  所有输出均为最新。6 P$ E2 S- G2 p3 H/ O
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
8 |- A& t& n! ?4 o$ Z+ J+ C) W! W# m
2 错误侦查
* [: Q0 ?$ f! D通常返回错误状态或者异常。) }4 B  R0 ]" k7 K  u
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
9 q  Z3 M5 d4 B对于NX Open 通过 Try/CaTCh的架构进行处理
/ v" U! d  x' n; [+ X6 j" E/ p- r  E3 错误报告4 \* |5 y" ~, A8 T6 G- J
(1)获取错误信息5 b; C. s" p8 s' m, l$ X
错误信息,获取一个错误码,并有一段可读的错误消息
8 J( o$ }& p' ^# w) h3 Z; g ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理: d+ L8 i; v" A! p; T! [( W
NXOpen 通过NXExcepion处理
: b! A( b3 v) Y& ^1 v 9 r4 C2 a+ j" r! p3 b
(2)建立报告  ^& f% E5 K0 c
需要增加信息去报告什么操作导致报错,以及如何处理
8 E/ _/ g* Y6 C  ~/ y * h/ Y9 w$ `; ~* w% g. |
(3)报告错误( R- E/ P: h! Z! B7 b
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
4 {" q7 }& S1 j' o& e 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。7 x; `* q7 D5 H$ {, Z  v0 C6 b6 K
; S0 ]# [5 N1 O; ~/ r
(4)错误修复8 \8 K8 t, A% `
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
# L9 {, n8 w- t1 p7 z& j4 v! ` NXOpen提供的错误修复包括:
( ]5 Q) Y' J8 b6 v a.方法定义给于异常处理,让程序员来诊断错误* e3 J/ v0 a- q
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
, {3 g0 I4 [8 I  P c.UDO进行处理,去返回曾经的状态
0 K" C; c8 V# \- A5 ]; C
4 w9 X- D! a9 o- y: E7 o2 Q& `

  1. 6 G3 q3 x+ B5 o! R6 F  V
  2. // ufun 的方法
    # E. j! L; J$ |4 `3 V$ l0 W
  3. 9 @; I6 z. u+ e% t2 h) F( e& X
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _: g6 P  e  L4 p$ K% {
  5. corner_pts[i], edge_lens, &features[i]);) Z  L- p+ M, \. B1 O
  6. //check for return value
    " j8 U3 ^6 B, H9 N4 \) t! U( n
  7. if (status != 0)2 g3 V, G9 ]% U
  8. {
    ! z: C+ }% N6 A
  9. //get the human readable error message
    ( u, V8 R4 G" Q# S0 R
  10. UF_get_fail_message(status, ugErrorText);- ]. s. g! b. O5 `
  11. //report error to the user
    / P9 j! H- \$ V. T$ J% S% o: a; T
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _" a3 J. H3 ?; Y
  13. &ugErrorText, 1, ..... );+ Q) z3 S1 z0 m: K
  14. //report error to syslog
    ! k/ [1 E5 G4 R4 ^1 q4 d: X
  15. UF_print_syslog("Failed to create block\n", false);7 a' R( p) \& ~5 i
  16. return 1;& H, o# ?6 G2 ~+ C
  17. }
    / F5 y/ m1 ]8 t1 T
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    , L# }, t4 u' W- A, Y4 _" [
  19. if (status != 0)/ u- [# n0 O. |+ T1 L
  20. {
    & |# n9 a& t. t2 L1 N
  21. UF_print_syslog("Failed to get body from block\n", _
    ; R/ Y: c" e( f  o  P! ~6 k
  22. false);
    + c/ q, C. d6 |: q1 f
  23. return;
    + P+ K% D/ V/ O/ X; l
  24. }
    # n& R; b2 j4 T2 I7 V1 t

  25. ; S" h: n4 T+ X
  26. //NXOpen 的方法,以下是java代码
    / o/ N9 w6 G+ {; R" W$ O

  27. 5 l9 A( ^+ ^) ?/ H4 k# B' U' M) B
  28. try7 I" U* B+ _- x6 J( E: k3 n( f
  29. {# P7 I( a: x5 l) F* ]7 X0 t9 s' N0 o
  30. Session theSession =(Session)SessionFactory.get("Session");0 e* w/ H. O( _4 X" p; ~( a
  31. Part workPart = theSession.parts().work();
    . a$ |  L- D# p
  32. nxopen.features.Feature nullFeatures_Feature = null;  V% q6 ]+ ?- P, J4 K
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    ) g6 d" A: {8 L9 Y% ?& r: B% ^
  34. blockFeatureBuilder1 = workPart.features(). _
    * j* j6 |6 h- A! `( l
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    * K9 u! a5 z- p. b/ I: P+ _
  36. }3 ?0 F6 t  J& w" [* N5 n* D
  37. catch (Exception e)/ G9 K" ]$ c, p7 J% C1 M8 z" `
  38. {7 {; s, Y" M( j2 h8 U+ z
  39. //report error to syslog, Message property on _
    , c9 C2 h8 ^& V7 `
  40. exception object already has human
      O+ Z; N1 @* ]3 I, S
  41. //readable message- n2 o3 ~* Z# p7 c& \/ @- d
  42. theSession.Logfile().WriteLine("Failed to create _$ v- @8 p# u  M
  43. block", + e.getMessage());
    ' j8 r) _* @: l! Y) x
  44. }
复制代码
3 |* R% b" h% w4 W
" }6 Z! k" P, F! V; t9 f+ G
* \" d) X+ L% b5 A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了