PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍) \0 R& Y/ L6 \' X

  h7 Q) S' K$ }错误处理
  o4 z5 V6 T& ]4 l$ J1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:3 L' w, G7 j9 `
(1)无效的参数输入
/ m. b" X% H5 ~/ \( N' K; o(2)企图创建无效的几何模型( q: n' V  Q* n& ?& ?# D
(3)不可预料的调用顺序, f6 k5 {% `" M, i
(4)得不到的系统资源,比如内存或者文件访问等
2 }8 l" U7 o6 u, r+ ~  所有输出均为最新。
) f5 a" A' |6 D. V& ~6 ?, a7 `LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
6 k9 e! O9 l# u* Q+ `0 R; {5 \% r( n* E
2 错误侦查
' E' Z9 O( A6 n9 R通常返回错误状态或者异常。* r0 q6 @# [2 o) a- D! u$ i
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
" r$ {, Q" S3 O% u1 N) T  n对于NX Open 通过 Try/CaTCh的架构进行处理
* B. n4 h( k. ~5 |7 C3 错误报告! @- r. {6 q1 \* c: ~, u. c; t
(1)获取错误信息
; a( G/ {5 q3 W+ z1 t' R- w错误信息,获取一个错误码,并有一段可读的错误消息! _3 p3 {6 v( S" y! n7 N+ E. L
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
" x; u4 P9 ~; K6 p5 A0 ~* L% o% h NXOpen 通过NXExcepion处理, U+ _+ }/ s$ }- J* c$ T( D. P3 b
( a" R) \- s: w" Q
(2)建立报告$ }( F2 c& C$ p& g& V& a3 y
需要增加信息去报告什么操作导致报错,以及如何处理
9 c/ |- i4 Y. x3 x) f0 y ! g6 F2 Y. L) X# v' E2 V/ B7 W5 f2 h
(3)报告错误: _, o# O6 u4 k- ]) q
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。+ D2 r$ J: x# A% Q9 l' C2 y
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
8 X9 O- o7 |( I/ P5 z ' R! G+ }) p  G$ j
(4)错误修复
; F  s$ u7 s2 e1 z+ i- ] 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。3 [) e1 E" H" h2 X$ Z
NXOpen提供的错误修复包括:1 S2 ^' ^# M* `8 ]9 }
a.方法定义给于异常处理,让程序员来诊断错误
$ p2 A2 T7 A- K3 B: B+ m b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
! V6 T$ G- t0 C' G' Y! \; r! x c.UDO进行处理,去返回曾经的状态
# S; o+ z$ f5 R+ K
4 \- E2 ~3 q) A2 e" v

  1. " N) H$ Q2 |  d
  2. // ufun 的方法4 }% G; f7 J+ r2 t8 e

  3.   z2 e& q: ?" H, @0 Q
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    ( |# n( i, H- G0 ?
  5. corner_pts[i], edge_lens, &features[i]);+ v, o& P$ j% {7 b  ^
  6. //check for return value
    5 y( b5 r3 k# _& x0 J3 D3 E% Q- L
  7. if (status != 0)# F8 R" F. R4 t. n# X) e7 X* [
  8. {0 r5 v  |9 W$ N
  9. //get the human readable error message" l3 m" ]: `" _8 j3 j# z
  10. UF_get_fail_message(status, ugErrorText);
    ( o! d- E* p1 l2 J8 b0 o7 W6 ~
  11. //report error to the user
    4 F5 m7 {7 Q0 e' X+ N% W
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    : E* a7 F$ o$ ~1 E6 R! B
  13. &ugErrorText, 1, ..... );$ u, f3 d# ~4 W( `8 i, v+ {3 E
  14. //report error to syslog
    " a. l5 s* c9 q& }
  15. UF_print_syslog("Failed to create block\n", false);% F6 E6 |8 l. P( H! C
  16. return 1;: \3 G2 a3 q3 ?9 g0 k; m
  17. }! _" B$ G- B+ z" M* [( v
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    # j7 n6 b- R+ D* R$ ~- n# X
  19. if (status != 0)6 y- S! G# I; q
  20. {
    & T. g$ F7 o  S: [, c
  21. UF_print_syslog("Failed to get body from block\n", _
    ; n2 x, \7 _) I) H9 A
  22. false);
    ' f; }4 w0 M* r; `
  23. return;' b7 W: n. _3 ^) M) |% d+ d( J
  24. }  v+ s! }& X" M
  25. 9 s% x5 f  s% }! Q& o' h* }# a
  26. //NXOpen 的方法,以下是java代码
    # J; F  }& h8 T- z! W# j
  27. / ^1 n  X. B' F' L( N! M" F
  28. try6 w, N4 v7 R" r# R; }
  29. {6 f, ~* M. R, |+ {
  30. Session theSession =(Session)SessionFactory.get("Session");
    ' b0 E* m, e, C
  31. Part workPart = theSession.parts().work();
    / L. w+ x6 Y- f# q
  32. nxopen.features.Feature nullFeatures_Feature = null;
    - ~( X7 M# r; y/ K* Q" s
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    : s4 i+ W2 f' F) P2 F5 `  q# B# ]
  34. blockFeatureBuilder1 = workPart.features(). _5 }1 y- Z# v6 f
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    & Y+ `  b; ?9 q7 {3 i5 Z, ]
  36. }1 N: A) G+ r, x' B0 V/ ~
  37. catch (Exception e)$ b- q3 d7 |  S3 H* ~
  38. {
    4 b0 G% x, Y4 w' K" q: v4 d
  39. //report error to syslog, Message property on _
    8 a. ?; b! X9 |  }9 W
  40. exception object already has human  t- `  f9 c, {+ a
  41. //readable message8 n) k) _6 L4 @: o+ L  u
  42. theSession.Logfile().WriteLine("Failed to create _& }2 `1 T, w9 m2 Q0 n
  43. block", + e.getMessage());  r- @  t4 b; D
  44. }
复制代码
3 X& e% C) |+ Z; \  f" t
, C5 I, F6 H( e: b

" o: S3 X# a. c2 a+ J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了