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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
- n& W: Y) ]. u7 F7 E& ^1 z. B" l0 I& i- W7 D1 p( M
错误处理5 d* e% L" o7 y, n2 ?: x
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:$ l7 W8 T& o4 n) m
(1)无效的参数输入
1 r$ \. ^9 B3 j; Q! H(2)企图创建无效的几何模型
& w: v9 E/ ^+ T9 ?+ m! ?* _3 Q(3)不可预料的调用顺序. H/ @0 k$ P$ f/ T2 o) O% I
(4)得不到的系统资源,比如内存或者文件访问等8 a& ~$ u1 V( q1 w; g& U: o
  所有输出均为最新。3 P8 [8 G( e9 H! q* p& u$ q8 t
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
8 Y( l& k: ^3 B: a$ J2 k7 L8 s4 K( T- p- g9 ^$ u
2 错误侦查: w: ~, C' r% s2 u0 ^
通常返回错误状态或者异常。  m4 h3 J1 o0 ]+ D1 z
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
) g4 m7 O, j- P! P对于NX Open 通过 Try/CaTCh的架构进行处理: o+ U& u9 p; w! o- V
3 错误报告
( J! z# W( K) G1 R) c; G8 J* @& j(1)获取错误信息
" E4 D. ]( _" J* ~4 s错误信息,获取一个错误码,并有一段可读的错误消息
. H9 m0 G' V+ e! C5 D" u9 X ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理+ i! r0 v' c' I9 y
NXOpen 通过NXExcepion处理
- ?0 G6 {4 |- k2 Y 6 v/ y- {, c0 I4 B1 Z0 g
(2)建立报告: j- p. o# U, z& _
需要增加信息去报告什么操作导致报错,以及如何处理8 \- M: Z% K) c, F% h- Z& `
. v. Y  ]1 F; x) }1 i2 I
(3)报告错误( f7 @% d+ S% b
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
0 k3 e8 z, A. @7 b: h. s 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。* M' \/ m0 O$ X

! C! G! G. L, S (4)错误修复
5 C' w6 }9 e2 y/ O 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。7 D1 G* t  x$ g9 d4 b0 p. i
NXOpen提供的错误修复包括:$ [# w$ E$ }) P" l1 _  z
a.方法定义给于异常处理,让程序员来诊断错误& W7 j. X7 ^* L4 {
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态' O* Q: i0 j% k+ ]5 |6 \
c.UDO进行处理,去返回曾经的状态
. g% M; n- Q; ]/ x, T3 R. ?( h9 `
& L# L' C0 ]! f! E* [2 ~# `
  1. - g" i6 f+ Y# h- _1 m: o8 b  \& V
  2. // ufun 的方法
    6 O8 U5 D+ r+ X% ^4 K# P* b9 X
  3. $ p, _* A: y$ H+ g2 c5 S& a! u  j
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _& L/ w6 k7 r1 {3 {5 q* a
  5. corner_pts[i], edge_lens, &features[i]);
    . ~! E( N$ g, m
  6. //check for return value
    9 j7 i; E3 e( B" \% Y* W. o
  7. if (status != 0)
    7 v( y& U5 t. m# v& q' f3 d' Q  W
  8. {
    ! p& c$ J. n- r3 h0 r" r
  9. //get the human readable error message
    8 q+ n+ x* `0 b8 G& z% M
  10. UF_get_fail_message(status, ugErrorText);; Y2 h; m5 h$ i0 {" B* n( ?0 d
  11. //report error to the user! x/ j2 r# V7 u) V- Q* ~, d
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _8 q- {) ?% F) t5 N. v0 @
  13. &ugErrorText, 1, ..... );6 T2 g% d4 S; h6 M! x
  14. //report error to syslog; f2 I) P, l4 d
  15. UF_print_syslog("Failed to create block\n", false);6 L' V0 y& V7 M5 J5 i( Z7 z
  16. return 1;
    ; Q# }- D5 B/ _  n# U7 S0 {) w
  17. }$ S* x9 o! n/ J0 W, b0 Y- ~
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    4 v, l, p  X# r1 }" k3 d" }
  19. if (status != 0), a. |+ e. W- S* v
  20. {& ~- q" e) u5 p
  21. UF_print_syslog("Failed to get body from block\n", _
    & W) h) f. [& h" s# [: b1 K  b/ P
  22. false);5 a+ l% Y, w4 @" j* a9 s% f% e
  23. return;
    4 h4 y, c8 a: E% n& C/ o/ B2 P. k
  24. }% l; y, E3 Y/ _  G4 o. j* |4 \
  25. % g! w: p# H* g$ v: T
  26. //NXOpen 的方法,以下是java代码# r! m) G' W' m; G3 o& e4 c
  27. ( d' C* ]/ [& N  r) |! s7 Q1 C
  28. try' y1 d9 H9 \1 x9 \; M( Y
  29. {7 T4 v5 M0 J6 V% G8 {) p* s
  30. Session theSession =(Session)SessionFactory.get("Session");/ n) r. ]+ y# y$ O, C
  31. Part workPart = theSession.parts().work();
    4 g& I( G: x% X
  32. nxopen.features.Feature nullFeatures_Feature = null;6 u; j$ W) ]% K8 D! p3 A& u5 I4 i
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    % n) @+ B% a, z
  34. blockFeatureBuilder1 = workPart.features(). _
    4 Q8 t9 w# G6 J* K
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    5 r( Z' x/ X4 G% c4 n+ n/ O
  36. }) n2 S2 V* s4 g2 i5 v% ]) I
  37. catch (Exception e)' U$ i& r2 y. ^3 W( w- X
  38. {
    ' ~9 O% n8 Z* S5 l% Z) }7 \
  39. //report error to syslog, Message property on _
    ' J: g0 @1 y/ z
  40. exception object already has human
    6 ^0 M) a% F$ D, o/ s( Q
  41. //readable message
    - T# y) a$ s/ I4 s0 O( U
  42. theSession.Logfile().WriteLine("Failed to create _
      G  R9 K" @2 [: g, d9 `1 B
  43. block", + e.getMessage());
    ' n3 I9 o$ z, y5 L+ s) o5 n2 V' q
  44. }
复制代码

+ m8 b5 u5 i7 R. g/ @; v1 F2 j
' \* H( K) a( l  f; C

+ D  V+ o3 R  e1 ^* N
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了