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

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

  [复制链接]

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

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

admin 楼主

2013-11-8 13:35:27

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

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

x
关于NX 二次开发中,错误异常的处理详细介绍: ~) B- R- b' ~) S# `6 B8 w

+ ?( n7 p7 t9 ?3 m, O$ |错误处理8 U; p2 r8 T# p! w. E1 U% M5 s
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
/ Q  r5 X) R5 [) i6 R+ O(1)无效的参数输入7 F8 b7 }% j  q9 D& V
(2)企图创建无效的几何模型7 B! H3 G! `0 I$ A& \
(3)不可预料的调用顺序
1 M- Z: u' g% V, ?1 u(4)得不到的系统资源,比如内存或者文件访问等$ S( S( [7 m2 l* n  h# e+ m, k
  所有输出均为最新。& O( J; @$ m  |7 [- K" U, h
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
6 a/ |) L1 ]# T8 n4 i$ |: _
+ @: d" X, ^/ H/ f, r2 错误侦查: A7 |7 _! e4 y1 G
通常返回错误状态或者异常。
1 ]9 w- I5 {$ W- ^9 \$ \对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
( |- y$ t# V7 l, n5 d% m4 K对于NX Open 通过 Try/CaTCh的架构进行处理$ n* x" H: o; h  T9 v% {6 v7 N
3 错误报告
; }4 X6 v: b& s% w(1)获取错误信息3 u$ {0 k6 }8 Q# J  E* [4 J
错误信息,获取一个错误码,并有一段可读的错误消息! J) i4 H  O" ~* w/ v: Z
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
! S& {! {6 R% w* e/ ^: w; T NXOpen 通过NXExcepion处理/ i/ \% u4 j% d
0 r1 s# ~: m1 b+ C8 c3 R" }
(2)建立报告7 @* ?0 B: p" g5 ^
需要增加信息去报告什么操作导致报错,以及如何处理* ~7 P  V% Z  J2 n+ U4 I# W
% C: h! [, M# d, r0 d" [
(3)报告错误
8 s0 v5 h+ S" W# H0 y* B2 [ 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。" z, k6 V8 y) d5 m' r
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
5 _# M  [5 @, G4 J. u" W
+ t8 ]2 E. c. g (4)错误修复1 [  \$ ?: D1 M" |% ^7 L0 x5 |
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。) U3 d4 c7 S$ Z
NXOpen提供的错误修复包括:: s/ F1 J( |1 x5 b. T) c# X! _$ B
a.方法定义给于异常处理,让程序员来诊断错误
+ S7 W+ g3 Z$ o8 A  r$ ^- l/ L. q b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
% F' V4 i9 _" C; n* t c.UDO进行处理,去返回曾经的状态
4 l  B) K* ?( ~% W/ q+ ~0 e+ F' {# C  G6 s
  1. " g' [6 M& d+ x6 z  k4 r+ p/ ^
  2. // ufun 的方法' l7 U; p0 z9 Y
  3. ) {" w0 Z& O  W2 _. U8 |
  4. int status = UF_MODL_create_block1( UF_NULLSIGN, _
    + w5 x8 q" a" F6 a/ g
  5. corner_pts[i], edge_lens, &features[i]);. |- l) d7 r  f. q
  6. //check for return value4 E0 L* @3 b6 i9 M# A& L
  7. if (status != 0)8 |4 y4 E$ P9 [" V6 E6 N
  8. {
    ) s! o# a0 A& S# y' Z
  9. //get the human readable error message& B& V) ?, F9 K4 t/ s
  10. UF_get_fail_message(status, ugErrorText);: z# c1 }5 k1 N, n" s# n
  11. //report error to the user
    3 D- M/ u' c- a2 ~
  12. UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
    $ e7 N$ g5 o1 O- Y& l1 M: m; o
  13. &ugErrorText, 1, ..... );
      g8 I! x5 M9 w; g1 d
  14. //report error to syslog1 @+ G9 D4 s  O9 N5 Q( J5 C. A( n
  15. UF_print_syslog("Failed to create block\n", false);0 l" p1 v* {) s
  16. return 1;  r' _3 T" W2 E1 e/ R# s1 e
  17. }
    / x' Z6 Q* ^5 p9 U6 x6 i" {, G
  18. status = UF_MODL_ask_feat_body(features[i], &blocks[i]);  U4 w! A- N: j  U" c3 o
  19. if (status != 0)! o1 c5 i3 a3 w
  20. {4 P8 [$ d0 |" h$ q) {
  21. UF_print_syslog("Failed to get body from block\n", _8 g: J! m4 A* w( r, x, a5 Y8 S
  22. false);7 }  ^2 c% e7 y* S& e! P
  23. return;' \0 y! h1 M" c$ w/ G
  24. }  B) j* M& ~3 N, z% N% C. k
  25.   M6 l: j+ e5 r8 g* w- b
  26. //NXOpen 的方法,以下是java代码. \; P! a; o, k3 j1 ^1 X2 d

  27. ) n% m* Y# A2 @# j/ P
  28. try. [- i. t' s2 y1 ^: i/ w( u
  29. {7 H  P' u3 `; T. i0 a$ y0 u
  30. Session theSession =(Session)SessionFactory.get("Session");
    / e  @: z/ Q  c+ O
  31. Part workPart = theSession.parts().work();1 T& t  ~2 g& Y$ u+ T7 {4 K
  32. nxopen.features.Feature nullFeatures_Feature = null;1 R1 b- A! r7 g) \; h) a
  33. nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
    . r, ]% K2 [; G* i( w( T) w
  34. blockFeatureBuilder1 = workPart.features(). _
    , [: @4 w) F6 X! M  F; @' X
  35. createBlockFeatureBuilder(nullFeatures_Feature);5 V, T% `( f8 C% E+ x( c/ h0 t! N
  36. }% _* {3 ?* J1 m% @* r) p
  37. catch (Exception e). G( F: o' B' Z% y/ T
  38. {
    4 h  O2 g# B: p# {0 P
  39. //report error to syslog, Message property on _) e( }; z: d0 j7 A% @$ r
  40. exception object already has human. S. C8 k: C7 C% n) O
  41. //readable message, g/ S1 Q0 ~) L3 ^
  42. theSession.Logfile().WriteLine("Failed to create _" {6 N! l8 Z5 L- g: ?
  43. block", + e.getMessage());# \0 v! K5 I/ C( M8 \# C7 M' t
  44. }
复制代码

( H6 L- |  I2 _4 b
1 n7 Z2 L! _) {, Q7 E1 M

( {; w9 Z7 D8 \
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了