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

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

  [复制链接]

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

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
: f' l2 a$ j0 B. K% c9 P
2 Y. }1 F3 j& B5 e+ q% ?  @6 ?错误处理. N; e, O# \8 w% i! n
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
9 E: k7 ?. {/ r+ H. Y. R- y(1)无效的参数输入+ ~4 \" Q( F% c$ l) ^$ D& d6 J
(2)企图创建无效的几何模型
1 f* {6 d* m& q2 U% h(3)不可预料的调用顺序4 x7 e0 E* X- U: |& ]2 A9 Z9 T+ s1 C8 g
(4)得不到的系统资源,比如内存或者文件访问等$ L# {8 e9 ?* d/ z# l
  所有输出均为最新。
7 u8 D$ G# l" ~* u# \LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入$ N4 L' u$ _/ O" v6 E; W- N0 ]- ~% ~/ O

, f- q1 a: @" x0 T2 错误侦查
+ w7 A9 D# t+ {% t* l通常返回错误状态或者异常。
6 t- Z3 N" Z- d7 N5 S对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;" h. a% ], v! t! W
对于NX Open 通过 Try/CaTCh的架构进行处理1 A$ k9 f9 Y& X6 n% z$ r
3 错误报告
5 q& @( s& s/ x6 }- k7 y6 v6 H(1)获取错误信息7 y0 [$ o4 {3 e1 e0 E# m) f
错误信息,获取一个错误码,并有一段可读的错误消息& P6 g: `* M5 c/ }8 l
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
4 Z' O- H) V5 {; }& R NXOpen 通过NXExcepion处理
7 Z& ?0 ?/ V" `. d
, c) L2 z4 F! z4 ~; _2 c (2)建立报告
8 B2 K, y$ G! ? 需要增加信息去报告什么操作导致报错,以及如何处理
4 C& V1 |, Y) Z 8 ?$ G7 S' z; l7 Q
(3)报告错误
0 p! b: N  f) F; L, o 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。6 Q* b) }! ^1 H. V! r
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。  o; F( f0 |( ~* _

# r: [0 J# ~  U2 t7 }- L! }) V (4)错误修复
; r4 @$ I% k# ^8 R; ~  k2 V, M: E 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
  z6 Q( i0 W7 r7 ?7 M; ~ NXOpen提供的错误修复包括:3 x- l' A$ W5 _% t( Q. }
a.方法定义给于异常处理,让程序员来诊断错误7 ^4 ~$ V, P) v( `
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态1 Z$ Z/ e/ z+ B: d4 b) U
c.UDO进行处理,去返回曾经的状态
+ d4 S# X4 [/ y
$ _- O) q) q; l3 ~

  1. - \/ V/ ?! j3 [
  2. // ufun 的方法
    9 T, q! {7 l, ~% I, G' c; Y

  3.   X, Y2 ]/ r: w$ z: i( ?
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    9 h! P1 ^8 v" R0 x% T7 @- Q
  5. corner_pts[i], edge_lens, &features[i]);
    7 w5 _1 \8 P, L" [: U9 \
  6. //check for return value
    9 l# k& D4 \! r; w% s7 p
  7. if (status != 0)
    ) o+ b& U' {# q
  8. {$ `$ x2 b& Q$ u3 u6 \
  9. //get the human readable error message" c+ l4 M: v+ ], O5 e, K
  10. UF_get_fail_message(status, ugErrorText);  I! E& A' O8 T; E/ u5 d
  11. //report error to the user
      N/ h' R; A: ^0 f3 B
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _' \6 }6 y; _! ?3 _
  13. &ugErrorText, 1, ..... );0 A' p1 B( c" s' q" ~6 j
  14. //report error to syslog/ A# p. q. k6 G" b( V1 H# |
  15. UF_print_syslog("Failed to create block\n", false);7 h, U9 }. U+ M8 |5 C: E/ @  t
  16. return 1;: j: h0 x. j# m" H5 O: B& |% v% h# J
  17. }+ L* t; O4 O+ }( S
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    4 q2 |  ~: K* y9 x; Z
  19. if (status != 0)4 S) `$ x" ?' T" r% h
  20. {: o5 I/ I! y. j* g' x  e1 I$ `5 k. W8 c8 e
  21. UF_print_syslog("Failed to get body from block\n", _
      @& D$ y9 M) v
  22. false);
    * g4 c  W6 i8 j0 t* A2 G
  23. return;
    / P- }; B% V2 ]
  24. }5 M( ]3 ?: q* l3 Y7 e
  25. ; v2 B4 W/ Y5 L+ x
  26. //NXOpen 的方法,以下是java代码
    7 j3 G, r# N# v6 x7 |; _
  27. 8 e! X, l, Y6 V7 k. @+ p8 c
  28. try
    1 Z4 e) f3 ?; o6 j) C2 n
  29. {0 }4 e! e# ]4 a0 ]' V% J
  30. Session theSession =(Session)SessionFactory.get("Session");5 |+ F, t" B+ @( z
  31. Part workPart = theSession.parts().work();8 T5 N' q- [  A$ R% M# i
  32. nxopen.features.Feature nullFeatures_Feature = null;. g( P+ ?) d9 v% s. A: M$ M4 t
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;. U0 R* K: X2 z. A0 w6 N4 _; c- F
  34. blockFeatureBuilder1 = workPart.features(). _
    7 i9 W; w+ e4 i" G8 L5 s
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    1 ?5 O) N1 U; R4 R1 I* E
  36. }. N7 @5 Z' M& H) m5 C, q* [
  37. catch (Exception e)! z' `  G  l+ b* ?8 A5 j, |
  38. {
    : K# w% N# u( P  }( \
  39. //report error to syslog, Message property on _3 h+ \5 h0 q' a& k
  40. exception object already has human
      C) P* d; J' y/ m
  41. //readable message
    $ u- L. I3 e. S& J6 @! c5 ^' Y( E( q
  42. theSession.Logfile().WriteLine("Failed to create _
    # W. y9 R3 p" Y/ n6 k- M
  43. block", + e.getMessage());
    % p* P# d4 Q( h
  44. }
复制代码
9 p" l! m$ h" o+ {; W
7 d" {+ O( j% d) {9 p

6 h, {% Q/ `* {8 t" M: i! H! S& v! _
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了