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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍+ S3 Q% Y* l; m! ?/ {

7 e/ b. z7 O* J& F- r1 C$ T! q错误处理0 z9 G/ C# [! V8 F( Z: {& N6 z
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
) l- i- p0 X: z+ @, H/ ?& R( o# ](1)无效的参数输入
( ~2 G6 F- d: E! g4 L0 o! G(2)企图创建无效的几何模型; d; t& W) s) t* N# g  t, T
(3)不可预料的调用顺序
  b4 y. u) a6 _' e  r1 M- w3 N; J(4)得不到的系统资源,比如内存或者文件访问等
- z: H2 C0 A9 n1 y, w  所有输出均为最新。- Y0 T! T6 ^. y6 u; d  C9 u! Q
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入  x; E" {4 R3 x0 _
, d: H7 l* Y7 a0 P9 M) L8 z- f
2 错误侦查
( v: o$ |* K$ A通常返回错误状态或者异常。4 R2 V' I7 {/ O/ l
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
1 A, ]( @5 }8 C对于NX Open 通过 Try/CaTCh的架构进行处理8 b5 d# m7 m' ~. C0 B3 v* h/ n. d
3 错误报告
( \/ \. ?) }! ~% \' ?. O/ t* ~' x(1)获取错误信息
) W% r$ W* v/ N1 b1 W错误信息,获取一个错误码,并有一段可读的错误消息
" Y- x; U, @( S) ~9 s# {- C ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
( F( k5 t5 y8 T# G* e: l NXOpen 通过NXExcepion处理
9 m  g- L' U  x/ S8 w ' W! y" x! a& S9 u
(2)建立报告
# ~6 G' q6 x& C3 S! s3 B: B- Q9 P 需要增加信息去报告什么操作导致报错,以及如何处理
: D6 _0 G- a1 |8 Z6 b' ] " i8 t1 U4 g! T0 L- l
(3)报告错误, Q  J( Y# \/ m- q8 c6 t
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
  F. P8 C: E1 q4 z9 d; K 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
8 w: u# l1 e; }" w( O  ^1 U; x4 k
. |5 v& P. P# ^; g* `3 P (4)错误修复
$ \$ N' @6 a* x$ e  P3 ]2 V: {# ~ 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
+ g' C- p8 m6 U9 o! } NXOpen提供的错误修复包括:' ]$ [$ `; _  f; I& D$ _9 U
a.方法定义给于异常处理,让程序员来诊断错误
5 h; m* A5 e5 W9 _  i: ^ b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
3 E( ~% @5 \2 J8 a c.UDO进行处理,去返回曾经的状态
1 S4 _$ E2 S# L# }0 ~; m5 H- S7 u/ t4 S7 ?- b* y/ F5 q8 t9 R) t
  1. ; |6 S2 ^! {  ^# }( o" Q* Z) ^
  2. // ufun 的方法4 X3 `5 ^  R" _

  3. " {) w8 V' A# K  N
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
      o, z  x) i3 B! Y8 `9 V
  5. corner_pts[i], edge_lens, &features[i]);' J" X$ A9 i% p$ V* S7 f
  6. //check for return value, y' Z- u* F3 I- {
  7. if (status != 0)5 }/ c  c$ ~* G' \
  8. {0 A) j! ]! u9 `) G. A# X% w) M4 R
  9. //get the human readable error message
    . ^. b$ b! @/ A* C1 p" t9 J7 Q- m
  10. UF_get_fail_message(status, ugErrorText);/ \, R4 K0 g  R: Z* V
  11. //report error to the user+ }) o& D) f: \9 y8 U: x
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _7 }0 m0 l# G) x
  13. &ugErrorText, 1, ..... );; l, z: I  T/ S, z9 B
  14. //report error to syslog6 S& w2 Z) b! |2 t% @7 v
  15. UF_print_syslog("Failed to create block\n", false);
    . ]5 G: Y6 X$ \; n/ c3 S# v  z
  16. return 1;
    4 P- ^) B0 N- H& F% H, j
  17. }
    ! L) ^: m" l- R/ j
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    1 e# M2 P/ A- u# ^$ f" h
  19. if (status != 0)+ {3 }8 ?; \+ Z5 |9 C( ~
  20. {
    " l! ^1 F3 w9 h$ J
  21. UF_print_syslog("Failed to get body from block\n", _
    & K6 `$ w2 v# H5 v
  22. false);: t* O, W! [9 N) h
  23. return;
    3 n* I$ ^% b& B" F2 [
  24. }4 L- z1 t( L' l- Z" t" D
  25. ! L& A  b5 n) L. T; G7 O3 w! A
  26. //NXOpen 的方法,以下是java代码
    ' h% E1 r, P9 V& K" x. C
  27. : f1 f# g; ?! g7 e
  28. try
    / X4 Z; N* J9 `9 ~" J
  29. {
    ; ]+ W2 X1 C, [; z' a, g
  30. Session theSession =(Session)SessionFactory.get("Session");! ]. w3 _/ Z' N! }
  31. Part workPart = theSession.parts().work();+ L4 ~3 ^4 T3 M; T# O; ~
  32. nxopen.features.Feature nullFeatures_Feature = null;
    0 r* v( F1 p; G- n! R
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    1 ^! {" }6 V5 |% {/ i
  34. blockFeatureBuilder1 = workPart.features(). _
    # U, K, j: f- H+ \
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    ' a2 r: R6 g  `2 k
  36. }9 s# ^+ S: p; F, @
  37. catch (Exception e)
    , j; q' {3 m5 w1 ^+ {
  38. {# i" j! X' R( Z! g8 Q) q4 o
  39. //report error to syslog, Message property on _9 G$ ]+ k9 ]4 g
  40. exception object already has human
    - R; P7 W7 b0 @9 R: u( U# H& Z& }
  41. //readable message
    " x2 U# d- N. i8 G
  42. theSession.Logfile().WriteLine("Failed to create _
    , q3 d* }9 j+ S, D/ g8 T
  43. block", + e.getMessage());
    8 i# z8 a! N% X' A1 @! X& F( N
  44. }
复制代码

9 a0 T9 u+ ]2 s) I" U  J( e1 t! i1 }0 V/ _

1 D4 n7 z0 S# r: [& C1 g: 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二次开发专题模块培训报名开始啦

    我知道了