PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
+ V9 u+ e) O9 M1 b5 T. w
* B& P: b7 N& Q  I$ q+ m# i错误处理
/ P. p- n7 w1 m, ~: [9 {" c  x- j1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
) p$ @1 V( o" k2 U3 h4 l) `(1)无效的参数输入) h, y; `; z( F0 w, B9 [
(2)企图创建无效的几何模型
3 Z% h. d8 h2 Z) w' S) T* w(3)不可预料的调用顺序$ P9 S% t/ I2 \; [& S
(4)得不到的系统资源,比如内存或者文件访问等' \% g. U0 i1 J
  所有输出均为最新。
' H/ X- }) N0 t8 h+ RLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
  i; f9 m6 H5 @& O# Z* {% S
* F8 r( @7 A* J1 O1 y  l2 错误侦查! m: I: e6 o$ z0 M' V
通常返回错误状态或者异常。+ b# O0 W9 \3 ]  P- f1 q9 J
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
" c- A# L1 b8 g3 d+ E* U; v对于NX Open 通过 Try/CaTCh的架构进行处理5 ~  D9 ^- A3 }; w
3 错误报告
# ], F/ b& S7 J4 M/ ~! O2 k5 X) _(1)获取错误信息
' R6 s% d2 [& n- Y# @错误信息,获取一个错误码,并有一段可读的错误消息
: T1 ?& E- P+ Q+ x0 {) D ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
0 F9 C: v% T/ P' z6 u1 f NXOpen 通过NXExcepion处理! [' p$ Z6 f) O3 ~8 A" }

9 M/ m1 X3 e# c" ?/ N$ z (2)建立报告
" E1 r8 H! M- x 需要增加信息去报告什么操作导致报错,以及如何处理- L  I( j) T5 r' q$ S1 t

* e" f  w# D# B9 b (3)报告错误1 p# w% G4 K, ?: z  R
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
+ u! ^5 t% V+ f3 ]1 c  r- z2 e$ _ 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。; c! T$ u9 H* x7 Y$ X- D  V* `
) {/ w. B4 T1 K/ K  O
(4)错误修复2 ?4 Z8 i% y8 ]6 ?
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。* V: Q8 ?" m* u3 ?4 D+ o; Y
NXOpen提供的错误修复包括:
7 k- @$ w" V7 @  s5 h" @5 v. S a.方法定义给于异常处理,让程序员来诊断错误
& o% ]2 @3 I+ W4 M b.当方法错误的时候,可以返回NX回话和part到一个有效的状态! F9 _9 c# e; E1 m$ m
c.UDO进行处理,去返回曾经的状态
, e3 U/ Q: r2 j7 v' j" |$ z/ I" H/ u  g$ |1 T6 F0 ^; ?5 I$ d

  1. ) {  K: x% b: @8 d; Q' r0 k
  2. // ufun 的方法* Y1 W2 c  X2 {2 u: [( Q/ p6 w
  3. ; o6 N) t8 [% c2 t1 ]3 e
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _# z6 ^& G3 G) a4 q& O# {
  5. corner_pts[i], edge_lens, &features[i]);" q* m0 B3 M; y: p$ [
  6. //check for return value
    2 X7 f. p7 A% a( [) R0 ]
  7. if (status != 0)
    6 q# D$ j% I& u$ j* x
  8. {( S# B' X1 b  q# W
  9. //get the human readable error message8 V/ X. t2 m& `; c; {/ o. J7 c
  10. UF_get_fail_message(status, ugErrorText);. l: _( j9 M# N9 F- b4 w! D
  11. //report error to the user  E3 l1 c1 e( N) B4 `9 g, e/ v
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _$ O5 G3 k& `9 }. {; m
  13. &ugErrorText, 1, ..... );3 g* y, O* ]8 ]5 S% `  R& L" `9 o
  14. //report error to syslog! J* s0 k' Y  h  O
  15. UF_print_syslog("Failed to create block\n", false);
    2 t" o; w1 I4 [3 M" ]
  16. return 1;
    2 E1 E& D. ^8 g6 Y' w/ ~; R
  17. }
    $ d4 f% u% m6 j, g. Y
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);& N$ I2 J5 F' l3 h3 y& F
  19. if (status != 0)
    9 _5 o4 K0 ~# r8 W
  20. {
    % Q8 C( S/ |4 K5 N; p
  21. UF_print_syslog("Failed to get body from block\n", _+ r- l9 ^* N& a" c! u; \
  22. false);. C  n1 ~4 ?5 t, B  K$ U6 a
  23. return;: B: d+ ?3 I" G# _% m
  24. }4 P# Q0 |8 X7 ~7 [
  25. + f4 Y1 B/ \9 ~4 }( j
  26. //NXOpen 的方法,以下是java代码$ {( {  \! z6 y+ v2 c) e
  27. - L* U4 r  s9 y
  28. try
    3 `% n0 ~# v; e+ y6 f- k( ]5 |" a$ P
  29. {
    , e9 C4 C# I( G4 J1 |' R- `$ L
  30. Session theSession =(Session)SessionFactory.get("Session");( Y2 P; z! B3 g1 g0 A
  31. Part workPart = theSession.parts().work();/ W" W& `, [9 n: ~
  32. nxopen.features.Feature nullFeatures_Feature = null;+ [) \! N8 ?; m& Z* }6 e. c
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;6 D! a  @) R( T( Y( h" |' q
  34. blockFeatureBuilder1 = workPart.features(). _
    - c7 O8 |: B0 H  p* y3 |% w0 a
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    9 H4 o0 d* {& q
  36. }
    2 d2 Q  T- b" o4 D4 ?5 m6 G
  37. catch (Exception e); e5 G& i5 `& h6 Y; S
  38. {
    5 o5 k" E* a9 y8 v4 p" ?
  39. //report error to syslog, Message property on _
    + k1 K& I* n1 t- U. |' ^; y' Y. T
  40. exception object already has human
    0 j; [- L# m/ Q
  41. //readable message& g2 y$ g; Z, s6 o( {7 I
  42. theSession.Logfile().WriteLine("Failed to create _/ j# v6 }( Y4 U! u) e; ]+ m5 A2 R; u
  43. block", + e.getMessage());
    ) C1 V4 O2 p; j% [. }5 z
  44. }
复制代码
  e' t0 w3 W( e3 V1 ?

. G3 @0 V3 R8 a: ?: f

. {7 O+ g' l5 b5 q! H, S
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了