|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍6 b5 v! q2 \2 F: e5 A* z
+ z& ]0 t2 n8 H9 }% b错误处理8 v% u( j2 z. W+ o5 e' B5 W. A
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
6 F1 l0 `. C- a% ~$ k! E(1)无效的参数输入/ A" h$ s+ N6 m0 C+ Z0 s
(2)企图创建无效的几何模型3 l+ e1 d, Q2 {3 J$ Y% f& \
(3)不可预料的调用顺序
: {) @/ C8 ~# b; z(4)得不到的系统资源,比如内存或者文件访问等0 r* m/ y2 ]7 I( J _& r6 b
所有输出均为最新。
; W, f$ \2 F& |% D$ OLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
# b. @8 [6 u. z3 _# H/ c- k* M0 o8 d* ]9 r# ]2 ]
2 错误侦查
. v5 v w& x5 u6 ] G通常返回错误状态或者异常。! ~$ D$ d% D& [% V$ ~
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;* o, c+ O, f% t7 y+ B! d9 a' u' a
对于NX Open 通过 Try/CaTCh的架构进行处理
5 ]8 j2 L* u* ~3 错误报告
2 a! u0 [9 z! b% v* \5 P& w5 z+ B7 x(1)获取错误信息
, @: o5 b# P i$ K/ G% T, x( s" k+ m( o错误信息,获取一个错误码,并有一段可读的错误消息
; h5 w& x8 A# j$ o/ ?* P ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
# t- e3 L1 a2 x. p- S7 I NXOpen 通过NXExcepion处理
# |. i" d2 _# _ - U _9 j4 s- n Z+ _! G
(2)建立报告
! d0 r% r9 V2 k+ `1 ], J9 w s3 {: E 需要增加信息去报告什么操作导致报错,以及如何处理
( y( V) p, d; V& `+ `7 B; A9 t . a. k+ N$ |9 C5 p' ]
(3)报告错误
* W; x6 F0 B4 i/ v7 F5 F$ j" ~- O 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。* i; B6 D- z( [% k
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
/ {8 j0 y) t3 M ! r6 P% j7 A) s# Z/ y2 a
(4)错误修复; U7 O3 p! n B; U2 [' F/ L4 t0 V
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。! g1 |% R6 e0 q# a
NXOpen提供的错误修复包括:# b% ]$ d0 q' ]/ @* V* P t
a.方法定义给于异常处理,让程序员来诊断错误. y0 m. _' X) f h/ G' U8 `
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态 V6 u6 ~* ~3 g+ r; ]3 E
c.UDO进行处理,去返回曾经的状态6 Q# a5 j/ y& R. F S
& k' P! G9 m/ |- * V0 c7 l9 n, j1 E3 J
- // ufun 的方法& }8 P; U* l( z% X
-
% F7 E( l1 z. a b - int status = UF_MODL_create_block1( UF_NULLSIGN, _
$ b' d" O( ~' p O - corner_pts[i], edge_lens, &features[i]);
2 }3 X% K* {/ a" m {$ s7 C - //check for return value; i% j9 f, r9 V6 }3 u
- if (status != 0)
2 T z3 H# u; k2 I% _0 I+ X - {
% P8 c* f/ ?9 B. u5 {2 `7 M. T* m - //get the human readable error message$ A y' t2 O1 j( P+ |7 q
- UF_get_fail_message(status, ugErrorText);8 F+ h; Q& Q, ^: l2 S
- //report error to the user
% q) r% Y+ M: b t% R - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
$ j! E& l6 v. C. Z7 K5 E! [ - &ugErrorText, 1, ..... );$ C( H& f( d" K; _9 {
- //report error to syslog
6 _( }; q/ h0 G - UF_print_syslog("Failed to create block\n", false);
7 l- c. Z1 O8 C - return 1;
Z) Y0 v% z; S6 {5 S0 a7 J% u8 u - }3 s+ u) O+ I6 }0 B3 w: Y9 M" o
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);4 E: R+ A9 t1 v- a' y6 j+ E
- if (status != 0)4 a, z8 \8 B; ]6 J
- {
5 `* D d8 K. a4 \' n$ v - UF_print_syslog("Failed to get body from block\n", _
- h% Y: ~2 A$ c3 u - false);# w9 e0 [' \( y! K4 h* T
- return;0 K- T, r) |4 Y- g0 F
- } K2 w( o0 ^& f+ W7 x6 ^+ @1 ~
-
2 A* U0 @4 ?5 r% [ - //NXOpen 的方法,以下是java代码9 ]- F M4 e# F6 p4 B- _: J* N
-
, k; R) X+ _) w2 o# b& y - try
5 _1 q* ?6 U$ P( u! O - {
. d. j D, {4 s! Y* X/ c - Session theSession =(Session)SessionFactory.get("Session");
. t* o7 a4 W9 G0 z/ K5 \ - Part workPart = theSession.parts().work();
+ \1 h; `/ q/ [9 c* e1 f% o G - nxopen.features.Feature nullFeatures_Feature = null;: g& N( X; m# m
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;7 J- Z$ C& H! `( ~+ i; ?
- blockFeatureBuilder1 = workPart.features(). _$ F' r8 o) Q# R5 Q
- createBlockFeatureBuilder(nullFeatures_Feature);% W/ J( x6 R7 i9 w% C2 ]4 C
- }
! h+ g) f7 b) Y; X* l, @ - catch (Exception e)
. l9 [) e0 i; |8 j. K - {
& @! U1 K; C3 J3 V. P7 }0 s' P1 p5 ~ - //report error to syslog, Message property on _
# f" z* ]7 G3 H: C8 t - exception object already has human
8 k: k7 w, f, ~1 V - //readable message
% i/ ^& m& E f& Q5 c2 x - theSession.Logfile().WriteLine("Failed to create _
. `) r! |# N7 c' E: ?" A6 w- v! J - block", + e.getMessage());' E5 |) S; B9 }) S+ E3 ], d
- }
复制代码 * k/ o6 k) r' S2 o/ g0 s$ t' Z
7 g3 @1 M. Z7 U5 z' l; j; H
+ y/ V( x8 Y9 S+ D5 ]+ A0 R |
|