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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
  }7 k" F4 D) b% |% a  s* w% e  j
+ L& S* @2 ]! x2 p* C9 q0 z% a错误处理
4 @: i5 d3 j$ A. ]- F' Y/ ]! T1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
2 ?  P- s3 w* O- y(1)无效的参数输入: O! S2 M) G% ^) N) ?1 j
(2)企图创建无效的几何模型
7 ^6 C( o0 R8 O$ M* n6 N. u: q(3)不可预料的调用顺序4 s6 }3 a3 J1 H
(4)得不到的系统资源,比如内存或者文件访问等" w$ B9 V* E/ p; |0 s+ u& x( P% {
  所有输出均为最新。
/ c0 m8 Q% |6 x' J3 t6 }9 ^LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
5 X  H* F: x8 Q3 I8 C( f$ B# H, G
+ f9 i$ j1 o$ L! x/ q. Q0 P$ [" g2 错误侦查/ B4 J# ]  h7 x' a& T" M/ ]
通常返回错误状态或者异常。
% n; @6 p# b4 `$ J: F6 s2 j对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;8 d5 t9 m' f! X  N
对于NX Open 通过 Try/CaTCh的架构进行处理8 M* p, j  \& s: r. I3 _6 H# v
3 错误报告/ D6 P& A1 g1 w
(1)获取错误信息
# ?+ _% G% O8 C5 u' X- G3 i1 \错误信息,获取一个错误码,并有一段可读的错误消息; G# `* U5 _% D( M) q
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
; G1 E4 T$ D* u4 j  r, A0 } NXOpen 通过NXExcepion处理
# t0 k, i; c  ^( {8 K
% f5 Q) M, w$ y! K (2)建立报告9 c0 e# q6 f. T9 {
需要增加信息去报告什么操作导致报错,以及如何处理. K1 W" l) V3 h# b7 T+ ?+ ^
% _; C, a& T1 k% Y
(3)报告错误  p& u1 T9 Q' M$ Q* ?: h
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
5 `! G8 v3 B3 Z/ E& @ 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。: c. S" C. H1 }2 [2 O' p

6 t( M9 Y0 H( H2 Z7 Z& } (4)错误修复& J' ]0 T; ^6 r: B: Z
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。* J7 p& l4 d4 m- J7 a) y
NXOpen提供的错误修复包括:
, }9 J* _4 V& T1 d5 {3 U3 Q; t a.方法定义给于异常处理,让程序员来诊断错误
6 U/ ?) D) w& |4 z1 e* Y6 i0 P b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
3 H; M- [5 Z) H. F! H! g6 P0 j c.UDO进行处理,去返回曾经的状态
' Z  ~2 E5 M' k1 h
6 U$ o$ L7 M) [# f9 m

  1. - {: R) A3 P. B: i* g& U1 R' k3 z) \
  2. // ufun 的方法+ g4 {$ Z* i' t* t; K6 P

  3. 2 t5 b8 x' R+ H% q  S
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _* r$ x5 c6 }& x4 k% s- P4 q
  5. corner_pts[i], edge_lens, &features[i]);' N0 _% }4 C( t+ S
  6. //check for return value: w, S  M; l1 x' u
  7. if (status != 0)
    & ]% l2 [2 t0 L
  8. {
    ; n  f) y/ `/ d" A  B& k
  9. //get the human readable error message9 |! C% V1 i6 K. ~1 I7 f
  10. UF_get_fail_message(status, ugErrorText);! r3 S9 {$ d. r( M
  11. //report error to the user/ m% ^9 X+ f/ k. Z) C: W
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    # J! x# R7 _7 L" D' z8 x8 W9 p
  13. &ugErrorText, 1, ..... );) X# S6 o3 a9 F( }4 q
  14. //report error to syslog
    ( D, D" i2 v' ~' m, P) ~
  15. UF_print_syslog("Failed to create block\n", false);
    8 y# [- G2 |  \% M! Q
  16. return 1;
    5 ?( r+ C3 w# x' O+ O
  17. }# [, [4 _) `5 L9 r: b8 ?8 b
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    5 E8 r% h; I$ |2 f
  19. if (status != 0), Y, m1 z0 l- i5 B( J
  20. {. G9 ]) y9 c' i; A% E6 C$ c3 s8 Y
  21. UF_print_syslog("Failed to get body from block\n", _" b& K# Q7 P8 F
  22. false);
    $ i, k4 t6 V: d- U0 }- a
  23. return;+ G' x; G( S& y9 @( r. ^% i* |
  24. }
    9 L4 p! w7 W) v" c

  25. 2 |3 c( y: E& |, r1 V0 M4 E3 G& |
  26. //NXOpen 的方法,以下是java代码
    % v2 N' \0 G( r9 `1 U/ L! y

  27. / ~( K5 u8 Q" J' v* f
  28. try' k/ ~8 V: t& y- d( P# c& Y$ L
  29. {& l$ `: k' i/ K9 A  \3 N# z
  30. Session theSession =(Session)SessionFactory.get("Session");$ S5 S9 W$ J6 a3 t1 F, r8 z' E
  31. Part workPart = theSession.parts().work();  |+ k9 O5 r! g& F. g  M- ^
  32. nxopen.features.Feature nullFeatures_Feature = null;. [) s; A* U! i' ^1 {* K6 V8 h
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;* |2 O7 }3 e, `
  34. blockFeatureBuilder1 = workPart.features(). _
    . o9 H0 h4 J; ^+ w* d! C$ r! u
  35. createBlockFeatureBuilder(nullFeatures_Feature);/ a5 K6 @! e: ~9 x& w
  36. }3 ~, f& Z" [! i& c( |# s6 W
  37. catch (Exception e)+ U7 G) P" |' d8 i5 w7 C
  38. {
    ; D5 Z" Y( n% s% D
  39. //report error to syslog, Message property on _
    ; L8 \/ r/ j; }, q
  40. exception object already has human( V8 u+ \' j  J& O& O+ d- i
  41. //readable message
    2 {! O* Q& o, P1 H8 a" \$ K, ^8 [4 u
  42. theSession.Logfile().WriteLine("Failed to create _
    * l- x5 J) _7 x& S+ \; J, A
  43. block", + e.getMessage());
    , j1 B7 _! u5 ?) G
  44. }
复制代码
& @' e' o- j3 X, E* X, ^/ H7 p9 M8 S; H

+ {, z, B) `/ E* j4 B

6 v& l2 C/ e  i  d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了