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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍# v+ c  \' d* {* ?3 X6 c" E

2 j1 A  R/ u& `/ T9 e错误处理" Y, T9 X* u' N4 G/ F& p
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:& d, _6 A' I, X6 M9 p( {
(1)无效的参数输入
; {2 I8 L% |: a" m7 h/ E(2)企图创建无效的几何模型
9 a  p3 G( M; Y' |2 \(3)不可预料的调用顺序
2 F# i+ c' ^; k(4)得不到的系统资源,比如内存或者文件访问等! f/ K2 T- n% U& G8 |- O* ?0 ?  l
  所有输出均为最新。  _9 [3 [- C% [6 f# v% {( q# s  N
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入  [4 X3 B# l  |- m% k9 ?3 h
: b, i' q) X" e
2 错误侦查
7 W- l, s  x/ o7 Z通常返回错误状态或者异常。
0 j$ w2 S: f3 b8 s对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
, h* y2 h4 @4 c对于NX Open 通过 Try/CaTCh的架构进行处理
1 h! ]3 K1 g* s& H- a  Q- `3 错误报告
0 v; n/ \/ ?4 Z7 C3 F(1)获取错误信息: u* Z( b3 H5 p
错误信息,获取一个错误码,并有一段可读的错误消息7 [8 o) N% v% T3 S, N6 @; }
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理$ V0 S6 l. i( k: F
NXOpen 通过NXExcepion处理2 S" k3 t' \! D3 e

0 r9 U/ ~" D4 B: h2 k (2)建立报告
) B8 O% f; e, y7 h% ? 需要增加信息去报告什么操作导致报错,以及如何处理
* h1 D. R# p7 f- j, l 1 Y* M( C  E  a" ^1 U- x
(3)报告错误- Q9 M- m0 a1 \- g; q
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
5 Q* {9 z# r3 c2 y4 i! W* G8 v3 q 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。$ V! |' |8 C/ o+ c# K
* _' q0 B) T' X( k  L% N2 m* t) y/ }
(4)错误修复! D! J! k0 s; W; O  U* f6 Q
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。. ~! u" x+ L2 B! E5 g. o
NXOpen提供的错误修复包括:
9 n# S6 I3 m7 r a.方法定义给于异常处理,让程序员来诊断错误8 w# j) _6 `4 i1 c: J  R2 `6 F; s
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态) B7 a" y2 `+ M
c.UDO进行处理,去返回曾经的状态
" s& Q4 }& [9 C  X4 W- b' C% e
& m7 Z0 z. C1 T8 c$ i* d
  1. $ l, G; s- E0 p! ^  a
  2. // ufun 的方法
    5 a/ u) B+ [, n! B# O8 C& S

  3. - r' X6 S8 x( G) J  Z" |
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
      X6 Q. P0 p# i2 O& w% U' e
  5. corner_pts[i], edge_lens, &features[i]);
    2 A) y! Q/ \! E
  6. //check for return value+ x1 I6 w4 u7 K9 R
  7. if (status != 0)
    + g2 W' U2 J# u
  8. {
    & E/ L& k! _7 q: v* _+ B
  9. //get the human readable error message" c7 x7 j, f# ^* }1 M
  10. UF_get_fail_message(status, ugErrorText);
    & A  G* y( c% s3 i
  11. //report error to the user6 a; _! W* S3 _7 `: T0 i2 Z
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _* R( Y' q  z, y% x& h
  13. &ugErrorText, 1, ..... );' }# }. A% k+ b6 S+ p$ _% _% `
  14. //report error to syslog9 W6 p- V% J  _+ L: C
  15. UF_print_syslog("Failed to create block\n", false);
    ' n5 {) t3 r4 ^
  16. return 1;
    ' P% W" q. ^) c
  17. }* f: D5 i9 O8 V: C1 ~
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);6 m# a' Q1 c2 e2 U4 \( |/ R( g
  19. if (status != 0)( q  H3 Y% A0 D; K  }$ X- J' h
  20. {
    6 @- ~' V% t& s
  21. UF_print_syslog("Failed to get body from block\n", _
    4 G( N( d! e. T9 b) v  @7 J
  22. false);, d, i5 s# b7 f$ L" Q/ I4 D* F
  23. return;
    : f4 r. F, n7 R6 M1 H6 B+ {
  24. }
    + ~. x* `4 N% k" _0 l/ q' C

  25. ; Q1 T4 C, B2 p% {5 ]! Z' V& |( w
  26. //NXOpen 的方法,以下是java代码
    ! L% ~! \1 K& `& y
  27. $ T4 n( R) a" T& z6 M! n7 G5 `2 G4 p
  28. try5 h  {4 ^! |$ A7 x5 w
  29. {  c0 E9 x. n+ W  a# i
  30. Session theSession =(Session)SessionFactory.get("Session");
    6 `7 f/ g3 Q+ V% s
  31. Part workPart = theSession.parts().work();4 o' A+ j4 `) Q$ o; r; D, u) Q
  32. nxopen.features.Feature nullFeatures_Feature = null;+ u( l" a8 M+ e" R; m* x
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;6 g/ @8 [* L3 c6 Z4 g
  34. blockFeatureBuilder1 = workPart.features(). _
    # D3 \: N/ J# `) g3 S8 N) J. d
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    2 x9 D/ l. M4 D
  36. }) p  b  @. ^3 J3 Z  ^3 n9 K3 X
  37. catch (Exception e)0 @% T% l! U, ?% t( n. K- r
  38. {" s6 |. b/ K% h" a0 W0 p
  39. //report error to syslog, Message property on _
    - J+ _) O( I. w9 |- c* ~3 E
  40. exception object already has human& M: S$ R0 c% ^* |
  41. //readable message4 `( @. T% T# ]9 g% T
  42. theSession.Logfile().WriteLine("Failed to create _2 g$ a0 u. S8 M  \5 V$ L4 q' L
  43. block", + e.getMessage());6 Z+ d& }9 ?0 M) ^2 X" ]
  44. }
复制代码

+ F# v" ]! T( {: ^
8 G6 w1 C( S1 b, A; f6 b+ W
2 B' ?- r7 E% }7 ~* N" ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了