機(jī)械社區(qū)

標(biāo)題: 西門子840d 子程序問題求教 [打印本頁]

作者: wangice    時間: 2015-8-25 17:42
標(biāo)題: 西門子840d 子程序問題求教
參數(shù)傳遞問題,希望有經(jīng)驗的朋友給個幫助
0 J* G6 K5 I2 b* y主程序:
! L4 ?: C; t$ A5 N- U5 ^LB_1234(1)      ;調(diào)用子程序
9 ]+ R3 T+ s1 j4 u0 T8 b+ @; IM309 x% l6 d+ u& ?% u% y- q9 b+ M% A7 [

' F2 X2 R/ t; Q, f6 C+ V0 @9 Z7 p子程序LB_1234:
$ T- u1 K7 H) a$ x! p9 aproc LB_1234(int type)& U* r/ I8 q# I0 A! d
if ($p_sbupar==true ) 2 R& ~8 ?3 c/ p& d
gotof xxx
$ c+ R2 s) d3 n+ T& l; d7 xelse0 O/ d: ?' o5 J% I7 ?
gotof xxx
+ c4 |0 l6 r  ^3 }
+ m4 e1 o6 Q- T$ }4 y: H
6 `4 r3 a+ J( c1 C4 l/ f) ?! {  H1 X
ret7 @* K) F0 X. J; h4 ^) F

, \! H6 e8 F! b如果主程序內(nèi)不賦參數(shù)傳遞,程序可運行。一旦賦值了參數(shù)傳遞,主程序就報錯未激活未定義之類。感覺賦值子程序需要激活某參數(shù)或權(quán)限之類的,望高手解答。3 Y7 x7 \) \8 i$ Z% }$ O4 d  d

作者: 螺旋線    時間: 2015-8-25 20:05
主程序里沒定義
作者: wangice    時間: 2015-8-25 21:00
螺旋線 發(fā)表于 2015-8-25 20:05 & n* Z4 i2 `" Q# O9 h, O
主程序里沒定義
* L4 i1 L* w+ Y! C
還要定義什麼?3 B/ w$ P. V. z5 o1 O; E! O/ C2 N3 D

# D( w+ f. Y4 ?$ b
作者: 螺旋線    時間: 2015-8-25 23:33
wangice 發(fā)表于 2015-8-25 21:00
. F; S7 I2 D9 Y- R: ^5 f+ w/ \) y還要定義什麼?

1 D3 F% w  [" t  d, {: U所以說啊,看書要仔細(xì)。
4 a+ R! S; ^, _. Q8 J8 q5 |書上寫的很清楚,要用參數(shù)傳遞的子程序調(diào)用,要在主程序里先聲明,用EXTERN。
. k) A% _( N  a. ]0 R你寫的子程序就是抄書上的,雖然沒抄全。但為什么不把主程序抄全?5 b) p2 `: V2 l7 |( e1 L: V
而且報警也提醒得很清楚啊。7 N. l" h! h+ K1 [! s
2 ]( X) G: {5 w$ N$ a

作者: wangice    時間: 2015-8-26 05:07
螺旋線 發(fā)表于 2015-8-25 23:33
$ q" e. |/ |8 n: d7 \/ d( Q所以說啊,看書要仔細(xì)。
. x& l6 l4 z+ O: |4 Y書上寫的很清楚,要用參數(shù)傳遞的子程序調(diào)用,要在主程序里先聲明,用EXTERN。
! p5 f  E6 s2 Z8 c+ ^ ...
9 o0 J4 f4 b$ |/ m5 O% U
需要在主程序中聲明嗎?* l& ~) {7 C4 w3 w+ ^2 F
很多使用西門子系統(tǒng)的機(jī)床製造商,在系統(tǒng)內(nèi)添加了很多自己製作的循環(huán)程序,這些程序在運行中也是可以賦值的,甚至可以在MDA模式下只運行賦值的子程序這一條指令,這個過程中也沒有對賦值有過任何說明。
4 ?( b1 [4 t7 b9 X- f不知道他們是通過什麼方式實現(xiàn)的。
8 y/ ^0 w; P5 o1 @
作者: wangice    時間: 2015-8-26 05:29
西門子標(biāo)準(zhǔn)循環(huán)指令CYCLE81(,,,),在使用中有誰對括號內(nèi)的賦值有聲明嗎?唯一的區(qū)別是,不賦值或者關(guān)鍵項未附,該程序無法運行。
作者: wangice    時間: 2015-8-26 21:00
請不要無腦的抄書,我知道在主程序開始時聲明EXTERN加類型就能使子程序傳遞參數(shù)了。5 _3 ?4 {9 ^0 T& F+ X3 n, \& v
但是為什麼有的程序不用聲明,他們是使用什麼方法?
作者: wangice    時間: 2015-8-28 21:10
怎麼區(qū)分是循環(huán)或者不是循環(huán)的子程序?
作者: wangice    時間: 2015-8-29 22:38
我記得我分別存在製造商循環(huán)、標(biāo)準(zhǔn)循環(huán)和子程序里,都不能直接賦值調(diào)用。
作者: wangice    時間: 2015-8-30 20:47
嗯,這個界面是Power line的老界面了,我們現(xiàn)在已經(jīng)開始用Solution Line了。
" i  A# _# N. }' ^4 T( H明天我回去找找看試一下,多謝指點。
作者: wangice    時間: 2015-8-31 12:18
很可惜,還是沒成功😭
作者: wangice    時間: 2015-8-31 15:38
給你這個程序尼試試,衹是個程序循環(huán)時間記錄程序,可以附在加工程序里。給個郵箱我發(fā)你你試試。
作者: wangice    時間: 2015-8-31 15:43
還是貼出來吧,反正也不大
作者: wangice    時間: 2015-8-31 17:38
proc timer(int type)
/ H0 L& \' q$ A+ j8 y;(1=360Basic,2=360B or AWD,3=360C)  z" z! O! T. L0 L. u- z0 R! ?- K! e
def int error
7 t* r! Z, t( L1 ^+ I) A/ Pdef string[35] ld_name
+ T+ O0 `$ \$ \. e$ f  V) \! z1 o/ J/ E6 J0 v
if ($p_subpar[1]==false) or (type<1) or (type>3)0 y. a/ Z( a/ }8 }! p
  ld_name=("<Unknown>")
