PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
3 F- L4 a2 X' }$ C7 p
8 @% Y5 i2 M3 b8 V. g& @% _( b错误处理2 m( ?7 H2 E- _: k: W: Y  O- z! z- a7 g
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
9 B: O% Q$ j$ D% M(1)无效的参数输入1 r, f* b! M1 i/ K5 L. E
(2)企图创建无效的几何模型4 w8 D" x- L+ X5 K5 K
(3)不可预料的调用顺序
4 m( W1 b, h$ S0 b(4)得不到的系统资源,比如内存或者文件访问等
3 H" W! P( Q* `7 f' g  所有输出均为最新。
7 X: s" I: ~, bLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入  Z# Z) M4 k2 U, P7 r( h

# l, J, D. w( |/ ?2 错误侦查0 h% f' n/ m1 B( I
通常返回错误状态或者异常。) _) M9 e  h0 a3 P$ O7 }
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
5 g+ Z0 p5 N5 V# M% D& H" V. M3 \对于NX Open 通过 Try/CaTCh的架构进行处理
# E# Y0 \8 p" }8 F% f3 错误报告
5 v7 A2 \& ~* U; R5 N$ y(1)获取错误信息! f. ^7 P( D" _9 f" {$ B* S9 X
错误信息,获取一个错误码,并有一段可读的错误消息3 \6 P; @, a4 N1 w1 v
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理. e5 P+ o7 w5 K2 d
NXOpen 通过NXExcepion处理
7 t/ A. A( c' `$ `' d# | 1 A+ w) M1 X# K4 w: B- Z; J; r
(2)建立报告: e# W1 S: N' `0 Y1 S
需要增加信息去报告什么操作导致报错,以及如何处理
; w' k' d/ e: } # H/ D: M, e4 x9 v
(3)报告错误6 {" _# Y7 z* w0 n+ r, m% l
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
" Q9 a% G: Q3 z 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。% K; g, h4 p" T/ J% u* @  v  S& X; m

6 Y: U$ y4 O" l' k: Q (4)错误修复
" d3 ]! g- P! h" e, d5 [ 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。$ u9 q0 N3 H5 V( N, O+ ?& V
NXOpen提供的错误修复包括:& D7 Q+ I0 Q4 ^, O8 s! d
a.方法定义给于异常处理,让程序员来诊断错误
& N' @  w% O! e! N0 c b.当方法错误的时候,可以返回NX回话和part到一个有效的状态7 }  x/ g# p  u) o
c.UDO进行处理,去返回曾经的状态# s" X: F" f, j% E  h$ r0 V
7 X! [. M) |% h' z. x* q" d% Q; Z
  1. 0 Y' m: e6 h7 I. h+ n8 G
  2. // ufun 的方法
    8 M3 N, \: d6 F" ?

  3. 1 q; S0 p1 H1 E9 u4 v
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _8 {6 j1 U- s3 }) ~  V
  5. corner_pts[i], edge_lens, &features[i]);
    4 o% ^, B% g# N5 m. p/ I0 E
  6. //check for return value9 W* c( K" Y+ f% L4 u0 l8 U
  7. if (status != 0)
    * `1 [% ~4 ^6 ?) @- E. T; T$ Z  E
  8. {
    - R- T( o2 p$ @
  9. //get the human readable error message
    " m4 v( W5 }/ W& |1 _2 E2 j
  10. UF_get_fail_message(status, ugErrorText);
    , F4 C- O9 Q7 ], c) T+ y* N
  11. //report error to the user
    ; {- }: \. w9 k3 S
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    % l) i$ @2 n/ G
  13. &ugErrorText, 1, ..... );
      g/ T% D8 k# M' D- @
  14. //report error to syslog
    6 T9 O9 b1 a+ }# f! Q
  15. UF_print_syslog("Failed to create block\n", false);" F9 V" U5 a9 ~4 w
  16. return 1;; |7 L9 f% ~- {5 @) m5 W
  17. }6 d3 M3 r6 J- l# z" K/ x
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);% t4 [" v" G0 p* w( p+ E
  19. if (status != 0)* g/ P" C5 }7 |0 {1 x2 Q9 Z3 S
  20. {8 {9 P  F0 O9 K/ R8 b- f! R9 L
  21. UF_print_syslog("Failed to get body from block\n", _- b- n' X1 S5 u6 n
  22. false);
    * v% G; N" G; e* V  m! {. t7 J% M
  23. return;& ~' s* g7 j4 r' q/ }4 E
  24. }1 `; e4 U& Z9 V' }* c

  25. ( d+ T, D8 |  I5 R. j  ^  x  z0 C
  26. //NXOpen 的方法,以下是java代码
    2 B/ j' b- Q( {4 a! O* i" G# z
  27. 6 F7 d" H5 E+ R5 t) S: G8 O" I
  28. try
    ! T" V; ]: h+ ~
  29. {
    . c: _6 {7 j4 h1 j. I
  30. Session theSession =(Session)SessionFactory.get("Session");7 U% H% p5 b1 T9 e
  31. Part workPart = theSession.parts().work();5 d: U1 _1 f0 L" a' H3 F# Z1 o3 g
  32. nxopen.features.Feature nullFeatures_Feature = null;
    ) J  r" \4 f! P4 X& p( K1 P/ T' w; t
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;/ t3 T$ k0 [- [# |, H; q
  34. blockFeatureBuilder1 = workPart.features(). _
    ( a! x8 S2 k# v* a
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    5 D, R- ^  i# [# z
  36. }
    : a2 q1 Y4 t! N
  37. catch (Exception e)
    . f) ~+ g$ g, D9 k& h0 y
  38. {' z' b2 a7 J4 F3 t8 u" ]
  39. //report error to syslog, Message property on _
    $ q" q$ @' x' @8 h. x$ B# X
  40. exception object already has human* p* P( c0 u4 j5 ^* L
  41. //readable message
    7 I) Y/ I0 H/ z9 b! ]- a" g) a7 l
  42. theSession.Logfile().WriteLine("Failed to create _
    7 n/ c* s* Z0 a2 I: {+ x
  43. block", + e.getMessage());
    % B0 ?# W2 }, n: O
  44. }
复制代码

. N3 S8 O, l& _7 G0 c6 z0 q3 z! N1 M6 E: c5 z

( ?- ~" f# a# @% d- G0 Y  b( d" a
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了