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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍% ~' M1 @% a! H* C6 v
! S# c  E) Y8 G. y+ F. q3 [
错误处理
7 X7 G6 Q  r) U/ ?  E4 d1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:( N$ j( j6 K/ y5 o4 I( m! H, g8 L: O
(1)无效的参数输入
' d" x* I7 w! v/ A0 O" y9 r3 w(2)企图创建无效的几何模型0 V+ m8 h+ s/ v' X7 _' Y  _; k
(3)不可预料的调用顺序
7 {/ ]# d  W& ^+ Z7 h(4)得不到的系统资源,比如内存或者文件访问等
0 {: ^; m' Y" D$ K1 Y+ v) D- b  所有输出均为最新。5 l; J  s' }. s7 |1 N& \+ Z
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
; g# C# b- o% D" t: h6 m; B8 N" M& D- i
2 错误侦查
! H, |8 ^1 a9 X7 J通常返回错误状态或者异常。
5 a/ M  p6 s. F% n1 c对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
+ d. u; `2 v# o( I% }对于NX Open 通过 Try/CaTCh的架构进行处理6 X1 W7 x  l" H4 B' c
3 错误报告
( r7 E/ ]8 y& V1 l% e6 ?(1)获取错误信息
0 u7 o% l  P# _) x! q错误信息,获取一个错误码,并有一段可读的错误消息
; ^! w: |: b( } ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
# G7 \0 @: @2 l) u NXOpen 通过NXExcepion处理4 r% v) J* {# A0 g( I

8 P3 C% M* D! `: F' _7 N (2)建立报告
2 s3 C: _6 o! {. Y; y4 D/ H 需要增加信息去报告什么操作导致报错,以及如何处理
: a. i- |- z% B
3 z2 C# ~6 x9 d' A- m9 g+ G (3)报告错误
" @  n8 E, T- K/ { 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。  o9 I) n2 B2 {" Z2 N
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
0 k& g6 w+ u# B. z& m
$ R7 m, x  a4 o (4)错误修复
: N% g# y, W' Y! I 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。  _) W4 t+ I/ J- _
NXOpen提供的错误修复包括:
6 K% b; |# ?, N( f( M a.方法定义给于异常处理,让程序员来诊断错误- S9 ]9 j1 B* `1 H+ S* |
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
- a8 f5 u1 t8 ]: t c.UDO进行处理,去返回曾经的状态
, ?7 i1 W. j+ y% ^/ ^8 L5 @2 T$ C0 L  O$ w; ^7 I. J

  1. . V; D' d- G, p5 g8 C: w3 K
  2. // ufun 的方法# z* n- o! k; o; V+ D0 |+ R4 i
  3. " M1 h- P+ z" y$ _" r
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    % ]; e$ f8 J  X$ M
  5. corner_pts[i], edge_lens, &features[i]);
    " l) I. d+ R0 G# b6 P% U! ]% o
  6. //check for return value! H% l8 J5 j  z; b: C1 a2 S
  7. if (status != 0). w7 e! N, w2 l
  8. {. b1 U, D' _+ z( K/ ]
  9. //get the human readable error message& _* y- L& K# ~0 q$ i/ E
  10. UF_get_fail_message(status, ugErrorText);
    0 `# p9 i/ h# F1 f- ]" B) Y$ ]
  11. //report error to the user
    ) ?2 \1 \& H4 y' ^0 f, L5 N# m
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    * f8 l2 k( l* Z- ~. p
  13. &ugErrorText, 1, ..... );* ~0 d4 s7 C/ A; e9 a* x& A' y
  14. //report error to syslog; v4 V1 {  o0 S" {% ]% }
  15. UF_print_syslog("Failed to create block\n", false);' [- a$ D- v+ c8 g; V+ X- f6 r7 ~# O
  16. return 1;
    8 A9 F* y# b. T) g9 }) V4 U5 y. u
  17. }5 S3 D. b9 ^2 P& M) F6 T9 ]9 m. s6 Q
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);: [2 |: ~( c9 |% u1 S6 V6 o
  19. if (status != 0)/ U4 ]" Z' m% h; {
  20. {
    % n  F% l3 C% t5 \" j  v. h
  21. UF_print_syslog("Failed to get body from block\n", _/ }. O6 u, \/ y, J
  22. false);
    ; ?- j; w9 Y" I  n( V( X5 }4 F7 ]
  23. return;1 i, F. G9 f/ j' u! x1 ~' m: |
  24. }' U6 i- p1 Q1 R/ ]; m. z) }# M
  25. & x7 h8 t6 _  Q  I9 D" \/ R
  26. //NXOpen 的方法,以下是java代码' _! I* V5 w  D) @; w

  27. 6 N4 ?% y+ K' d. h2 H
  28. try
    ) e, W/ k7 c6 l" {
  29. {
    ) X5 O6 F. ?- n0 y8 ?
  30. Session theSession =(Session)SessionFactory.get("Session");; P$ s7 J. d7 a# R; N2 X" {" C6 r( K
  31. Part workPart = theSession.parts().work();- v3 u# u, u% V1 C' ?% [
  32. nxopen.features.Feature nullFeatures_Feature = null;
    7 g& b# b7 \  {
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;4 s* A4 [8 l# V  i# X# }
  34. blockFeatureBuilder1 = workPart.features(). _
    # M3 Q6 |* G7 x, ?6 @
  35. createBlockFeatureBuilder(nullFeatures_Feature);
    , }6 r3 @9 q# ^* U" L! v6 Q+ T
  36. }3 e% [( P3 j9 a$ \- \' d( M
  37. catch (Exception e)
    0 {9 o) o. e9 K5 O, Z9 u) p4 [
  38. {6 P4 X8 p  \6 T, l( p8 ]
  39. //report error to syslog, Message property on _2 C; H) n7 L2 }& H: p- m+ K. u0 m. S
  40. exception object already has human
    9 y; {+ J( f0 Y* }/ E
  41. //readable message( H! t6 F) K! n
  42. theSession.Logfile().WriteLine("Failed to create _$ N( o8 ^' W2 p! w( l! a
  43. block", + e.getMessage());
    * f2 @5 {' Y3 J- c" u) |5 L9 \- V
  44. }
复制代码

( A" o: N6 E0 @( y" o0 e
7 J+ m+ {" `8 r/ X4 j( z% y- n7 J
5 Z" Z4 I+ j( b) 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二次开发专题模块培训报名开始啦

    我知道了