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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2013-11-8 13:35:27 | 显示全部楼层 |阅读模式

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍
6 s6 T, E" J* a! d
4 _* N* L- [  j  j1 \错误处理! q1 H5 `, @  Y0 k+ M( V/ \: g3 _
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
4 F% Z- [  O3 W5 |# j(1)无效的参数输入
' t' e& R" t, J+ N5 L1 ]1 g/ J(2)企图创建无效的几何模型
+ t7 `" I  q$ H2 L$ S; o(3)不可预料的调用顺序4 O* Z/ ~" ?( C: L
(4)得不到的系统资源,比如内存或者文件访问等7 q! G6 h5 p' Y6 c1 z
  所有输出均为最新。
$ c% d4 B/ d+ pLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入6 U: n8 U8 L% f' Q" s% y( N- f
/ e5 [0 P3 A! n6 r$ M: Y, J9 R
2 错误侦查
' n# g1 z1 E' ?6 F通常返回错误状态或者异常。7 ~: @  m  L! Y
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;; C* J! |0 P/ D8 w2 n$ H" \
对于NX Open 通过 Try/CaTCh的架构进行处理
$ v! y8 e& }. r2 D6 [2 T) P3 错误报告
  ~5 k% R: j1 ?) M  o) \1 u(1)获取错误信息6 U! z7 f) o+ W
错误信息,获取一个错误码,并有一段可读的错误消息. r. `9 M4 T6 }% O
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
' E1 Z7 H" V4 c: w* ? NXOpen 通过NXExcepion处理
+ y3 q$ D9 i/ m " d. T1 U* q/ m* n# ?
(2)建立报告
2 s* z! U9 y8 R/ A 需要增加信息去报告什么操作导致报错,以及如何处理# O6 i$ ]3 K( i
9 c+ d% P& x4 m, `
(3)报告错误6 \4 e' J: F4 b% }- ~# V  O
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
! x  a, T2 u0 Z" A7 F 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
) }; ~+ q" J8 W6 o
: _" ?! a/ h+ f1 [ (4)错误修复
1 Q- _+ n1 X% H* x9 |/ c 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
1 W! ^& `! S- S3 o1 g- l NXOpen提供的错误修复包括:
1 v6 f: \6 ~2 [; [3 @' o) G  B a.方法定义给于异常处理,让程序员来诊断错误3 w1 Q4 W) o( i1 E9 p
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态7 ]. }5 @, t! Y: P/ \" A3 e
c.UDO进行处理,去返回曾经的状态2 q! x0 ?; a& i
$ P) N& i) w, H
  1. & X1 {7 N8 t. ^+ `5 ?
  2. // ufun 的方法
    5 J6 L2 ~9 q: M  X3 U& p7 m0 s; g& Q

  3. $ U3 i$ M8 z/ s8 p
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _; ^7 X1 d: \; f7 Q! g
  5. corner_pts[i], edge_lens, &features[i]);
    ) h+ N6 T$ d& Z( p% I; {
  6. //check for return value
    ! E) x" G- {6 N4 ]) p1 D
  7. if (status != 0)
    1 t2 H. P1 M, |, ^# U
  8. {) O1 ^+ i3 o. H5 k4 a  O$ h
  9. //get the human readable error message  b+ g4 [7 L# s8 E# D, J( d
  10. UF_get_fail_message(status, ugErrorText);& u' h4 Z7 s5 G% Q! t! m
  11. //report error to the user
    1 i* {( [/ z4 d% J6 J
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _1 t! [9 o. `; L2 Q: F) {$ @! L' T9 V
  13. &ugErrorText, 1, ..... );+ }8 y, v2 n" {' D* L
  14. //report error to syslog- K/ @9 B# t5 N" I: J
  15. UF_print_syslog("Failed to create block\n", false);' k% o  Z) a) L  R2 s) p  u
  16. return 1;& X2 R) r5 O( A! K/ R
  17. }1 I/ F' p  W* Y9 @
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
      ~: x0 t3 L! j1 d; s2 Y
  19. if (status != 0)
    6 H9 h" l- W1 F* o: p/ s- T
  20. {( W4 E$ O; T8 _# Y5 k
  21. UF_print_syslog("Failed to get body from block\n", _3 h- R( T2 Z& b* M+ w& t/ G, v
  22. false);# V9 a6 r# z- K2 t2 o
  23. return;% {! P- C. G. @. M
  24. }
    + e7 b2 L% i0 g1 s" L
  25. % G$ d  \  E3 Z$ `
  26. //NXOpen 的方法,以下是java代码! B" z9 G! J: f6 F2 `

  27. * b& R+ H, M; W* D2 s4 C7 B5 w6 L
  28. try
    . D$ e! z/ T# ~
  29. {
    0 H2 D, F4 q  P+ P+ {" M
  30. Session theSession =(Session)SessionFactory.get("Session");) ^# Y* R- X, Z8 J5 I
  31. Part workPart = theSession.parts().work();7 Z3 p! {5 g2 v8 h
  32. nxopen.features.Feature nullFeatures_Feature = null;
    0 ^; ]1 v( r7 O; d' w5 u6 b
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    ! y* f$ R& r- u" W3 D' g
  34. blockFeatureBuilder1 = workPart.features(). _3 w0 ~5 Z( i$ J2 K9 E, a1 l) v+ r
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    2 i* p2 h8 I# C. Y
  36. }- x. b* p' A! R5 H' t" `
  37. catch (Exception e)
    0 A1 X: D! |0 l
  38. {
    0 s9 x3 w. W' Y9 w4 s% ]3 `
  39. //report error to syslog, Message property on _+ Z& p/ s" T( `3 W8 m
  40. exception object already has human
    ! Y2 u! Q* k2 V: s: k
  41. //readable message
    # F( U7 f; l! i$ J5 z5 N% a8 ]. X
  42. theSession.Logfile().WriteLine("Failed to create _
    : q$ D+ l1 u2 c7 ^6 C% @# F+ u9 E
  43. block", + e.getMessage());2 \: v! q6 e% P4 W% V
  44. }
复制代码
9 Q$ p# S; ?. g7 p4 P6 E

# c7 m6 y" a! x! J

4 x7 D) O; {+ N  @+ s
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复2

0

主题

44

回帖

104

积分

注册会员

积分
104
发表于 2014-9-28 22:06:32 | 显示全部楼层
学习了,谢谢高手
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了