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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍+ f9 L. j: ]8 q& W
: M2 ?' N& A- D& |2 Q. E  m
错误处理, Q5 x+ b3 t; p+ M' M+ C, X
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
. s) {: x3 C" I1 b7 ~(1)无效的参数输入
; v; ?0 Z* g; G7 l/ s(2)企图创建无效的几何模型# e* O7 `+ @: j# S: q* F
(3)不可预料的调用顺序6 z7 |  c; u( r/ f; P: K3 L6 d
(4)得不到的系统资源,比如内存或者文件访问等2 a7 h' L+ T4 ~# g6 i( v
  所有输出均为最新。
4 u8 r# A% C- {- {LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入+ x+ W  A2 I  @: M- @0 Q

5 K! `5 \% H9 ^# K0 r2 错误侦查3 d1 h( p, |7 g, L
通常返回错误状态或者异常。4 o) d% B) T" V( e
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
( o0 U  g1 k+ j' S$ ^* {对于NX Open 通过 Try/CaTCh的架构进行处理
4 |& q+ ?4 q7 \" q5 j: J, j! ~/ P3 错误报告
) h7 h; [% V  Q, {/ D! e, @1 |* ?(1)获取错误信息
- |1 r7 k* _1 B2 y# u$ T错误信息,获取一个错误码,并有一段可读的错误消息
3 u, a0 N& h* Q4 l ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理/ X* e$ L. u2 h# J' |
NXOpen 通过NXExcepion处理* \4 g. y4 M' R3 a! C
8 Z+ C3 s+ m1 i! b5 n
(2)建立报告
: `3 p- o. s+ l 需要增加信息去报告什么操作导致报错,以及如何处理
' v2 _2 }7 M* X3 Y( ^1 k- @& m& |5 \ ' a; F4 C7 ?$ E/ p0 ?* L
(3)报告错误
6 ]; L& ^5 C& y6 z" b 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。7 D  R7 ^, ]9 r, p$ h+ h
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。3 O0 i8 F' P' u$ q

& L3 G  y3 I! ^5 Y9 S5 F; b (4)错误修复, e& s5 H1 P6 G, @# K. u
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
! m* a" |. }# |: M7 B" y6 J, S" q% E NXOpen提供的错误修复包括:) d0 P, F3 \' r
a.方法定义给于异常处理,让程序员来诊断错误
1 u2 D, y' }: M- l b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
/ F$ H+ w% U! R- Y c.UDO进行处理,去返回曾经的状态
9 r$ Z1 d1 S0 N2 w: ~6 g2 a4 F4 s; [9 [5 f' X
  1. - j4 B+ \. \! |* h2 }2 F& b3 w! Y
  2. // ufun 的方法: B$ [/ r5 ~" b0 c0 V& U
  3. - X# D  I! O% I1 ^
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    3 }6 w  c- A6 K$ M; q
  5. corner_pts[i], edge_lens, &features[i]);3 P% ]1 z' J! H0 A
  6. //check for return value$ `1 R6 x$ U" S; R$ Z7 q
  7. if (status != 0)
    - V5 g; R2 L  T# A
  8. {) ]3 `1 |/ \9 p. q$ \( X" h. X0 |  t
  9. //get the human readable error message
    ( |. L- p9 L% O  x
  10. UF_get_fail_message(status, ugErrorText);8 @( q! `+ @# j. A6 C5 B
  11. //report error to the user
    9 Z( [$ |, v4 Z7 p
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    # _' x' Y- _! V! q5 C; f  ?! w6 t
  13. &ugErrorText, 1, ..... );/ O8 o8 v2 V& t0 U; q3 C$ I
  14. //report error to syslog
      u' o8 N, w$ E0 p; ?0 A& k% u
  15. UF_print_syslog("Failed to create block\n", false);( A0 A# `% u- N! ^+ Q0 R* i
  16. return 1;
    " _& Z7 p1 O; H( q7 w
  17. }
    8 ~8 M6 [- b% E7 w9 m
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    8 D. M$ X$ d! X* `# T
  19. if (status != 0)
    * w, ~5 e7 r% A* p
  20. {3 ^8 w9 d( e, c- c' ^6 j
  21. UF_print_syslog("Failed to get body from block\n", _
    0 H# T! r' g2 u2 C5 q
  22. false);/ O. G8 t0 v6 W
  23. return;' I/ U2 i  R6 x) x
  24. }
    % U" \9 n  q6 F& V) V

  25. % c) f2 ^8 d* h
  26. //NXOpen 的方法,以下是java代码- C  h4 R+ A9 M( H! `- q
  27.   t/ h+ _2 v6 l- G( ?
  28. try
    3 N  a2 j1 q$ d5 |. P. `
  29. {
    8 ~& }, F: E+ X1 y! {& f3 m7 Q
  30. Session theSession =(Session)SessionFactory.get("Session");
    . G; \* Q# Q- [. v- u" C
  31. Part workPart = theSession.parts().work();( I( Q- R' ^. Z
  32. nxopen.features.Feature nullFeatures_Feature = null;! g8 g' c" T& i! c! }
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;6 m: J; O* b/ }8 o% x9 Z$ ?$ Y& p
  34. blockFeatureBuilder1 = workPart.features(). _! B1 C' p$ F) k9 ]6 y
  35. createBlockFeatureBuilder(nullFeatures_Feature);$ ]6 x7 L" X1 x  |
  36. }
    # [$ \2 I* y4 z$ `' b' U- @  U
  37. catch (Exception e)
    ; _' r" _8 g- Y7 Q5 `3 y( O( _5 R
  38. {
    - [' h- r6 b8 N2 `
  39. //report error to syslog, Message property on _( T7 k& N$ [, a. @8 l
  40. exception object already has human
    4 P' w# n% `, T3 m3 ]  e- Q
  41. //readable message- G8 l& E! M5 h& H" q3 z  n
  42. theSession.Logfile().WriteLine("Failed to create _0 J# y' m+ R: u+ G. R
  43. block", + e.getMessage());
    8 H# D/ {5 c- E6 S8 h( \$ w
  44. }
复制代码

8 S( M1 h4 k- a- |  R5 y* |. \1 U4 P: S9 }1 C$ l2 B8 D/ N

" l! l! G6 g/ A; E9 Q# X/ D1 G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了