PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍; P( M( X) l( \! Y7 n4 |, U8 A8 [

9 z7 R: @- v" w2 H  q4 Q( P, L错误处理
5 ^8 e3 ~4 s' ^8 f$ U1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
+ O) D+ x; ~" v(1)无效的参数输入
. U7 F8 @; X/ _8 M5 O% d(2)企图创建无效的几何模型
6 P! }2 z$ x0 i(3)不可预料的调用顺序
( `; Y0 [" ?. q7 Y( \, a. k(4)得不到的系统资源,比如内存或者文件访问等
1 M# X9 h- D$ s7 L  所有输出均为最新。( U2 q& d- \5 w) ^5 R2 L( ^
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入  k7 P0 W$ U7 @" X/ S. R  L' x5 @6 ?
2 |4 D- b' e, m9 H
2 错误侦查# V  Z( u! r1 M- l* R6 p' H
通常返回错误状态或者异常。
; z3 n* J7 w0 R' V/ p' Z5 |对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
$ @" U6 N1 a) R+ V5 w- Y对于NX Open 通过 Try/CaTCh的架构进行处理: t6 n) b4 J) W0 S' a
3 错误报告
9 K/ G4 ^1 q6 ]" r/ T/ k; }(1)获取错误信息
) |- N5 Z7 o0 I# m错误信息,获取一个错误码,并有一段可读的错误消息
4 k9 ~) _7 k! T; h/ n ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理# H- i1 c4 M* d
NXOpen 通过NXExcepion处理
/ _3 @6 ~" w- Z
" \9 N6 }* e$ D2 w) K (2)建立报告
0 B5 u' A* ^) {; A) @& Y+ o  X 需要增加信息去报告什么操作导致报错,以及如何处理
' Z  P" z! {  ^% E$ x ) _, D" z: |! i
(3)报告错误
; M5 c" R4 {2 N) y' h; [: K 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
7 Y+ b, }4 H- [1 ] 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
- a5 F; G8 L: H& o" ? " B0 k# B0 k' Q' f5 S% o
(4)错误修复
  C0 _. [3 h$ e: n7 ?& {% J 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。; E/ X8 v( p, e) _# T
NXOpen提供的错误修复包括:
3 P7 m$ X& H2 T  c# l* P- F6 a a.方法定义给于异常处理,让程序员来诊断错误6 d# q- q. k, \" }" ?6 l
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
6 S" l: i( [- |) c c.UDO进行处理,去返回曾经的状态
, w" z7 p) c$ b3 K& @8 N5 B' ~6 n4 L0 u2 f" B% o) K# n+ n, x( ]

  1. + B+ Z0 W8 h" `7 W; G# _: {+ q2 v& W: k
  2. // ufun 的方法
    5 ~/ }' ^/ Z  P; u0 U( a
  3. , {! e2 {3 }! o( w
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    # k/ A$ M6 B& o, Z' r0 C+ m1 ^
  5. corner_pts[i], edge_lens, &features[i]);3 q' H9 p$ `* ?' l. V, {# ?! h
  6. //check for return value" G- I, F/ M+ C8 B9 I
  7. if (status != 0). i0 c$ u: Q/ v: \
  8. {
    ' L8 _: V/ j9 x" u' v
  9. //get the human readable error message8 C6 P$ V; I/ _0 S8 {
  10. UF_get_fail_message(status, ugErrorText);! j$ D3 o. t2 @  b
  11. //report error to the user" x8 ^9 I1 K3 m6 y$ X
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    , F; ?& N: q+ V9 \" M; B+ B4 @
  13. &ugErrorText, 1, ..... );
    - f/ {. s2 I+ X* y
  14. //report error to syslog
    ! E/ i! L9 @3 {+ r4 S
  15. UF_print_syslog("Failed to create block\n", false);
    1 h9 @) U1 M$ t% Q. T
  16. return 1;
    . z; P# s2 r5 Y: i5 E# y# B
  17. }
    ( j- F' \2 B2 S" ]* {$ M# g
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
    % c# Q/ W) f, `; T1 C+ e
  19. if (status != 0)- y) I# N0 C) _8 n
  20. {* s& V6 F7 `( R; k1 K$ h
  21. UF_print_syslog("Failed to get body from block\n", _
    % ^- F: e) M, N" S$ Y" m5 f# G! d
  22. false);
    $ V( e6 q% T* O4 s
  23. return;
    + R; {: L" Q+ f* K5 H8 A7 A: y
  24. }
    1 l4 U- K; c1 G! t1 z4 F3 [
  25. 0 o* j8 I& |' p# p9 k
  26. //NXOpen 的方法,以下是java代码
    9 X- ~1 m# W& s4 Y% i9 E
  27. / K+ S+ t1 s6 t: \7 a, v( E
  28. try& {0 s" P4 o* e+ z5 u$ P
  29. {1 `. V* d: z( h7 w& {4 i  K' A, ~
  30. Session theSession =(Session)SessionFactory.get("Session");# `3 I; y( _; R: e  t7 C7 M
  31. Part workPart = theSession.parts().work();( o5 y! L7 ~/ u8 v
  32. nxopen.features.Feature nullFeatures_Feature = null;0 x( R, j/ `& ]& S' R) J/ a6 d& e
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
      N& t1 ], q2 h1 q' m
  34. blockFeatureBuilder1 = workPart.features(). _  k0 A; }6 X) P$ n9 \
  35. createBlockFeatureBuilder(nullFeatures_Feature);, C( c% ]  `7 ?( g: \; u" ^
  36. }$ ?' p1 @) q) g5 I1 ?
  37. catch (Exception e)2 T& d/ i" Q7 T( U9 A0 V  M1 k* [
  38. {6 w. {: R8 X+ g5 I8 [. u
  39. //report error to syslog, Message property on _
    0 _2 X6 ^0 j+ _: b, G
  40. exception object already has human1 U! P* y  u% X8 M/ h+ e7 E
  41. //readable message5 ?* Q7 r) ?2 J' j+ |0 r% V$ N
  42. theSession.Logfile().WriteLine("Failed to create _
    0 v- r& w* b" g9 Z& a
  43. block", + e.getMessage());; O$ M6 K3 d3 Z: O- @3 A$ ^" }
  44. }
复制代码

' |% o* @/ [6 R4 [) K0 b
$ u9 }: ?- W. O2 y
0 }/ `; f3 R4 n0 Q
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了