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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
9 X; Y( S* D, C0 q5 Z( \: W! ~$ @, t, y: u! I
错误处理
' {7 \' {0 E; Q+ S6 N1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
) P2 z- s* M# }2 p1 L6 F# u/ K8 v(1)无效的参数输入
; F3 o: S, T8 E. o, |  Q(2)企图创建无效的几何模型& a+ ~7 d7 E* |' Z* O7 a4 t
(3)不可预料的调用顺序, V8 M6 L4 ]0 x2 I2 A3 s7 y
(4)得不到的系统资源,比如内存或者文件访问等8 \# s) ?5 ?6 K; r! ^
  所有输出均为最新。  X+ q  N' l" }8 `
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入: c# v- Y8 l* p. p1 z4 E7 x

' w; I7 C1 H5 j6 l8 v2 错误侦查
, Q/ ^* _5 W( ]( ^2 H+ z通常返回错误状态或者异常。
( B0 y6 i8 Z4 X; \4 E& P对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;( D2 ?. f! n. b$ Y
对于NX Open 通过 Try/CaTCh的架构进行处理
% N3 j, J+ @, e' p# D" T8 C3 错误报告7 M# ^) I8 I' ]' ~) c9 D% U6 o. G
(1)获取错误信息
9 R& B0 S2 d% _. _7 y, N# U+ U" ^错误信息,获取一个错误码,并有一段可读的错误消息/ q1 f) x+ u: T! n1 z1 |+ `
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理( x0 l7 e, Z/ A5 A
NXOpen 通过NXExcepion处理; }0 C, L& E8 h" N: V
5 G) A& p! \4 [& G7 l
(2)建立报告5 m% b6 v8 N3 y% i$ d- k; o" G
需要增加信息去报告什么操作导致报错,以及如何处理9 z+ u# i: u4 e% v2 M' ]  T
  {/ q) _0 l0 f  I! d" S2 {
(3)报告错误
7 |5 \& q4 x& i4 W 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
3 _. ~7 |& s+ K, L& j5 L8 M 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
+ [% ~  u) }: e' f$ |, J0 m & X9 v' s+ l/ O$ Y
(4)错误修复
  z9 P9 f- v$ }9 A2 d 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。$ o9 w! O$ K0 v2 ?. {: x% M
NXOpen提供的错误修复包括:
4 R" i# a* |$ W& c( S, f% R) ?& E( n a.方法定义给于异常处理,让程序员来诊断错误$ R1 j# G. ?0 n' N3 z" @
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
1 R( E& \- z& c: o, u: _ c.UDO进行处理,去返回曾经的状态1 X7 m; K7 U, i2 a- p1 {3 [# O

+ ]/ i& U+ W$ z' n$ N. J

  1. $ y! B- ]$ V& u( t
  2. // ufun 的方法9 y& T( a  [0 n. S

  3. . }5 U0 O( d, _$ F( m1 l% v$ |. }
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    % _5 r( m9 _5 U$ S) j* J
  5. corner_pts[i], edge_lens, &features[i]);0 M1 J6 ?  h2 _9 L' h; P
  6. //check for return value
    1 j, G- o: A. ]
  7. if (status != 0)
    4 I8 [0 p( e' q$ e# a( `0 A/ Q
  8. {2 E( j1 h7 Q' X5 r3 ^
  9. //get the human readable error message
    ) F6 p% {; q& \6 w( e) ?/ X% l
  10. UF_get_fail_message(status, ugErrorText);
      E. M& r! [2 j" B: V
  11. //report error to the user* `! z( K7 N# }2 m. C1 x
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _  f8 T7 l  ]# \; U* Y
  13. &ugErrorText, 1, ..... );5 j: h$ ^0 c$ ]6 u! |3 W8 O
  14. //report error to syslog
    & V  p; N- s  w0 M6 G
  15. UF_print_syslog("Failed to create block\n", false);5 F1 ^( o; ~: [
  16. return 1;
    / {! ]: G6 J8 q4 d
  17. }
    9 I" z, d* z9 w9 U
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    # Q$ S! D- d- B; h/ i
  19. if (status != 0)
    3 P; i" @1 r$ m* Y# m
  20. {
    # d+ t( F  f- E$ m  |* E" {
  21. UF_print_syslog("Failed to get body from block\n", _+ W7 c) v& I( t, W. N. _
  22. false);. ?5 p7 N+ @( Z; y/ s
  23. return;
    2 g5 x# v$ {1 c- Q
  24. }% o- o9 l1 n! {5 w6 v; @6 W

  25. ; {. |8 i- @# e8 D/ }! O2 a
  26. //NXOpen 的方法,以下是java代码& k8 o/ B+ Y0 N

  27.   u! ]) }8 J3 J. B  B) c- @. l3 t
  28. try
    1 {- l6 z& t' X' b& @$ I/ v
  29. {9 z5 H  r% c* @
  30. Session theSession =(Session)SessionFactory.get("Session");4 b( K& c+ a  t  W/ }
  31. Part workPart = theSession.parts().work();5 m, q$ V1 }* t4 m! i( g8 J
  32. nxopen.features.Feature nullFeatures_Feature = null;, \- O% L' X4 G2 K7 c9 {1 z
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;" q; n0 b( c% z( f4 X/ W. |
  34. blockFeatureBuilder1 = workPart.features(). _- K  M8 w# S; m- P: ~, T( N
  35. createBlockFeatureBuilder(nullFeatures_Feature);; p; r) G8 c4 D) l0 H+ R
  36. }
    1 ^; Z5 |2 I; c
  37. catch (Exception e)
    * o1 s) l& o: K
  38. {% W* C. c$ a6 W/ w) y& V
  39. //report error to syslog, Message property on _1 I/ f# ^0 ?- k: n
  40. exception object already has human( V  g' u4 `4 L' |1 L. L* Q6 ]
  41. //readable message' B# x* r  e  O  O/ v# @7 m% o
  42. theSession.Logfile().WriteLine("Failed to create _: ~# d. R3 y2 i( k9 C( t
  43. block", + e.getMessage());
    9 R# R0 R- p5 i& A; d6 y  c8 o( [
  44. }
复制代码

" ?, [( B* z: X  L# N
$ T/ h! v4 X, J# @' M

. `7 `' e4 m. _' _- Z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了