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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
/ p" W) P" _( s- S8 D: k8 Z6 e
) g9 }1 O! {6 c; F) l( T/ M* n错误处理+ O" E2 g2 Z7 V6 w
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
1 `* C0 _; |5 I; ?7 ^(1)无效的参数输入
' J* c4 V% k2 E/ u2 H(2)企图创建无效的几何模型, x! C! ^$ I- X* Y  a! o
(3)不可预料的调用顺序: o* S$ c, N2 o; b1 K
(4)得不到的系统资源,比如内存或者文件访问等
* V: B# r+ K) u2 w  所有输出均为最新。
$ W0 w  a7 @- }; S7 g) ALINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入4 e, K0 k: w* _4 X, g4 m; e
8 v9 R7 ]( ?# y4 z, B
2 错误侦查
1 v5 R3 f" U  l: m: F通常返回错误状态或者异常。" ?: Z. \3 g0 f/ z
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;* }$ q9 D5 G5 [4 M. h. f' v. V9 V
对于NX Open 通过 Try/CaTCh的架构进行处理" [( j" {: y/ v: h, u0 }' y' Z
3 错误报告0 T* v7 |$ t4 g4 d; u4 p! B
(1)获取错误信息
' s( R$ k; G% a- e错误信息,获取一个错误码,并有一段可读的错误消息8 \" @3 Z$ }% @9 y( \  R
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理6 a0 I1 V) g6 V0 X
NXOpen 通过NXExcepion处理
. [/ p9 R3 U0 }" c
! k2 R" g9 b; R (2)建立报告
( R+ {' [' E. c6 b, V 需要增加信息去报告什么操作导致报错,以及如何处理
( i5 {$ M* ?# I* K8 W* w2 ` 8 t" M8 ~, I) \6 V
(3)报告错误: A7 O' R! A3 V
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
# T4 D, d  {6 w( Z2 k  @; R8 A 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。2 E' C% U# U4 U/ [' d
" g8 L% e7 v6 l1 M9 E5 E( M
(4)错误修复; I; o0 {) k6 r3 f, [' D) H
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。6 g; h4 A# ~7 O
NXOpen提供的错误修复包括:* }+ J$ x6 T& K% F4 M. s+ g
a.方法定义给于异常处理,让程序员来诊断错误
2 U# [% z  o; F$ z5 O8 }! J  V# k b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
7 m7 c% O6 J, f* u2 V0 f c.UDO进行处理,去返回曾经的状态
, h2 w$ [9 E( g
8 z, \# p, `. x- S

  1. : e' x1 F: w) I1 x; \3 J
  2. // ufun 的方法
    1 p) K; T! D+ [% ^! S) J) ~

  3. , I5 k" V6 `8 R/ n" D8 n7 X4 V) ]
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _- E& _$ d- O, v
  5. corner_pts[i], edge_lens, &features[i]);
    ' h: @  q- Q$ ?0 ?; I. R
  6. //check for return value
    # ~- b6 c- u8 U4 r& ~
  7. if (status != 0)
    7 K; J; @3 y8 \, e( O9 f8 V& i! A
  8. {' C' {) X# G( }0 [# Z- N6 }
  9. //get the human readable error message! @7 {, j$ s1 ~/ l3 H% i1 g5 s0 N
  10. UF_get_fail_message(status, ugErrorText);) w$ V( V. ]2 b4 L0 T! J1 l" p5 t) q3 v+ a
  11. //report error to the user
    # O* U1 f2 a  O' T6 m, D3 P$ {
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    + A% g7 |& y) u
  13. &ugErrorText, 1, ..... );) C* K, Y$ }/ Y) P6 B- M  V
  14. //report error to syslog
    4 U0 R5 J9 |+ z' U! \
  15. UF_print_syslog("Failed to create block\n", false);
    ; [3 O. s9 S0 k4 Z4 G, Y- s2 X
  16. return 1;
    3 g) e, _  W2 E  _3 K6 m
  17. }
    % I( e$ P( S7 P4 _0 S9 N
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);9 W5 V3 `; ^* G$ l, r
  19. if (status != 0)& _1 e* B" x& s
  20. {% D$ v. i% U, {1 Y# m+ w0 D
  21. UF_print_syslog("Failed to get body from block\n", _
    8 W& {* l9 f, v
  22. false);
    6 l: l- d6 Z2 O% k  N$ K  i9 v, Z! I
  23. return;, O2 s" }  ]2 R& Y  ?, |
  24. }; k) \: G/ `+ e: |. C* T9 F
  25. " ?9 E( H8 Q5 K1 X3 e5 I
  26. //NXOpen 的方法,以下是java代码' `& Z8 J' |5 {" R1 X

  27. , e! ^; ]! g; i1 q5 c% t
  28. try8 m1 t; v: x& f
  29. {
    : x/ G8 Y, j$ ]0 ^5 X/ M
  30. Session theSession =(Session)SessionFactory.get("Session");
    ' S0 I- ?% r" P) G4 ^5 ^3 D
  31. Part workPart = theSession.parts().work();
    , A0 }  W+ P! x; t# H! \" \
  32. nxopen.features.Feature nullFeatures_Feature = null;" F9 j0 `( k% \6 U4 s- X
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;9 ]( |$ E) O- Z; r9 T+ k  p
  34. blockFeatureBuilder1 = workPart.features(). _
    - z4 `% ]/ z4 E' M+ `6 Z$ o% s
  35. createBlockFeatureBuilder(nullFeatures_Feature);% W% r7 C6 y2 k$ L3 y
  36. }) ]! o* q4 Y$ K5 u
  37. catch (Exception e)! |7 u, N" Z4 {5 r' z2 e) ~
  38. {
    ' `, m4 X  w, q
  39. //report error to syslog, Message property on _
    # `  `0 P, Z% \+ I
  40. exception object already has human1 T+ A7 v" C) X2 C
  41. //readable message
    2 z4 m( n8 ]# F9 r" Z
  42. theSession.Logfile().WriteLine("Failed to create _
      e5 r! l( C- o' n1 D+ C; \  y
  43. block", + e.getMessage());
    0 ]+ H" U. T+ }( W6 J5 S
  44. }
复制代码
! Y* J4 j8 F0 g- `

5 c+ c& \+ S# P# x% w/ f% q
! ^2 U/ E, n1 e5 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二次开发专题模块培训报名开始啦

    我知道了