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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
% ?5 E8 _# S; B
* ]0 m+ K' ]; q4 Z/ L) j: [: O错误处理& q' w" |' d5 F0 a! E1 P1 }9 F
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:8 i3 d2 m" v3 e
(1)无效的参数输入# b4 e# P* P- {" S7 h3 P
(2)企图创建无效的几何模型; S% u/ Q8 L4 L- V6 M
(3)不可预料的调用顺序
  ^0 x& G- q8 m' S1 I+ Z(4)得不到的系统资源,比如内存或者文件访问等6 g  B, x9 s$ N' t9 z
  所有输出均为最新。
; S$ b2 ^5 Z3 V4 M; M5 i4 ]LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入7 K" r7 s6 t4 D6 R% {, D

* H2 Z5 Q7 J- n' O2 错误侦查
1 M* G/ t9 v7 k: `  @通常返回错误状态或者异常。" G0 o  u0 l, J
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;& D# X, x7 h* x6 W1 I( g2 \
对于NX Open 通过 Try/CaTCh的架构进行处理
. V2 J* p5 H& |* Q8 I. m1 t) ]3 错误报告" Q/ s, C6 m5 X: S" ?& B
(1)获取错误信息: N/ ^( F/ H' X% C! A" s
错误信息,获取一个错误码,并有一段可读的错误消息
8 F/ v& ?' k  S$ Q; g* \ ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理2 q) w. h5 E! v" k) j( w' W% y5 W
NXOpen 通过NXExcepion处理
6 ^$ u( p( K+ I, Z3 S; f , g& |3 v( |) Y0 B) a1 q
(2)建立报告3 T( L4 b, J9 j5 [  t0 b
需要增加信息去报告什么操作导致报错,以及如何处理' i! G. i6 R% H" q1 x; {' E$ I
* }7 `5 O* q, I8 |" h7 _
(3)报告错误
4 \% u: Y' m  i2 B, ] 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
) S" y- v6 z/ V8 a/ p/ N' K 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。3 l7 x  v2 i) I" l
, T4 J, q% h3 U7 [+ L
(4)错误修复
6 X  B% Z! z, T9 X 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
2 D& S7 e) U) Q% Q: i/ K/ b8 Q NXOpen提供的错误修复包括:! B$ ?7 j2 V* d  \& _1 L
a.方法定义给于异常处理,让程序员来诊断错误
& Z0 O) u4 l4 @; _ b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
6 o3 U* K) `7 z$ D) T4 H c.UDO进行处理,去返回曾经的状态
" }5 z1 a- _7 D/ s8 P1 Z1 {% \1 p9 }

  1. ; J# A4 r: l& m7 H; G0 C# v$ B
  2. // ufun 的方法; @$ F2 [) j: y- s

  3. 7 |+ M! ~$ z5 {5 p6 J
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _* v2 x) Q$ H0 z4 ^6 C& N
  5. corner_pts[i], edge_lens, &features[i]);1 O' T4 ^8 A/ J
  6. //check for return value1 o( H: n: {1 D6 O0 z
  7. if (status != 0)+ k9 x4 t0 |" A& \/ _3 T5 S* o
  8. {
    9 K0 D; l  d7 m1 [% g# l' L
  9. //get the human readable error message& m7 N. n; s; J) o  O
  10. UF_get_fail_message(status, ugErrorText);2 k  t+ g6 ?' c& s
  11. //report error to the user
      e# `8 ~+ _+ u# g+ y" f. f6 N# n
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    ( j4 n# a7 D! }/ C/ p6 m
  13. &ugErrorText, 1, ..... );- F4 U* V0 |/ I+ I$ ^9 m& z
  14. //report error to syslog
    % y& ^1 ]5 _* |
  15. UF_print_syslog("Failed to create block\n", false);* j" t7 ^7 `% Z
  16. return 1;
    ( a( q# ?7 _9 c9 K% T! F1 y
  17. }. o5 }$ M" m/ d8 V3 ]/ G
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);2 ]" T, a. Q- v; o2 z* p
  19. if (status != 0)% s% X! R* I2 f. g
  20. {
    8 v) u" M7 D8 V5 W5 M. r( `4 B
  21. UF_print_syslog("Failed to get body from block\n", _- {! ^3 n3 M# {+ k# b0 x* j
  22. false);3 H: |5 r' ~2 D: j9 ~, ~
  23. return;
    1 G% s0 T2 y3 X) A4 y
  24. }9 q8 T  B% @# d$ M% y

  25. % h5 B/ F! v# J$ ^- r0 C' r$ i, [
  26. //NXOpen 的方法,以下是java代码4 P0 b( {' X- u2 H9 r. J

  27. - d' O# Y# E7 Y3 D/ |
  28. try
    8 `/ o8 E) X( p
  29. {* v; x3 a/ e0 V$ m0 j
  30. Session theSession =(Session)SessionFactory.get("Session");
    6 _; B. E/ A( I1 a7 W
  31. Part workPart = theSession.parts().work();4 b5 H, `  z! N. m
  32. nxopen.features.Feature nullFeatures_Feature = null;5 |8 E/ a" p6 Y- F8 |
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    ; Y: d, M* V7 W& K
  34. blockFeatureBuilder1 = workPart.features(). _) u( o9 O9 M3 P1 u3 d+ Q
  35. createBlockFeatureBuilder(nullFeatures_Feature);0 ^) I4 V# z& m, v( E; d
  36. }0 G: B  G! ~" b) M+ R
  37. catch (Exception e)+ `- }! t9 K& t6 }, |; z" X( X
  38. {5 K& t+ p; Z; x1 y9 H8 x8 T+ C
  39. //report error to syslog, Message property on _
    ! `  x6 p- F* J' E. X: ~) w$ L
  40. exception object already has human
    % |5 |5 D% ^+ |! ^& @$ [) w1 V% Z9 ]
  41. //readable message7 a* W9 v$ A% G0 C+ P
  42. theSession.Logfile().WriteLine("Failed to create _! J$ G" m0 }, i# R* e# n& w3 P
  43. block", + e.getMessage());
    + v9 w' }) ]. c4 H
  44. }
复制代码
' V5 z7 E% ]$ s0 D
! t) f# Q3 L9 U+ K( y6 L

3 O7 l; P6 r" ~5 ], e6 Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了