" c+ y. ]7 c8 R, W! ^2 m  p    endif
/ a; z$ i" L6 q1 m8 ^if type==1
9 u1 V' E( l* f  ld_name=("<360Basic>")- R; P& P+ N! Q; f+ k+ a0 v8 e
    endif
1 @8 M. Q, Q; |if (type==2) and (r99==57529)
" h- ]* C8 |& c  ld_name=("<360B>")$ G0 v, [- W8 r" ?
    endif9 h% F, S" e! W# `0 c
if (type==2) and (r99==1359)2 f6 x# [+ X+ Q5 P/ H( v$ V
  ld_name=("<360AWD>")
7 A' K# V6 m3 c; s; [% V    endif
' z& g) w9 G" M; g1 K' [8 E& Fif type==3  J+ Z; E# O' V2 r* w$ s) R* |
  ld_name=("<360C>")
; N  M$ b0 k4 y5 N    endif  C3 P- k/ a" |1 V. h$ ?5 j  [
7 T% M% w3 |8 E3 p" P1 L
write (error,"/_n_spf_dir/_n_cycle_timer_spf",""<<ld_name<<" Running:"<<$a_year<<"."<<$a_month<<"."<<$a_day<<"  "<<$a_hour<<":"<<$a_minute<<":"<<$a_second )8 s- g7 b& D, i" J$ \+ L

, o5 l6 {9 R, O) ]( rr600=$a_hour*3600+$a_minute*60+$a_second+$a_msecond/1000-r600: q6 d) U; h! `' K; ^, ?4 f4 |
if r600<0" H# K; p# c0 D" G( r  W1 A
r600=r600+24*3600  }) I% J& P0 z
endif6 b$ O  H4 N: \. ?( J4 U
if r600>3600
- N* J5 A  |( q" B2 b" Fr600=09 C3 ?6 E& i9 v  O4 m% |( k
endif1 j* H8 h0 I7 m
r600=round(r600)
/ e2 f! G1 x; |; n; v% t
- |. j+ L' v0 D7 a) l9 c: ewrite (error,"/_n_spf_dir/_n_cycle_timer_spf","Cycle time :  "<<r600<<" Sec")  i2 y. e. m( g

+ j6 }) z+ G6 l+ _' F+ Rwrite (error,"/_n_spf_dir/_n_cycle_timer_spf","Machining Time:  "<<round($ac_timer[1])<<" Sec " )
2 E  M' j$ I& V' T, o& Q
2 D, w: M! k4 ~& h. br600=$a_hour*3600+$a_minute*60+$a_second+$a_msecond/1000
. \$ `" i1 O! W9 R) Gret




歡迎光臨 機(jī)械社區(qū) (http://e-learninguniversity.com/) Powered by Discuz! X3.4