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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
9 V4 R+ i# G6 G% ~* Z& m' v% I7 p1 X# F
错误处理  h3 ~* C- B6 W$ S7 F
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
' v0 {4 {; N" v# ^8 p" w, e1 O" J(1)无效的参数输入
6 o4 I5 k/ F* z! L(2)企图创建无效的几何模型4 {5 j7 ~( W1 x# O; g
(3)不可预料的调用顺序
6 i: v- v7 L, V" S) H9 v(4)得不到的系统资源,比如内存或者文件访问等
" s8 B% M( K' F1 o6 Q* A- t  所有输出均为最新。" c0 i7 z" G) K2 k0 J- Z' B
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入! G  a5 f3 n5 k( |$ k  F9 |1 f
8 [8 Y9 F& p5 L
2 错误侦查
& n" h) h. r9 e3 T通常返回错误状态或者异常。3 z/ {" i' K/ Z! c; x( b- ~
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
1 H" q0 h. Q7 G0 ^0 x: \  \对于NX Open 通过 Try/CaTCh的架构进行处理$ j! L0 w/ a( ^1 H
3 错误报告
0 k' j! l* C$ L$ ?9 t(1)获取错误信息: X2 D) u8 ]2 r1 k# R
错误信息,获取一个错误码,并有一段可读的错误消息% l9 U; O- X9 e; @( y2 {
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
2 k. _: _( W" \* } NXOpen 通过NXExcepion处理
0 U5 y  Z, _) o4 y : X1 s+ o* n" l+ c3 n" J( G
(2)建立报告- }9 y6 l7 b. J; m: K" a  M% s# V
需要增加信息去报告什么操作导致报错,以及如何处理
9 F& A/ ?$ w+ v( }$ K4 g% \" K6 G 1 M% g' x; g9 X; s9 d  o1 s
(3)报告错误
- Z& T5 u3 ?& ]5 C( b 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。1 a$ E2 X+ u* T; e1 C
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。' R, i# x5 H) d8 }
6 P2 O: B* m- _- c3 S# p: n
(4)错误修复
2 E5 x* y  Q8 V4 G! o 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
& k3 @  P0 K/ _4 x! I, J( p" Q NXOpen提供的错误修复包括:
$ f% [$ G  {5 ^6 A- M! B a.方法定义给于异常处理,让程序员来诊断错误9 a; P, ?' `  |" |. K/ L) f
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态& |% g$ F5 \/ G! T- T# A
c.UDO进行处理,去返回曾经的状态
8 m7 R$ M. l/ R' |$ I9 p5 X  i, u, r% `' k0 a' G$ w3 G* Z1 a2 P

  1. , e' t$ x, e! \6 F  M. O; X
  2. // ufun 的方法
    & k' i# z  D- l' X9 \- W$ i. a# |: E

  3. ( K5 q3 U4 p5 y
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _$ s9 k9 T* W% m, @7 C+ z
  5. corner_pts[i], edge_lens, &features[i]);4 u# H7 O0 H% \5 g( K
  6. //check for return value
    ; i% c' S1 v2 d  _. M1 m4 J
  7. if (status != 0)
    8 q- r: P- M' j4 M% E
  8. {
    & g( A7 n' ~: J6 e
  9. //get the human readable error message" I  I& p' A+ g+ a  @4 }
  10. UF_get_fail_message(status, ugErrorText);. v; q& l' \, b0 N
  11. //report error to the user
    ! s4 T- r" H5 [" h1 n' }$ O
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _9 l* j/ O& q7 T& ~% p* ~
  13. &ugErrorText, 1, ..... );# w- k( }- K# U) T2 d( g" h
  14. //report error to syslog1 T9 B. |6 G' M6 k& c2 K1 t& ?
  15. UF_print_syslog("Failed to create block\n", false);
    9 I' U* E8 y( z# t; q! W3 Y
  16. return 1;
    + k' V9 A, K9 o& r0 d9 ?
  17. }
    * D8 D& V: ^; n+ u# ~  X9 v9 m
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);) v" d7 z  f3 @* r
  19. if (status != 0)& ?1 c3 F! R7 B8 H  W4 b9 o
  20. {, x: D0 d5 x0 n) ?$ D+ ^! M, @8 m
  21. UF_print_syslog("Failed to get body from block\n", _! L: @  }  H7 x1 U7 x
  22. false);+ `! Z$ Q5 Q1 a$ q0 d$ M1 |* B
  23. return;
    4 i! I8 c' s7 J; m7 S' d" g: b1 P" v: j
  24. }( i9 @6 ^2 r2 u2 V

  25. / ?1 \& u  M; q4 f
  26. //NXOpen 的方法,以下是java代码
    # ~0 B+ H' ?- h1 }6 e2 `4 P
  27. 9 ?+ w  @% L8 @2 G% p' K
  28. try
    & Y/ e# ]$ N8 h7 U% J
  29. {
    2 G* J( I* o! [% s+ N' p# y
  30. Session theSession =(Session)SessionFactory.get("Session");
    ) s9 Z% i3 s) W0 M
  31. Part workPart = theSession.parts().work();
    8 m* Y/ X4 _2 u1 q
  32. nxopen.features.Feature nullFeatures_Feature = null;. Y' y6 B: j- y
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;" O8 M, @" A) i4 |8 q7 F# `% w# |
  34. blockFeatureBuilder1 = workPart.features(). _
    ! X/ v% \1 F# F  U: U' A" l
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    . x' o% X5 n2 ?0 Q
  36. }/ g4 @  ^5 x* V  S% Y0 H
  37. catch (Exception e)
    , ?/ x2 b/ L9 y3 v) Y1 o2 o
  38. {
      Z- j) w; e% j9 h, O0 O
  39. //report error to syslog, Message property on _5 t) Q" t2 q- u2 s. W
  40. exception object already has human8 h6 H7 X: M3 Z& h* M3 c
  41. //readable message
    * d2 m3 g9 ~0 _$ {) J7 D
  42. theSession.Logfile().WriteLine("Failed to create _
    " V) C# M; e+ v+ R: p
  43. block", + e.getMessage());
    . b1 k$ L/ {( [( ?0 o
  44. }
复制代码
( }1 {7 T2 P. E  k1 ]5 c; `
0 J! j, Q' ~5 }5 j& J+ K1 g8 |1 [; I1 N
% ~$ v" L3 D2 l. x* c
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了