查看: 7680|回复: 2

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

  [复制链接]

4

主题

3

回帖

48

积分

管理员

积分
48
发表于 2013-11-8 13:35:27 | 显示全部楼层 |阅读模式

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

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

×
关于NX 二次开发中,错误异常的处理详细介绍5 _. f& w: f! X" d) _. G

- p: l# X( b+ w3 u. A4 b错误处理1 o2 D7 e0 c8 N3 m' G$ K% L: f: Z" l
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
0 y! j1 ~# G+ i% q0 R6 g1 E(1)无效的参数输入2 M, ?+ E( N% S6 _: Y. V
(2)企图创建无效的几何模型
/ ?* `4 s9 v7 |" b/ S3 \4 V- |9 d% u(3)不可预料的调用顺序
# ?7 b% \1 v6 D' C2 ?(4)得不到的系统资源,比如内存或者文件访问等
* j5 [3 J, M, p' F  所有输出均为最新。
4 O4 K9 ?. ?% E! @LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入2 q3 R2 W$ d/ O; N9 R
: O3 a, E+ Y) I7 U, s
2 错误侦查$ l) P/ p  N! {4 l, l
通常返回错误状态或者异常。( M# m+ O; a$ F, T" {
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;5 K1 D1 H2 N8 D9 Y0 h5 T
对于NX Open 通过 Try/CaTCh的架构进行处理
+ k2 X7 s8 c  j0 y3 错误报告$ P) g' V9 g8 r/ ^
(1)获取错误信息
! [3 S) s3 ?6 P3 H, \, k+ u错误信息,获取一个错误码,并有一段可读的错误消息
& x: t. Z$ ~6 N! j! u' Q, T ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
8 C( U1 h9 h% g3 W$ {1 K7 U' a NXOpen 通过NXExcepion处理
6 O  ]6 ^6 |% q) l3 ]
- c! E, R% s' C  M$ {7 | (2)建立报告
" R0 ^& ?# |* r) p: V: A1 x& G; | 需要增加信息去报告什么操作导致报错,以及如何处理7 e& e- h2 k0 v9 E/ a
. d" ?& r# b4 R& m
(3)报告错误
3 |! K; B. f5 F& P, \4 ` 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。4 Z; l, p. x, F- @  N3 U( c; l; E
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。9 e2 [& r: J  E& d; [" z
5 j, s( d: I7 @" ?- o
(4)错误修复) i* Q+ A, v6 J. o
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
( s; N  Q7 A4 b NXOpen提供的错误修复包括:' X! D3 d, t3 h9 @6 S* Q' v. `, e
a.方法定义给于异常处理,让程序员来诊断错误7 m" l% o" {# E. L4 S* r
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态2 R' x7 N9 D' A
c.UDO进行处理,去返回曾经的状态3 y- S. H  a0 r/ w8 J8 c
) q. V' g! Z, I- b

  1. 6 r0 W2 y" A$ P+ |
  2. // ufun 的方法
    & l; \1 M. i$ K( G: Y3 w
  3. ' d: x9 ?" t$ o* t7 y+ S
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _8 I& a( T5 h# e' \- u
  5. corner_pts[i], edge_lens, &features[i]);
    2 c  }8 o% L) L) V6 p
  6. //check for return value/ l7 s# r5 B# G3 t7 I' E
  7. if (status != 0)8 I' `2 k9 Y$ |9 X! x; z4 Q
  8. {
    $ O, z6 B- H1 f" s$ [0 ~8 F
  9. //get the human readable error message
    1 }8 C1 G% a) l  U
  10. UF_get_fail_message(status, ugErrorText);
    1 X# s# W! `( i
  11. //report error to the user. p1 W% a: `! }3 f% G) E
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _+ _7 W- Z$ |  I. o; N3 K4 u
  13. &ugErrorText, 1, ..... );! U; O" z+ y7 i. }) G! w( V
  14. //report error to syslog
    ( g! V% b! m- @( G
  15. UF_print_syslog("Failed to create block\n", false);
    ( W2 _( X' v; X7 p! F
  16. return 1;
    * j! a4 W" R# ~' U/ h8 `
  17. }
    . Z/ J! Z; n. a4 h
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    2 v1 z6 i/ H6 T1 q
  19. if (status != 0)! s& ]$ {- F& N. O
  20. {  r" `4 X0 r6 m9 A) e. s
  21. UF_print_syslog("Failed to get body from block\n", _7 H+ W: S+ E/ x8 p0 S
  22. false);. ^% v+ {6 o9 u& p" r5 e
  23. return;
      D' b) @: \/ N# w
  24. }$ Y1 n6 z% M1 d! c2 p( k

  25. " l/ D6 [$ ~# @9 Z) X8 z: u- Q
  26. //NXOpen 的方法,以下是java代码( S5 ]8 P/ ]% @. `

  27. & C3 [2 m2 d3 ~% r2 S$ P5 H
  28. try/ M. t5 j9 l3 F+ \$ ]0 j. `
  29. {$ M& F+ Y( T1 o9 S; k4 N0 ^
  30. Session theSession =(Session)SessionFactory.get("Session");
    ( B4 ~2 I* ?5 ~$ a. U1 D
  31. Part workPart = theSession.parts().work();
    ; @% F! U: w6 m6 o; H
  32. nxopen.features.Feature nullFeatures_Feature = null;; w: x9 z6 e, Y5 Z
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    7 y# I& K8 h, o1 ^5 v
  34. blockFeatureBuilder1 = workPart.features(). _
    1 }$ B: e1 ^: R  d8 L7 s/ v  B1 b
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    & d7 N  X/ l/ v% m" |5 Z
  36. }
    * L8 U  V0 `" ~- r  R/ v1 n
  37. catch (Exception e)
    # X" r3 n. T  L
  38. {
    + f" G5 o1 J4 O
  39. //report error to syslog, Message property on _
    - Z: `% H" v- ~6 E, {
  40. exception object already has human8 g4 z, k/ G4 ~5 E* r0 d" Z
  41. //readable message0 v9 ?4 h; N1 c6 C0 _7 a
  42. theSession.Logfile().WriteLine("Failed to create _8 A, d+ i0 g: M3 f4 V/ i
  43. block", + e.getMessage());
    ) E9 e8 q0 I8 }) B# T6 L- h7 M
  44. }
复制代码

2 J: |, E! \1 k8 i: A  t+ N3 m4 j/ ?4 P! H3 q5 E
# k: w5 U( Z% Z7 p. d
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

0

主题

44

回帖

104

积分

注册会员

积分
104
发表于 2014-9-28 22:06:32 | 显示全部楼层
学习了,谢谢高手
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部