埃德蒙顿华人社区-Edmonton China

 找回密码
 注册
查看: 60836|回复: 65

[技术互助] 需要学习PLC CNC的同志请在这里交流

[复制链接]
鲜花(0) 鸡蛋(0)
发表于 2009-2-7 22:19 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
共同学习提高PLC CNC 维修水平,请大家踊跃发言
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-7 22:26 | 显示全部楼层
我会陆续发表一些fanuc16/18 ,simens840的一些维修经验,有感兴趣的朋友可以讨论一下
大型搬家
鲜花(1) 鸡蛋(0)
发表于 2009-2-7 22:35 | 显示全部楼层

回复 沙发 的帖子

好贴,不顶不行!
鲜花(0) 鸡蛋(0)
发表于 2009-2-7 22:37 | 显示全部楼层
老杨团队 追求完美
原帖由 korg707 于 2009-2-7 22:19 发表
5 l4 N- H2 a* ]共同学习提高PLC CNC 维修水平,请大家踊跃发言
# }6 D+ q/ N. o
期待中...............
鲜花(0) 鸡蛋(0)
发表于 2009-2-7 23:10 | 显示全部楼层
鲜花(0) 鸡蛋(0)
发表于 2009-2-7 23:53 | 显示全部楼层
Waitting...........
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-8 02:04 | 显示全部楼层

NC程序中PLC信号的读取方法(simens840d)

老杨团队,追求完美;客户至上,服务到位!
NC程序中,很多时候为了安全的考虑,NC程序需要快速直接从PLC中读取信号。在SIEMENS 840D系统中,能够实现NC与PLC之间数据直接交换的方式很多,现介绍EX-CELL-O XS321机床中应用的方法一:# N/ K4 @/ k# m( O* V$ S
1应用形式4 k2 D: m8 G7 \% g$ J
在XS321机床的换刀程序中(WZ_BELADEN.SPF),我们会看到如下的NC程序,
! g/ B! J( v0 c4 u“N460 WHENEVER $A_IN[34]==FALSE DO $AC_OVR=0”* ]9 J& e1 `& x4 l
从这句程序的大体意思中可以看出,此句程序将变量$A_IN[34]的值作为判定条件,根据条件是否满足来选择往下继续执行。
7 C0 ^7 ~2 n& G5 _5 B0 i程序的大体意思我们可以读懂,但是很多人可能要疑虑$A_IN[34]到底是做什么用的呢?其实$A_IN[34]是NC程序中,直接用来读取PLC数据的变量。$A_IN[n]用来读取PLC的信号(有的时候是直接读取外部I信号,而不需要经过PLC);$A_OUT[n]用来向PLC输出信号(有的时候是直接写给外部O信号,而不需要经过PLC)。  P( N* _, @/ q3 t# F$ |  l
2信号详述" K/ s6 V& |, \5 W( ~
那么这些变量与PLC数据之间又有什么对照关系呢?其实
: ?- P( t# @1 H, U( L/ e% U, G7 @  C& T2 C4 r

) J( X% ^' `6 @, K; H+ W" n$A_IN[34]对应着PLC中的DB10.DBX129.1,其总用就是用来直接读取PLC中DB10.DBX129.1的值。顺着这个关系我们继续往里深入。在PLC程序中(FC167 NETWORK32)可以看到如下程序:
% o8 t% U/ B% y: A4 P7 `O M 121.4& Q9 D) X7 I. C" A) o0 ^1 ^8 A  H
O
$ e! A  e, S; s$ R! JA "m_AUTOCYCL" //M82.2 OPERATION MODE AUTOMATIC FOLLOW.SET8 b  D5 h) I' _1 ~1 o/ y% W
A M 121.3
7 b8 }; O( {$ Q# y; V4 [= "DB_SIEM_NCK".A_Set_Inp34 //SET DIGI.NCK INPUT 34.- r9 S0 L: A8 ?0 C
继续向前查找M121.4与M121.3我们可以知道,这两个信号换刀门打开的信号,都是来自于外部的输入I72.7。这样,我们就可以理解为什么NC程序中为什么要用到$A_IN[34]变量了。通过读取PLC中DB10.DBX129.1的值,来判断换刀门是否打开,如果已经打开,才能继续执行换刀的过程。
+ S0 Y; i- F+ m' |  n3信号对照表7 ~" S' n+ C( J& |2 d; S" H2 g
除了$A_IN[34]外,在NC程序中,还用到了很多这种直接读取的变量,这些变量与PLC中数据的对照关系如下:" a8 ^8 X" W: V9 `: Z$ x$ V
NC变量
5 N+ l2 F' `0 L5 z) F4 }PLC地址
' y8 R" ?0 m1 C& s5 Q! X* MNC变量; t) d  @2 A# P) v# }
PLC地址4 b! j; u+ T% k! `1 \/ m
$A_IN[9]
+ i5 k6 l/ Y, _% t  XDB10.DBX123.0
* @, v. I' d. h1 P4 ~$A_OUT[9]
8 i& c  _9 z# z6 S. {8 y0 W. q- QDB10.DBX190.0
- Y* d0 y8 J) H! c: {1 y$A_IN[10]
) _1 o- B- D9 [/ b5 z- E' j6 mDB10.DBX123.1
, l; Y1 r1 o5 @# x/ V$A_OUT[10]
# `8 a/ E3 n" I2 K* K; HDB10.DBX190.14 S/ ~6 t7 }# J5 h' N( b1 l( g) r
$A_IN[11]+ a7 O4 U4 g. a9 U" H: u- C: f: A
DB10.DBX123.2; d; n% g  @* M: n6 G3 X
$A_OUT[11]  U9 @  V9 X4 A) k4 N/ U
DB10.DBX190.2
. \: G, c  |. d9 r1 b; `$A_IN[12]4 \" L5 }- S, k. h: A& Z
DB10.DBX123.3
5 J9 p  Y3 U- `$A_OUT[12]6 q6 v5 V- p5 q; `. w4 m
DB10.DBX190.3
) p7 S# i4 r4 n) J5 p; A$A_IN[13]. J* T) |6 B3 w; {
DB10.DBX123.4+ m- Q9 w1 f: z9 h  x/ j
$A_OUT[13]* |% ]' o/ R; z
DB10.DBX190.47 ?. x: r+ h' k8 Q1 K( j! c( D
$A_IN[14]
8 }3 d, C* R4 x+ V8 v8 S2 HDB10.DBX123.5: K2 f$ y, W" P$ a
$A_OUT[14]
9 M/ l+ V2 c# m2 @; n: IDB10.DBX190.55 }2 Y9 U4 g: e! U6 l2 O, v
$A_IN[15]
* k) ]: t. a9 ]DB10.DBX123.6, R  ?/ z' \- A1 I, m0 ~
$A_OUT[15]; F- q0 `: s! `: F
DB10.DBX190.6
- `4 v  |6 m* {% w+ @3 C; {" [5 o$A_IN[16]8 e# p; ], U1 p8 S. X/ i+ G
DB10.DBX123.7
6 }: e) x$ U( o$A_OUT[16]
2 m* A, |9 \& w( Y( `* A9 qDB10.DBX190.7
' b8 Q7 ?' X( ?+ x8 Z# g. A$A_IN[17]  @6 d  o* e4 w$ L
DB10.DBX125.0
, v+ Z  Z/ Y3 T9 j$A_OUT[17]
3 _8 _6 y' E0 h/ a8 i1 iDB10.DBX191.00 ~9 I, J  r: q: L: `% E
$A_IN[18]9 h5 M: T2 s0 G% _
DB10.DBX125.1
  A  g! f( P. |- f$A_OUT[18]
! N0 r% r/ r* tDB10.DBX191.1$ ?4 N( q  n# U# y
$A_IN[19]& Y: F- ?; g( ?4 w
DB10.DBX125.24 n% E( k( x  d5 c% N# s1 t
$A_OUT[19]6 x9 g% |2 Z  Z& B/ q
DB10.DBX191.2
$ E( C" M  i5 g5 l$A_IN[20]
1 O; y" |/ i( w3 O$ ?) pDB10.DBX125.3
- o! ^! ?; m0 \- M+ d% B$A_OUT[20]
" f' e. j4 t' y. L, P& V/ W3 qDB10.DBX191.3) l- x. u* O1 j3 I) E
$A_IN[21]! S- y' q5 _" o* o: |1 V
DB10.DBX125.4# j! \7 |3 m1 u1 Q. B% m
$A_OUT[21]2 i5 _, h; P! Y
DB10.DBX191.4
3 L% K3 I4 u& V3 C  x$A_IN[22]+ N! y* q5 A0 q0 S4 B  G  P
DB10.DBX125.5
/ t6 d' |5 @5 r. W$A_OUT[22]
3 C) R; x  G- G7 R% y. B- v3 v1 bDB10.DBX191.5# j9 S* p' y" n1 w
$A_IN[23]# h# \" G; q7 l2 [5 W- a
DB10.DBX125.6- _4 o+ o' s# R. N% }' \' e
$A_OUT[23]
' e' w7 X1 `3 V7 d. LDB10.DBX191.6. z1 t9 X) `( ?- r4 i
梁景利 第 2 页 2007-1-3
; X' s, b7 H* C  N" y6 m) y格物致知 KEEP STUDYING
1 v% |9 F& f: C1 Y5 n$A_IN[24]- T$ X5 I$ M% m: n, j) Z4 \( p
DB10.DBX125.7, {( o) l& Q1 {5 n0 q7 ^9 b
$A_OUT[24]( K, O% ]$ c" J& x0 J8 M
DB10.DBX191.7. j9 s7 t: B7 ~. s
$A_IN[25]6 ?; n5 |+ Y# P
DB10.DBX127.0
2 |: D9 }  n1 [1 n) Q$A_OUT[25]
, X4 ?% P" |8 GDB10.DBX192.0
/ e2 y0 R1 w/ \6 _, k1 J) g$A_IN[26]
* ?$ I) C4 S! Z* E, v. X0 E; CDB10.DBX127.12 ^( j$ @: k$ v2 k
$A_OUT[26]
8 s# g" _. o7 i: ]" _DB10.DBX192.1+ u0 @+ o- f2 ~/ T
$A_IN[27]
8 i. v3 `7 Q: N' E6 y! N) ^DB10.DBX127.2
5 \2 }- S( n* D$A_OUT[27]5 Z# Q) q7 X3 C/ c/ G# R& I
DB10.DBX192.26 j. O* t: g9 }# \5 F
$A_IN[28]
+ @+ l) z( @8 ?3 F; BDB10.DBX127.3/ i7 |4 j- ^8 P) J/ ]) P7 K
$A_OUT[28]
5 W5 G8 R% j* j! {" j, cDB10.DBX192.3( y" i% `$ K0 Z
$A_IN[29]# F3 M" d3 g* L  Q, h' @& E: ]
DB10.DBX127.49 h# V; z8 b1 y0 v& N0 _
$A_OUT[29]' @* u( {1 F( V( ?1 {* [0 j
DB10.DBX192.42 U7 G& O9 [4 i, d1 }, J" h
$A_IN[30]
7 h) u, v' ^6 `DB10.DBX127.5
* S9 q0 T! ~3 P$ C: l0 p: T$A_OUT[30]
. t+ T, u, U4 G$ ]DB10.DBX192.5/ i# e2 {2 ~  `: D, |6 o# L' }5 d* W
$A_IN[31]
( Q3 H) t) j1 ?3 e+ M3 x! cDB10.DBX127.6
$ O0 J+ \  U" w( Q$A_OUT[31]
" i- }6 f* x' BDB10.DBX192.6
4 S) R9 ^' p, ~' s: t$A_IN[32]
' ?1 w; ^& P" Y" |DB10.DBX127.7
1 [+ ]) V7 ^. m, b) A% c$A_OUT[32]
1 Q- R# Y1 O. b1 r: tDB10.DBX192.7
0 f! u5 d- S8 [0 c$A_IN[33]8 t# }) W7 h4 d; w( V. Q- r
DB10.DBX129.0
2 n" f; E4 T6 r3 e) V+ H* ?$A_OUT[33]8 h) r  O4 Q# B% A
DB10.DBX193.0+ x, i) y4 p+ o5 k7 X+ i0 o) E
$A_IN[34]
8 {6 I5 O6 M9 r$ b% ]+ @DB10.DBX129.17 a$ r. b! z' C8 V; v& |2 `- \
$A_OUT[34]
4 _% m: R8 x- Y5 ]DB10.DBX193.1
+ [* V1 k% a5 d, b) m$ T$A_IN[35]! p, U0 S& b# Z9 h) D
DB10.DBX129.2- _" b- t0 h# V7 Z
$A_OUT[35]& J& p6 i& R; S
DB10.DBX193.2
" I& R! _$ \* i- A; }$A_IN[36]
: R- l# G9 Y( W( w7 h9 F; YDB10.DBX129.33 f( a- F$ h* a! X
$A_OUT[36]8 s6 N% c  W4 v  Q) g; M! ?, u
DB10.DBX193.3' ?; G7 h4 i0 g  I5 L& r
$A_IN[37]
: h, _+ Z2 _- G% F3 ODB10.DBX129.4
4 L% \4 D- b, ~- ~/ ^; `9 c, M) z$A_OUT[37]: ^7 O* \) f/ r+ w2 q$ x
DB10.DBX193.4" ~  K' h, H" y4 K
$A_IN[38]
. W* A1 |5 o$ k# Z) o: WDB10.DBX129.5/ H4 d, ]8 a! @4 Z" j  a
$A_OUT[38]
0 _1 N) J5 G. x# Y' _DB10.DBX193.53 ^5 e3 i# t0 P5 H) @
$A_IN[39]& e) Y' m, E& M. l/ G- _
DB10.DBX129.6
9 |6 w! c/ u1 _$A_OUT[39]7 G" n" z' E* x
DB10.DBX193.6
, z0 g  k2 p& l- J2 C$A_IN[40]5 W: A; i; C1 D
DB10.DBX129.7
0 y. L7 k% z, j$A_OUT[40]
# b) a: ?1 x% y7 M9 y; I! H7 f' o2 nDB10.DBX193.7( q9 s& O0 ^' l% e2 {
对照此表,找到对应的PLC中的点,这样,能够读懂PLC程序便可以知道这些变量的具体含义,对于NC程序,也可以有更深刻的理解。
鲜花(22) 鸡蛋(0)
发表于 2009-2-8 10:43 | 显示全部楼层
天书,不懂. PLC我会,CNC白痴.我是搞高压的.
鲜花(1) 鸡蛋(0)
发表于 2009-2-8 10:48 | 显示全部楼层
顶,看过lz的另一贴,好帖,cnc系统听说过,但没这方面经验看不太懂.SIEMENS 840D等是不是机床的数控系统.?另外一个问题,NC程序看起来不象plc程序,它存储在哪? 和PLC是怎样连接的? 谢谢,期待继续.....
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-8 17:28 | 显示全部楼层
老杨团队,追求完美;客户至上,服务到位!
原帖由 shenyang-china 于 2009-2-8 10:48 发表 ' c$ x, Z6 g  y# z7 X. ?- K# ]2 V$ a
顶,看过lz的另一贴,好帖,cnc系统听说过,但没这方面经验看不太懂.SIEMENS 840D等是不是机床的数控系统.?另外一个问题,NC程序看起来不象plc程序,它存储在哪? 和PLC是怎样连接的? 谢谢,期待继续.....
& E2 h$ g) _) J9 ^+ z
cnc的概念我就不多讲了,大家可以在网上看,simes840d是现在较为流行的一种数控系统,很多加工厂在用,包括GM在内.如果你想维修cnc前提是你必须要会plc,现在的plc功能比较强大,形式多样化,日系和德系有很大区别.simens840d系统集成了s7-300PLC,cnc里的plc主要用于和外围的输入输出部件联系,例如传感器.电磁阀等,有时也用于定位系统,也就是不进行插补运算的轴的运动,例如刀库轴.840d的加工程序有时要访问plc,具体在前面已经说了,还有就是要学习一下profibus bus system .
鲜花(1) 鸡蛋(0)
发表于 2009-2-8 20:52 | 显示全部楼层
Thank you. NC的程序是PLC的程序吗?
0 w6 x* T6 q( N: F' E另外,在这里如果做这种PLC,cnc的工作,英语无法交流的话,我想肯定是不行的.不知道工艺流程,怎么编程呢.我觉得专业和经验对lz来说不是问题,如果英语好一切就ok了.
. l2 E" x, K* M本人在国内做plc HMI的,来之前在BBA(宝马工厂)工作两年,之前的公司是AB东北区的核心分销商.但英语说不明白,真不敢找专业工作.如果你英语好,早点来吧,给我们公司修机床电工薪水相当的好..
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-8 21:52 | 显示全部楼层
原帖由 shenyang-china 于 2009-2-8 20:52 发表 # r, s( }. y0 b8 d1 M0 h
Thank you. NC的程序是PLC的程序吗?
3 e$ n/ A; N$ Z# [) s+ V9 ~另外,在这里如果做这种PLC,cnc的工作,英语无法交流的话,我想肯定是不行的.不知道工艺流程,怎么编程呢.我觉得专业和经验对lz来说不是问题,如果英语好一切就ok了.
4 g7 j! y+ t) N3 `) j本人在国内做pl ...
$ S7 G2 T& l% [
nc程序是一种根据加工工艺所编写的程序,是根据系统本身提供的编程指令来编写,所以不同的系统是有差别的,而plc是根据机床外围的需要来编写(在cnc 中plc是由机床厂家编写好的,一般不允许改动)例如M3s2000这句加工程序,m3是主轴正转,s2000指的是转速,m3会被plc译码(fanuc system) simens则不需要,它有固定的地址(DBDnn.DBXnn),数控维修必须要有专业阅读能力(看专业资料)口语好用处不大(本人看法)
鲜花(1) 鸡蛋(0)
发表于 2009-2-8 22:27 | 显示全部楼层
同言同羽 置业良晨
thank you. 也许我有点理解了.plc 所做的是机床的所具控制的功能,也许轴的控制和定位的控制,各种电气的控制,nc则是用户自己编写的加工零件的程序,先做外径在做内径之类的吧.nc是在控制面板之类人机界面做的吧,并且下载的位置也是这种人机界面吧. 
* s% P2 y/ J1 ~& u  k/ `I guess, thank you.
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-9 02:13 | 显示全部楼层
老杨团队,追求完美;客户至上,服务到位!
当各轴需要进行插补运算的时候 那么这时候是nc控制的(如加工),当各轴只是去定位(如换刀)这时候会自动切换到plc控制.加工程序和plc都可以在hmi做,但是很多时候plc的修改是需要权限的 如simens840d  加工程序编好后存放在mmc,用的时候被nc调用,加工程序不需要维修电工,而是有工艺方面的人员编写,但电工最好也要知道点,这样有利于维修.
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-10 06:48 | 显示全部楼层
数 控 系 统 原 理
! s; h) H* f4 N% m6 L/ ]8 Y" YCnc        
. P3 s! E+ c0 @+ r' J: }8 k5 v7 ^, l
数控技术是指用数字、文字和符号组成的数字指令来实现一台或多台机械设备动作控制的技术。它所控制的通常是位置、角度、速度等机械量和与机械能量流向有关的开关量。数控的产生依赖于数据载体和二进制形式数据运算的出现。1908年,穿孔的金属薄片互换式数据载体问世;19世纪末,以纸为数据载体并具有辅助功能的控制系统被发明;1938年,香农在美国麻省理工学院进行了数据快速运算和传输,奠定了现代计算机,包括计算机数字控制系统的基础。数控技术是与机床控制密切结合发展起来的。1952年,第一台数控机床问世,成为世界机械工业史上一件划时代的事件,推动了自动化的发展。, i& p* [5 v) e% g! ^
现在,数控技术也叫计算机数控技术,目前它是采用计算机实现数字程序控制的技术。这种技术用计算机按事先存贮的控制程序来执行对设备的控制功能。由于采用计算机替代原先用硬件逻辑电路组成的数控装置,使输入数据的存贮、处理、运算、逻辑判断等各种控制机能的实现,均可通过计算机软件来完成。( a% o) a7 O2 m: V3 Q# \' _
数控系统(cnc)是一个概念,主要指的是用数字量控制的运动系统,主要是相对于其前的模拟量的控制系统,数控系统的好处在于数字量的处理标准化,远程控制,可通讯,精确度高,可控性好。
  t' k5 I5 V, ?1 v6 i" S如果把数控机床比作为一个人的话,那么数控机床的大脑就他的数控系统NC,床身是他的身体,运动的各个轴和伺服电机就是他的胳膊和腿,正如人的腿和手一样,人的手和腿上有神经,所以人知道自己的位置,而机床的神经就是位置开关、接近开关、编码器、光栅尺等。
$ \- t" o$ S8 j8 n7 m+ Z0 y2 E以siemens的840D为例,主要有以下几个部分:上位电脑、下位NC。上位电脑的作用是建立一个人和下位nc通讯的平台,在机床正常工作的时候,只有下位nc在工作,上位电脑关掉都无所谓,只有当你想查看下位nc的内容和做修改时才有用,上位电脑就是一部改装的pc,安装了修改过的winxp系统,siemens在里面安装了很多的通讯芯片,所以这部电脑支持其它的通讯协议,比如:mpi\profibus等。( r  h& F) a5 d1 Q7 v2 ?3 y' r
下位nc安装在一个大盒子里,在这个大盒子里,还有其它部分:电源模块、驱动板、控制板,集成的plc也在这面,电源模块负责供电,为母线提供600v的直流电压,送给驱动板,这也是伺服电机的主要能源,nc主要负责计算,比如差补运算等,nc上开放了mpi接口和profibus等接口,可以直接接pg,进行编程或是通讯。
0 g5 z/ p7 H$ W- F控制板接受nc计算出来的数据,再经过本身的算法运算,比如pid运算,然后将数据传给驱动板,控制板上留有编码器的接口和光栅尺的接口,用于接收伺服电机的编码器的反馈信号和光栅尺的位置信号,构成闭环控制系统,这只是比较大的环,在控制板的内部还有电流控制环等闭环,驱动板的作用主要是变频、直流变交流的逆变等,驱动板的大小决定于带的电机的容量,所以大小不等,驱动板的下端接三相电机。
! o* g( |5 B1 X# D数控系统的软件控制:所有的数控系统都需要有一个操作系统,fanuc的系统是自己研发的独立的系统,还有的是使用嵌入式linux,840d使用的是微软公司的kernel更换后的winxp,经过更改后的核心更适用于工业控制。4 W: Q- ?" p# l; k
公司进口的excello机床所用的人机界面是siemens的hmi,在这个界面上,可以显示机床的各种参数和数据,包括当前的轴的坐标,各个传感器的状态,压力的数据,同时可以通过此界面对机床进行设置,可以说这就是机床面向人的一个窗口。* ?: V+ \3 z0 l
伺服驱动系统(Servo System)简称伺服系统,是一种以机械位置或角度作为控制对象的自动控制系统,例如数控机床等。使用在伺服系统中的驱动电机要求具有响应速度快、定位准确、转动惯量较大等特点,这类专用的电机称为伺服电机。当然,其基本工作原理和普通的交直流电机没有什么不同。该类电机的专用驱动单元称为伺服驱动单元,有时简称为伺服,一般其内部包括电流、速度和/或位置闭环。( t6 c$ g. a( R2 J/ R: Q2 t( p
数控系统的编程,在确定了工艺方案后,就需要根据零件的几何尺寸、加工路线等,计算刀具中心运动轨迹,以获得刀位数据。数控系统一般均具有直线插补与圆弧插补功能,对于加工由圆弧和直线组成的较简单的平面零件,只需要计算出零件轮廓上相邻几何元素交点或切点的坐标值,得出各几何元素的起点、终点、圆弧的圆心坐标值等,就能满足编程要求。当零件的几何形状与控制系统的插补功能不一致时,就需要进行较复杂的数值计算,一般需要使用计算机辅助计算,否则难以完成。
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-10 07:05 | 显示全部楼层
原帖由 shenyang-china 于 2009-2-8 20:52 发表 ! I5 D& J6 ~9 ~. W1 w
Thank you. NC的程序是PLC的程序吗?0 F# c2 D5 Z: z# O
另外,在这里如果做这种PLC,cnc的工作,英语无法交流的话,我想肯定是不行的.不知道工艺流程,怎么编程呢.我觉得专业和经验对lz来说不是问题,如果英语好一切就ok了.
# ^" R/ I0 u7 M9 P5 ]本人在国内做pl ...

. Y. n, {4 v% {8 k3 T如果有需要请加QQ:1013264819
鲜花(1) 鸡蛋(0)
发表于 2009-2-10 11:01 | 显示全部楼层
同言同羽 置业良晨
Thank you. 我没有QQ,我的MSN ywbsuper@hotmail.com.来Edmonton一年多了,在siemens培训过driver 产品,440,master driver 等,应用过siemens AB的plc做过项目,多交流.6 S9 x; V) `) V0 l0 w* j, O' R
如果你能用英语写出这些东西,那哥们早点来吧,这里别的我没觉的什么好,空气绝对的新鲜,在国内我一周洗一次车,这里,下天我根本就不用洗车,就冬天洗了三次.* ]+ g! R2 K8 f# z- S/ G
做这种编成,和维修技术的工作,不说话或少说话是不可能的(在国内我是经常和操作人员交流,了解工艺和客户需求),不过真可以考虑先做电工,从简单的技术做起,在提高语言方面,也是个途径.好了,有事发邮件.
( z+ A7 ~8 s9 Y$ r/ n+ h0 z) E"N460 WHENEVER $A_IN[34]==FALSE DO $AC_OVR=0",这不是个plc语句吧,cnc系统中,除了plc,还有其它存储控制程序的地方吗?
理袁律师事务所
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-11 03:25 | 显示全部楼层
原帖由 shenyang-china 于 2009-2-10 11:01 发表 ) \4 i/ f) B  I/ @3 w: T
Thank you. 我没有QQ,我的MSN ywbsuper@hotmail.com.来Edmonton一年多了,在siemens培训过driver 产品,440,master driver 等,应用过siemens AB的plc做过项目,多交流.8 X! s$ M- s2 {: X% a' C
如果你能用英语写出这些东西,那哥们早点来吧,这里 ...

1 J0 G$ j$ r5 |9 K$ p# K% ~是加工程序,cnc有很多参数分别存放在rom(os plc图形等) ram(plc参数T C K D的值,nc参数.加工参数等)ram 需要用电池后备.我已经给发邮件了
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-12 03:22 | 显示全部楼层

西门子间接寻址

  3 p; V7 ^- ^5 ^4 N6 C) F& A
 完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
) A6 q6 D- h, G% n% C( L  我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。由此我们可以得到,要描述一个地址,至少应该包含两个要素:5 ]1 i( s/ E1 S0 B" V
  1、存储的区域
+ b* n- [# O7 B  2、这个区域中具体的位置
9 M/ P! B% V3 @9 r( E2 }1 K6 j  比如:A Q2.0* G: i. e+ c" O5 v( b
  其中的A是指令符,Q2.0是A的操作数,也就是地址。这个地址由两部分组成:
3 ]2 a# `. F" T2 v  \6 u3 i  Q:指的是映像输出区) I$ }0 w6 |/ z7 n9 C
  2.0:就是这个映像输出区第二个字节的第0位。* @1 D4 e* w  [7 v# ?
  由此,我们得出, 一个确切的地址组成应该是:/ @3 m% a5 e) |2 c. C; O
  〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX200.0。8 u. y- T) k- n# g
   DB X 200 . 0. F+ \/ O0 p& [. n
  其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。这样,一个确切的地址组成,又可以写成:
* G+ H9 y# X+ `, d  地址标识符 + 确切的数值单元 5 B& K3 D# @) b5 G
  【间接寻址的概念】
5 p) }9 X+ W7 _! F; M0 n+ i% R2 j  寻址,就是指定指令要进行操作的地址。给定指令操作的地址方法,就是寻址方法。+ C4 j; u0 ~1 D  h' c
  在谈间接寻址之前,我们简单的了解一下直接寻址。所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。/ y3 ]5 ^3 [" S" e. y  H
  这样看来,间接寻址就是间接的给出指令的确切操作数。对,就是这个概念。
# X: a0 Q& y, R; g2 ^  Q& \. @  比如:A Q[MD100] ,A T[DBW100]。程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。间接由此得名。
+ t" A8 V& s( M7 |* N! x7 t. O  西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
1 J( H# r) ^# [1 x2 s: V  【存储器间接寻址】, F- V* _( u: z
  存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
2 u5 M5 A6 V% d: c4 c7 r  存储器间接寻址具有两个指针格式:单字和双字。6 f8 O4 h" ?0 F/ {: @4 P1 }* o& j8 W
  单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。
: Q; e6 r7 }1 J. U) K' `  双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。
. l8 {% |7 \( u! S. s- p  指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。5 d: I: m2 L4 j! K9 `' Q$ x0 R% o
  单字指针和双字指针在使用上有很大区别。下面举例说明:
5 q* m! N' G: m0 c, \  L DW#16#35 //将32位16进制数35存入ACC11 i# M' Q' A8 D# ?
  T MD2 //这个值再存入MD2,这是个32位的位存储区域
+ _" {( [$ C$ b. u0 |6 a7 r0 T* e  L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2
" S; V0 m6 \" S7 s" d) S! [  T MW100 //这个值再存入MW100,这是个16位的位存储区域
0 c1 B/ N; R! i0 Y  W! r% \  OPN DBW[MW100] //打开DBW10。这里的[MW100]就是个单字指针,存放指针的区域是M区,
( f# F1 j/ D- i3 x/ J# }) d- M( W   MW100中的值10,就是指针间接指定的地址,它是个16位的值!' A1 F, \9 ?3 H" H/ A! Y1 D2 j
  --------
' r! b) {. T8 N# s( N  L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10( a- q2 |4 V# m1 q; f
  T MD104 //这个值再存入MD104,这是个32位的位存储区域4 R* K$ H. Z$ Z
  A I[MD104] //对I1.2进行与逻辑操作!
% C/ I1 `2 h9 \& V# w2 q- p  =DIX[MD2] //赋值背景数据位DIX6.5!
9 G' \- [% F: E3 g& i$ o  --------
* i4 U. a* r& s+ ]) c, o& Q( |1 ?  A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态% H- j' f* V9 x  k: \: T8 q1 c" h, ~
  =Q[MD2] //赋值给Q6.5
4 c4 }3 y! B, Z4 D! C: m# S: y$ S  --------; v2 d' c& O0 |
  A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态
' r1 X# H; n- F  =Q[MW100] //错误!!没有Q10这个元件7 A! |8 `' @( H: p9 i. X
  ---------------------------------------------------------------------------------------------------
  c. Z/ b% @! p: e7 }* L4 u' Q  从上面系列举例我们至少看出来一点:
! B3 Q. m6 L& N; X5 l- c  单字指针只应用在地址标识符是非位的情况下。的确,单字指针前面描述过,它确定的数值是0-65535,而对于byte.bit这种具体位结构来说,只能用双字指针。这是它们的第一个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。
9 g: A+ C  z: b% q  相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、WORD、DWORD寻址,并且没有区域的限制。不过,有得必有失,在对非位的区域进行寻址时,必须确保其0-2bit为全0!
- w' |* G' x' z$ |0 A1 y7 B6 `  总结一下:( q6 a2 S3 W9 ?: y( j! k- X
  单字指针的存储器间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对地址标识符没有限制。也正是由于双字指针是一个具有位的指针,因此,当对字节、字或者双字存储区地址进行寻址时,必须确保双字指针的内容是8或者8的倍数。
! O; G7 p& l* g& G7 B0 K9 \. V& d  现在,我们来分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。
7 c* J6 t- L& ?! V) X/ ?1 j  通过L L#+10 ,我们知道存放在MD104中的值应该是:
# q% x, {( e' d, `  MD104:0000 0000 0000 0000 0000 0000 0000 10102 A! \. R2 D: W# |" M
  当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,因此:
! g4 F6 @0 [/ \4 K  0000 0000 0000 0000 0000 0000 0000 1010 = 1.2! e+ s& }# o* y+ K
  详解西门子间接寻址<2>
1 q2 e- C! a; ?6 n, g+ a  【地址寄存器间接寻址】
! g$ x/ |$ M$ h5 K9 @) T  `6 X  在先前所说的存储器间接寻址中,间接指针用M、DB、DI和L直接指定,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。从寄存器到得出真正的地址数值单元,西门子提供了两种途径:! G0 V, j  Y( q/ U
  1、区域内寄存器间接寻址
2 T2 z7 r. V# L' ~  2、区域间寄存器间接寻址# F3 X- t+ c/ V0 D. C
  地址寄存器间接寻址的一般格式是:
% w* x9 |* ?" n3 G) j  〖地址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或 M[AR1,P#0.0] 。
! Q. `: }* e. |. \3 r0 ^) I! s  〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖地址标识符〗在上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。但在这里,情况有所变化。比较一下刚才的例子:
5 E* l' H% c/ ?  DIX [AR1,P#1.5]
" z$ c2 w  q" R7 J& f- q/ T# E+ @" h: D& y  X [AR1,P#1.5] ! V- W+ v* x+ i4 @0 k2 q- y$ v
  DIX可以认为是我们通常定义的地址标识符,DI是背景数据块存储区域,X是这个存储区域的尺寸符,指的是背景数据块中的位。但下面一个示例中的M呢?X只是指定了存储区域的尺寸符,那么存储区域符在哪里呢?毫无疑问,在AR1中!8 Y5 o  c* P- G' p+ n- Y+ n9 R
  DIX [AR1,P#1.5] 这个例子,要寻址的地址区域事先已经确定,AR1可以改变的只是这个区域内的确切地址数值单元,所以我们称之为:区域内寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域内寻址指针。
& A$ c& u; h" z1 w+ y' f0 u  X [AR1,P#1.5] 这个例子,要寻址的地址区域和确切的地址数值单元,都未事先确定,只是确定了存储大小,这就是意味着我们可以在不同的区域间的不同地址数值单元以给定的区域大小进行寻址,所以称之为:区域间寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域间寻址指针。
' |( {3 l' g% ^6 r  既然有着区域内和区域间寻址之分,那么,同样的AR1中,就存有不同的内容,它们代表着不同的含义。7 T+ B- r9 m8 N7 F; w; S
  【AR的格式】
1 i& K1 y. h: u9 p7 n* F2 S  地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
0 U- d- O" c2 K" c/ ]5 C  当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
) z2 R9 j) z- I  ]7 o, c  其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
' P9 p* B& K6 V/ ]* x% X  AR:5 y& S9 k& ~9 U# X' a  y3 K
  0000 0000 0000 0BBB BBBB BBBB BBBB BXXX. G$ r1 q1 |/ q2 M& g6 c
  这样规定,就意味着AR的取值只能是:0.0 ——65535.76 A1 ^* p7 o; X/ Y1 Q* a2 L5 |
  例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。# K; N7 n+ {2 U" R
  而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中指定,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。9 C& _7 u2 W9 m7 R
  AR:" w: Z8 {( l) \( d* j$ s* @
  1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX5 [8 P% o  F  h9 f
  比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。聪明的你,肯定可以联想到,这是用于指定存储区域的。对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:
% U% h: d+ q1 G, L  区域标识符 8 i+ V+ v& U7 O' \% M, H
  26、25、24位 6 Y! O+ a) Y4 H
  P(外部输入输出) # w  z4 t0 z; f) f2 E, I4 v
  000 , T  ^% N1 Y+ }* T* F
  I(输入映像区)
4 [& U% E9 O/ o* @0 s$ j3 R% X+ |  001 4 X# z. ^- I9 S' w+ Q! L$ G- x
  Q(输出映像区)
, t% L+ M' F% {4 }) [+ b. q  010 5 h( }- Z- ?) R; L! E8 \
  M(位存储区)
5 J! @. P6 Z! P' X1 J  011
) ]0 b$ f" b- I' O! J$ l$ H* m  DB(数据块)
9 X: u3 _7 l/ E, K" ]( W  100 " I% q! Z* _. j( o
  DI(背景数据块) # |# J7 _% U) K8 L
  101 1 C  z" i- k8 a% l6 `# L
  L(暂存数据区,也叫局域数据) 1 V: K/ N; I/ ^! S  Q- i
  111 " s0 b$ B$ _8 n
  如果我们把这样的AR内容,用HEX表示的话,那么就有:
/ K1 U. T3 t1 P5 z  当是对P区域寻址时,AR=800xxxxx% E  B" C, O  z5 S- l% ?, i% Z3 H
  当是对I区域寻址时,AR=810xxxxx: n$ B- `# P+ ^; _) f% _, M' f
  当是对Q区域寻址时,AR=820xxxxx
  ^5 b/ n4 J& R. p2 ~  当是对M区域寻址时,AR=830xxxxx
4 O) F; H& Q5 ~2 J) B+ I  当是对DB区域寻址时,AR=840xxxxx7 j1 Z. K& l5 n0 j, \! M
  当是对DI区域寻址时,AR=850xxxxx5 w+ B. ^0 v" F2 J6 K
  当是对L区域寻址时,AR=870xxxxx
" K, i' J7 a/ M/ W/ X- E' f  经过列举,我们有了初步的结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。84000000-840FFFFF指明了要寻址的范围是:1 C  D- W& _: r! N! U9 {0 l
  DB区的0.0——65535.7。! s# F" g( U& k& \6 m8 m
  例如:当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。$ K& H8 Q! H; W# W
  我们看到,在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit又是什么呢?( S9 I  m8 }: F" x: S
  【P#指针】
+ e% g' P% ?- U" j2 k, ~! u$ G  P#中的P是Pointer,是个32位的直接指针。所谓的直接,是指P#中的#后面所跟的数值或者存储单元,是P直接给定的。这样P#XXX这种指针,就可以被用来在指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。例如:1 t9 [- Q! }. m6 N2 b+ I0 l, q
  ● L P#Q1.0 //把Q1.0这个指针存入ACC1,此时ACC1的内容=82000008(hex)=Q1.0
' E! U' n% Z% s! H  ★ L P#1.0 //把1.0这个指针存入ACC1,此时ACC1的内容=00000008(hex)=1.0. [4 v9 s, \4 L. K& J1 _4 V1 P
  ● L P#MB100 //错误!必须按照byte.bit结构给定指针。
; V: o$ `0 m" Q; a8 x1 Q' R, Z  ● L P#M100.0 //把M100.0这个指针存入ACC1,此时ACC1的内容=83000320(hex)=M100.0
! Z5 e4 B  ]: ?2 m  ● L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复指定。
' N2 j, K, D4 y3 [/ o& t$ o  ● L P#DBX26.4 //把DBX26.4这个指针存入ACC1,此时ACC1的内容=840000D4(hex)=DBX26.4
3 Y) L" f3 y' |0 F( V# j; l2 E  我们发现,当对P#只是指定数值时,累加器中的值和区域内寻址指针规定的格式相同(也和存储器间接寻址双字指针格式相同);而当对P#指定带有存储区域时,累加器中的内容和区域间寻址指针内容完全相同。事实上,把什么样的值传给AR,就决定了是以什么样的方式来进行寄存器间接寻址。在实际应用中,我们正是利用P#的这种特点,根据不同的需要,指定P#指针,然后,再传递给AR,以确定最终的寻址方式。
0 T* G  [! A" \+ p  在寄存器寻址中,P#XXX作为寄存器AR指针的偏移量,用来和AR指针进行相加运算,运算的结果,才是指令真正要操作的确切地址数值单元!( `4 |- G% ^9 y. h1 J1 L
  无论是区域内还是区域间寻址,地址所在的存储区域都有了指定,因此,这里的P#XXX只能指定纯粹的数值,如上面例子中的★。
  ~' L2 _7 b$ P8 [% T# R  【指针偏移运算法则】+ A' c  y: C: O5 o" a& s5 {
  在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit如何参与运算,得出最终的地址呢?
* Z8 O& h8 k, ?+ a1 {  c  运算的法则是:AR1和P#中的数值,按照BYTE位和BIT位分类相加。BIT位相加按八进制规则运算,而BYTE位相加,则按照十进制规则运算。
6 U9 }3 s# n0 p  例如:寄存器寻址指针是:[AR1,P#2.6],我们分AR1=26.4和DBX26.4两种情况来分析。% O$ u; T. ~4 t" K% J0 g0 Y
  当AR1等于26.4,/ c* A5 ]( L" g4 Z$ ]+ P' i
   AR1:26.2
& \0 u5 Y" i! c& X) @1 w6 E+ L% j8 Z   + P#: 2.68 A! A9 o$ E! P5 _3 U
   ---------------------------
9 R  l* f5 @3 o; `. t2 r# t2 ^   = 29.7 这是区域内寄存器间接寻址的最终确切地址数值单元( K! m" T  I6 t0 Q( j7 n0 |
  当AR1等于DBX26.4,
( x. ]5 h& `# A- v+ n   AR1:DBX26.2
) c# ~, \. B( x; d6 [5 K7 s6 K   + P#: 2.6
( f$ P# S2 J& l+ Z2 v" f. s   ---------------------------4 g1 A) v4 e& m: y" e5 n- j# d8 d
   = DBX29.7 这是区域间寄存器间接寻址的最终确切地址数值单元. f- I5 A" S& r
  【AR的地址数据赋值】+ Q3 R4 l( t% ?: A0 F9 ]+ R. V
  通过前面的介绍,我们知道,要正确运用寄存器寻址,最重要的是对寄存器AR的赋值。同样,区分是区域内还是区域间寻址,也是看AR中的赋值。
7 m+ S4 t! r, U  对AR的赋值通常有下面的几个方法:! J2 z! n( W' ~" Z7 [4 B
  1、直接赋值法0 |$ b. o: H7 \) f
  例如:; [& n2 M4 Q0 _, K  n4 R
  L DW#16#83000320
. b2 C; h% C2 N8 {  u  LAR1$ M) Z- ], l7 M' B" n& M. ?! p
  可以用16进制、整数或者二进制直接给值,但必须确保是32位数据。经过赋值的AR1中既存储了地址数值,也指定了存储区域,因此这时的寄存器寻址方式肯定是区域间寻址。* q+ b# n# L7 y' L5 ?; F
  2、间接赋值法2 g$ A+ `6 @8 W; T0 ~- F
  例如:. L8 L" V2 u3 X! I4 N% y9 ^2 T# a
  L [MD100]
, B* T+ ~  p6 \, w8 y+ S7 A  LAR1# ?# G; K7 W5 N+ s
  可以用存储器间接寻址指针给定AR1内容。具体内容存储在MD100中。
: M5 Z* |9 c9 D4 ?  3、指针赋值法
. v8 r* ?3 y7 x" f' [5 n( |% V  例如:$ a7 k4 u/ e- o# _4 ^
  LAR1 P#26.2# z: J( A0 D/ d) Z' I% Q
  使用P#这个32位“常数”指针赋值AR。$ N4 Q* C5 N  n$ U5 b3 s
  总之,无论使用哪种赋值方式,由于AR存储的数据格式有明确的规定,因此,都要在赋值前,确认所赋的值是否符合寻址规范。' Z* l6 O0 Z2 p" {) g$ Q5 b; H5 B$ R
  详解西门子间接寻址<3>
) Q! @0 W' q: J/ O9 t; U9 s# a  使用间接寻址的主要目的,是使指令的执行结果有动态的变化,简化程序是第一目的,在某些情况下,这样的寻址方式是必须的,比如对某存储区域数据遍历。此外,间接寻址,还可以使程序更具柔性,换句话说,可以标准化。0 f: ]3 c5 |! C3 y3 q
  下面通过实例应用来分析如何灵活运用这些寻址方式,在实例分析过程中,将对前面帖子中的笔误、错误和遗漏做纠正和补充。
# Y9 q  {, z: @1 w7 j  【存储器间接寻址应用实例】
$ V2 I8 f! L% t  我们先看一段示例程序:
) Q! Q6 q! {; F  V* h  L 100 1 S. W, H6 ^; R& n  x3 Q& }
  T MW 100 // 将16位整数100传入MW100& ?  |8 Y, a' b3 ^' K
  L DW#16#8 // 加载双字16进制数8,当把它用作双字指针时,按照BYTE.BIT结构,
  c" M" z1 Q. h   结果演变过程就是:8H=1000B=1.0- a. ?/ x' A' y. ]5 t; u( r. i& x6 w
  T MD 2 // MD2=8H- q1 ~- }! z" y. V
  OPN DB [MW 100] // OPN DB100& W. F  \( P$ @: F- s8 O2 K7 @$ _9 |
  L DBW [MD 2] // L DB100.DBW18 q$ Y6 t8 [. m5 f- ]
  T MW[MD2] // T MW1 3 Q7 I" Y% K- P4 z& D/ ^5 l$ J5 L
  A DBX [MD 2] // A DBX1.0+ A0 p9 }# G2 Y" L
  = M [MD 2] // =M1.0
5 y3 }$ L  j6 S. F) O  在这个例子中,我们中心思想其实就是:将DB100.DBW1中的内容传送到MW1中。这里我们使用了存储器间接寻址的两个指针——单字指针MW100用于指定DB块的编号,双字指针MD2用于指定DBW和MW存储区字地址。
0 D# r" g5 o, J0 C4 c  -------------------------------------------------------------------------------------------------------------------------------------------------9 ^+ a. M2 D: x
  对于坛友提出的 DB[MW100].DBW[MD2] 这样的寻址是错误的提法,这里做个解释:
" d" P9 J" u# ?2 d- B  DB[MW100].DBW[MD2] 这样的寻址结构就寻址原理来说,是可以理解的,但从SIEMENS程序执行机理来看,是非法的。在实际程序中,对于这样的寻址,程序语句应该写成:
  a$ Q  o% X( Q$ W  w9 I+ V' R9 E  OPN DBW[WM100], L DBW[MD2]-------------------------------------------------------------------------------------------------------------------------------------------------/ H0 V: K3 h( T; a
  事实上,从这个例子的中心思想来看,根本没有必要如此复杂。但为什么要用间接寻址呢?
& B" g/ z, u* r# W$ f  要澄清使用间接寻址的优势,就让我们从比较中,找答案吧。2 h8 @9 y, I; z0 `. O5 O4 @7 `% {
  例子告诉我们,它最终执行的是把DB的某个具体字的数据传送到位存储区某个具体字中。这是针对数据块100的1数据字传送到位存储区第1字中的具体操作。如果我们现在需要对同样的数据块的多个字(连续或者不连续)进行传送呢?直接的方法,就是一句一句的写这样的具体操作。有多少个字的传送,就写多少这样的语句。毫无疑问,即使不知道间接寻址的道理,也应该明白,这样的编程方法是不合理的。而如果使用间接寻址的方法,语句就简单多了。- O. b3 M/ ~, u) N3 ]4 E/ u- w4 m
  【示例程序的结构分析】; y7 S2 ^0 [: O. P4 f' ]# S0 }3 W& G
  我将示例程序从结构上做个区分,重新输入如下:, d5 ]4 `& j  @8 y- @" \
  =========================== 输入1:指定数据块编号的变量
3 ]( [' f5 X# M" [; s9 W6 f  || L 100 - x9 J! w  _0 X& T* K, ?
  || T MW 100
: H, T7 i- K1 P0 t: @  ===========================输入2:指定字地址的变量
0 v$ F9 S  P2 ^+ l- t( R5 [! r  || L DW#16#8 6 a" ]$ J* d1 |! l8 i( i; r6 \
  || T MD 2 ) m' I$ Y% U( b* ]$ r- u- @
  ===========================操作主体程序
  `" p" {* x7 \2 q, ?. p# w( x   OPN DB [MW 100]
2 x1 l3 l+ a% l9 Y# o  c   L DBW [MD 2]
* `" g3 M/ W# |/ J& q   T MW[MD2]
& d2 `) Z  O8 ?( O( w1 _$ g  显然,我们根本不需要对主体程序(红色部分)进行简单而重复的复写,而只需改变MW100和MD2的赋值(绿色部分),就可以完成应用要求。
% w: q4 Y8 q5 r  结论:通过对间接寻址指针内容的修改,就完成了主体程序执行的结果变更,这种修改是可以是动态的和静态的。- B$ l4 G2 i: A: h: d  t2 F
  正是由于对真正的目标程序(主体程序)不做任何变动,而寻址指针是这个程序中唯一要修改的地方,可以认为,寻址指针是主体程序的入口参数,就好比功能块的输入参数。因而可使得程序标准化,具有移植性、通用性。
' [1 {0 m+ x4 C  b8 ~* {  那么又如何动态改写指针的赋值呢?不会是另一种简单而重复的复写吧。
$ o% j0 |6 v# a5 q  让我们以一个具体应用,来完善这段示例程序吧:% }. w4 x# E# ?* v6 m, o
  将DB100中的1-11数据字,传送到MW1-11中% M, W8 x2 _7 ]  T
  在设计完成这个任务的程序之前,我们先了解一些背景知识。
  y" v( d4 b+ c* i  【数据对象尺寸的划分规则】0 q& ~1 t" l8 m: y
  数据对象的尺寸分为:位(BOOL)、字节(BYTE)、字(WORD)、双字(DWORD)。这似乎是个简单的概念,但如果,MW10=MB10+MB11,那么是不是说,MW11=MB12+MB13?如果你的回答是肯定的,我建议你继续看下去,不要跳过,因为这里的疏忽,会导致最终的程序的错误。
6 J$ K: Z! j9 g; h( _* G# R  按位和字节来划分数据对象大小时,是以数据对象的bit来偏移。这句话就是说,0bit后就是1bit,1bit后肯定是2bit,以此类推直到7bit,完成一个字节大小的指定,再有一个bit的偏移,就进入下一个字节的0bit。' i. J2 }+ ^- h, p
  而按字和双字来划分数据对象大小时,是以数据对象的BYTE来偏移!这就是说,MW10=MB10+MB11,并不是说,MW11=MB12+MB13,正确的是MW11=MB11+MB12,然后才是MW12=MB12+MB13!
/ z, H- n* t. y! m* i/ Y  这个概念的重要性在于,如果你在程序中使用了MW10,那么,就不能对MW11进行任何的操作,因为,MB11是MW10和MW11的交集。
2 ]6 d+ n! m9 q3 p  t  也就是说,对于“将DB100中的1-11数据字,传送到MW1-11中”这个具体任务而言,我们只需要对DBW1、DBW3、DBW5、DBW7、DBW9、DBW11这6个字进行6次传送操作即可。这就是单独分出一节,说明数据对象尺寸划分规则这个看似简单的概念的目的所在。& K/ C! o$ J6 d' v
  【循环的结构】
2 D6 R0 l" f0 v" R  要“将DB100中的1-11数据字,传送到MW1-11中”,我们需要将指针内容按照顺序逐一指向相应的数据字,这种对指针内容的动态修改,其实就是遍历。对于遍历,最简单的莫过于循环。
2 X! o4 j, U( \! d. c7 A  一个循环包括以下几个要素:$ j: p- m( T1 {9 s5 J% X! A8 H
  1、初始循环指针8 [4 ^6 _3 J7 v- ]# p0 p
  2、循环指针自加减. N3 M- G) ^+ }
  2、继续或者退出循环体的条件判断
. ^) X$ B# t. _5 r9 s  被循环的程序主体必须位于初始循环指针之后,和循环指针自加减之前。
3 ]( \7 p0 ^# x2 K. Y0 A9 V  比如:
& C% _1 U' A8 ^8 w, j  初始循环指针:X=0
* C) _/ g! e  P8 I* J. i5 l# Y  循环开始点M& ]/ |/ }/ O8 ^5 f/ s, F
  被循环的程序主体:-------
; c6 q# _& A: n/ B7 B6 ~8 Z1 S  循环指针自加减:X+1=X
) k3 p9 Y+ V. r/ F# I' g$ C  循环条件判断:X≤10 ,False:GO TO M;True:GO TO N
/ `& D+ F1 g* j  循环退出点N
8 h! q  \% y5 p2 M  如果把X作为间接寻址指针的内容,对循环指针的操作,就等于对寻址指针内容的动态而循环的修改了。
0 U9 _0 d8 I" v+ R( s+ V6 Y  【将DB100中的1-11数据字,传送到MW1-11中】
: i/ @. s% H2 _/ t0 U   L L#1 //初始化循环指针。这里循环指针就是我们要修改的寻址指针7 f' m4 a$ [4 M  ]) s; p
   T MD 102 3 G9 g9 Z* D( K6 s" U8 i1 w
  M2: L MD 102
( y1 \( U7 N3 h7 c& O, B   T #COUNTER_D   R2 v" R9 O! M/ }' a% Z0 {* D1 ?
   OPN DB100
3 a" y4 F9 [2 S  W   L DBW [MD 102]
- {4 |7 q  V- B5 M   T MW [MD 102]& s, f; t. p% }" V- ]+ w1 Y
   L #COUNTER_D
' K8 r* U( [, i; B   L L#2 // +2,是因为数据字的偏移基准是字节。 9 d' _5 w* N6 r2 v3 D
   +D
% L+ I4 _6 c, A. {/ B" E   T MD 102 //自加减循环指针,这是动态修改了寻址指针的关键
0 [+ H9 }5 E" w/ v' y0 x   L L#11 //循环次数=n-1。n=6。这是因为,首次进入循环是无条件的,* i6 ^' @6 Z% v) H9 h
   但已事实上执行了一次操作。' `$ r6 ?- V* d/ i* Q
   <=D
% G# a  l; D( N   JC M2
, `2 A; @3 q, P: T( S$ d" Z   有关于T MD102 ,L L#11, <=D的详细分析,请按照前面的内容推导。
% b4 B8 I. a: p0 v  【将DB1-10中的1-11数据字,传送到MW1-11中】
0 p1 k. t4 T$ s* t( i2 b, o  这里增加了对DB数据块的寻址,使用单字指针MW100存储寻址地址,同样使用了循环,嵌套在数据字传送循环外,这样,要完成“将DB1-10中的1-11数据字,传送到MW1-11中”这个任务 ,共需要M1循环10次 × M2循环6次 =60次。/ g# H- F$ `% \% z0 Q
   L 1" G/ p! X$ e; n6 l$ e
   T MW 100
6 n3 \5 y  J- b+ |6 |   L L#1
) `/ O. c) |9 y4 d2 q7 Y* g   T MD 102
* ^: B' @& f8 y  M1: L MW 100' W, R0 [  ]$ r# ~" y0 @
   T #COUNTER_W/ C3 N4 @% _4 Q% ]+ A3 Y4 z" I
  M2: 对数据字循环传送程序,同上例) s; {/ T* ^2 k# ?! j! s
   L #COUNTER_W
, E) a+ C$ ~. C  j6 J& @; @; _  ?   L 1 //这里不是数据字的偏移,只是编号的简单递增,因此+17 s/ u/ P0 P7 x6 [
   +I
# o$ {0 {1 B0 R( w) P2 J( Q   T MW 1001 n0 H; `" c& T
   L 9 //循环次数=n-1,n=10
1 P9 k" v8 z# F, t9 z3 N0 I   <=I
1 P" {% z) H! @+ L   JC M1; ~' D5 d: ]7 |/ s5 P/ `: x
  通过示例分析,程序是让寻址指针在对要操作的数据对象范围内进行遍历来编程,完成这个任务。我们看到,这种对存储器间接寻址指针的遍历是基于字节和字的,如何对位进行遍历呢?
- F8 g* k/ H# m. R7 e  这就是下一个帖子要分析的寄存器间接寻址的实例的内容了。' @& p1 S: _  f9 W5 y; F2 d
  详解西门子间接寻址<4>
7 W' |, ~; h% y) D9 ~- m& I/ E( c  L [MD100]
2 K! h% L1 p: X8 A  LAR15 a. ?4 n2 x1 F  b, Q! X4 ]
  与
( a0 }3 O. {4 v) V  
+ \3 B. c, x1 R6 s! T; i  L MD100
( v% v2 ~( U# [, X; U$ `  LAR1
, Y/ u) _, D" N! A" P  有什么区别?
8 T, L: F( Y' z. y# z0 \  当将MD100以这种 [MD100] 形式表示时,你既要在对MD100赋值时考虑到所赋的值是否符合存储器间接寻址双字指针的规范,又要在使用这个寻址格式作为语句一部分时,是否符合语法的规范。) B. D$ t$ x6 m& P
  在你给出第一个例程的第一句:L [MD100]上,我们看出它犯了后一个错误。4 \* U- T5 W" P0 |( h
  存储器间接寻址指针,是作为指定的存储区域的确切数值单元来运用的。也就是说,指针不包含区域标识,它只是指明了一个数值。因此,要在 [MD100]前加上区域标识如: M、DB、I、Q、L等,还要加上存储区尺寸大小如:X、B、W、D等。在加存储区域和大小标识时,要考虑累加器加载指令L不能对位地址操作,因此,只能指定非位的地址。& t# j: X3 S" K8 [* {7 s  H( x3 s
  为了对比下面的寄存器寻址方式,我们这里,修改为:L MD[MD100]。并假定MD100=8Hex,同时我们也假定MD1=85000018Hex。# W' T9 J3 J3 I( n- f, r. k
  当把MD100这个双字作为一个双字指针运用时,其存储值的0-18bit将会按照双字指针的结构Byte.bit来重新“翻译”,“翻译”的结果才是指针指向的地址,因而MD100中的8Hex=1000B=1.0,所以下面的语句:
, J3 n( Y+ A# K) Q5 D  L MD[MD100]1 z3 w& N& W* n$ o  Y3 O5 D3 X- o
  LAR1
0 N& @- n3 h( d' G+ s- Z  经过“翻译”就是:
& t& C: L2 W$ p* D% Q& ~  B8 B  L MD1. ]/ u5 a" f, o
  LAR1
1 j! i, A+ Z* r+ ?, T. Q5 |  前面我们已经假定了MD1=85000018,同样道理,MD1作为指针使用时,对0-18bit应该经过Byte.bit结构的“翻译”,由于是传送给AR地址寄存器,还要对24-31bit进行区域寻址“翻译”。这样,我们得出LAR1中最终的值=DIX3.0。就是说,我们在地址寄存器AR1中存储了一个指针,它指向DIX3.0。
& e" e4 G8 G+ l7 z+ i+ f4 x) g  -----------------------------
8 G0 e# ^  y' Q: b% B! n. y  L MD100
! B0 `$ n+ f. l9 \7 _6 ]  LAR1
& Y: s& N: m; ^  z9 Z, _/ Q" l" @0 U  这段语句,是直接把MD100的值传送给AR,当然也要经过“翻译”,结果AR1=1.0。就是说,我们在地址寄存器AR1中存储了一个指针,它指向1.0,这是由MD100直接赋值的。% ^4 f, R8 t# Q( V# c! V
  似乎,两段语句,只是赋值给AR1的结果不同而已,其实不然。我们事先假定的值是考虑到对比的关系,特意指定的。如果MD100=CHex的呢?% g5 \5 k) M! L. [/ w; A- P7 u, y7 Q
  对于前一段,由于CHex=1100,其0-3bit为非0,程序将立即出错,无法执行。(因为没有MD1.4这种地址!!)
# e$ R  P' b. N: Q8 T4 m  后一段AR1的值经过翻译以后,等于1.4,程序能正常执行。
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-14 02:38 | 显示全部楼层

MPI 网络与全局数据通信

老杨团队,追求完美;客户至上,服务到位!
1.多点接口(MPI)协议的数据通信5 `3 j- Y6 @' W' L
MPI 是多点接口(Multi Point Interface)的简称,MPI 的物理层是& K  f2 p# T9 x; M# v& m" `" c
RS-485,通过MPI 能同时连接运行STEP 7 的编程器、计算机、人机
2 j9 y$ p0 n+ x3 U1 [界面(HMI)及其他SIMATIC S7。通过MPI 接口实现全局数据(GD)服务,周期性地相互进行数据交换。
. C0 \: j1 ^8 `* l2 MPI 网络5 E& J! c% T! F* D" w+ F+ v! M, z
周期性地相互交换少量的数据,最多15 个CPU。编程设备、人机接口和CPU 的默认地址分别为0,1,2。MPI 默认的传输速率为187.5 k bit/s 或1.5 M bit/s。相邻节点间的最大传送距离为50m,加中继器后为1000m,使用光纤和星形连接时为23.8 km。: Q2 c, p5 q6 ?  Q5 a: f8 o1 {5 I
3 全局数据包& l" v! N. {: d+ T) R+ {  J
参与全局数据包交换的CPU 构成了全局数据环(GD circle)。可2 k& E4 `& q! s, i
以建立多个GD 环。具有相同的发送者和接收者的全局数据集合成一个全局数据包。数据包中的变量有变量号。例如GD1.2.3 是1 号GD 环、2 号GD 包中的3 号数据。# q5 U2 m' L: g2 A9 d. T$ _
S7-300 CPU 可以建立4 个全局数据环,每个环中一个CPU 只能发送和接收一个数据包,每个数据包最多包含22 个数据字节。S7-400 CPU 可以建立的全局数据环个数与CPU 的型号有关(16~64 个),每个环中一个CPU 只能发送一个数据包和接收两个数据包,每个数据包最多包含54 个数据字节。& B0 x& L9 Z: F/ p& U
4  MPI 网络的组态' V8 y" y  {" v7 G7 @& `3 h: T: E
假设在SMATIC 管理器中生成3 个站,它们的CPU 分别是CPU413-1,CPU 313C 和CPU 312C。双击MPI 图标,打开NetPro 工 具,打开CPU 的属性设置对话框,设置MPI 站地址。将CPU 就被连接到MPI(1)子网上。保存CPU 的配置参数,用点对点的方式将它们分别下载到各CPU中。用PROFIBUS 电缆连接MPI 节点可以用管理器的“AccessibleNodes”功能来测试可以访问的节点。
8 `/ f! K: A3 ?* w/ h1 E5 Q5  全局数据表' M% I. Q1 e' i1 t4 Z. r1 v; K2 r
a.生成和填写GD 表
+ g" y4 J. v; T% y9 N; x在“NetPro”窗口中用右键点击MPI 网络线,在弹出的窗口中执( s8 s4 a- s& Q, H3 X
行执行菜单命令“Options →Define Global Data(定义全局数据)”同样的命令。在表的第一行输入3 个CPU 的名称。鼠标右键点击CPU 413-1 下面的单元(方格),在出现的菜单中选择“Sender”(发送者),输入要发送的全局数据的地址MW0。在每一行中只能有一个CPU 发送方。同一行中各个单元的字节数应相同。点击CPU 313C 下面的单元,输入QW0,该格的背景为白色,表示CPU 313C 是接收站。% m+ _7 d4 `' @
b 全局数据表0 J% y3 a) E9 O  J: V7 S9 c
MB20:4 表示MB20 开始的4 个字节。如果GD 包由若干个连续的
) b  I, i& |: b5 d0 I数据区组成,一个连续的数据区占用的空间为数据区内的字节数加上
: y2 ]$ n+ `6 }- \  x* P! R0 c# Q两个头部说明字节。一个单独的双字占6 个字节,一个单独的字占4& B8 L; a, G; P/ R9 R; l
个字节,一个单独的字节占3 个字节,一个单独的位也占3 个字节,
( b6 A9 ?) H$ n例如DB2.DBB0:10 和QW0:5 一共占用22 个字节。
6 k, ?6 Y+ Z( L5 u! @% ]发送方CPU 自动地周期性地将指定地址中的数据发送到接收方指定的地址区中。完成全局数据表的输入后,应执行菜单命令“GD2 Y3 i  S6 C# B) W/ T# x  y
Table→Compile…”,对它进行第一次编译。2 T$ r7 @6 i+ h( W& C
c.设置扫描速率和状态双字的地址
+ ~  E# O& f' `4 G6 f$ v执行菜单命令“View→Scan Rates”,每个数据包将增加标有“SR”
  p$ b. ~6 [: e6 k/ o- X的行,扫描速率单位是CPU 的循环扫描周期,S7-300 默认的扫描速
4 t0 L4 W9 I* k- g2 @5 @6 e率为8,S7-400 的为22,用户可以修改。S7-400 的扫描速率为0,表6 j0 [$ j. B7 v0 `8 s" ?
示是事件驱动的GD 发送和接收。) ?$ Z9 O$ _& W  a7 ~% @
d. 第一次编译后的全局数据表
. ]) Z( M1 Z% m9 d6 Z* AGD 数据传输的状态双字用来检查数据是否被正确地传送,执行9 U& U2 X( D; r# n2 Z; u' Z5 L
菜单命令“View→Status”,在出现的GDS 行中可以给每个数据包指/ q8 u# Q( [6 k% A8 K! y* g
定一个用于状态双字的地址。最上面一行的全局状态双字GST 是各- W# k2 Z; W# ~  m( Q
GDS 行中的状态双字相“与”的结果。设置好扫描速率和状态字的地址后,应对全局数据表进行第二次编译。将配置数据下载到CPU 中,以后可以自动交换数据。
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-14 03:04 | 显示全部楼层
原帖由 shenyang-china 于 2009-2-8 10:48 发表
4 n8 y0 s5 z* K1 V6 ~顶,看过lz的另一贴,好帖,cnc系统听说过,但没这方面经验看不太懂.SIEMENS 840D等是不是机床的数控系统.?另外一个问题,NC程序看起来不象plc程序,它存储在哪? 和PLC是怎样连接的? 谢谢,期待继续.....

' }- n4 }! F1 d3 W! m4 [3 O) e在的NC程序中会看到如下程序:% e9 l# C/ _5 d: c) i
N110 IF ($A_DBB[42] B_AND 1)==1 GOTOF LoadReq ;load request0 e) N) d  d2 U( v0 {; }
N120 IF ($A_DBB[42] B_AND 2)==2 GOTOF UnloadReq ;unload request
( O5 S4 H* |) b$ k$ }/ A1 Z$ _
+ I  @9 Z! }, L, l8 i1 dN9010 $A_DBB[42] = 0                    ;delete order
2 O  L% W# `: R" u在加工程序中经常看到$A_DBB[n],$A_DBW[n],$A_DBD[n]等变量。那么这些变量是怎么来的呢!  y, \4 ~8 ^/ ~& m
这些变量在NC程序中可以进行读写;同时也可由PLC读取这些变量的值、存放到PLC的地址中;也可由PLC写这些变量的值、NC程序来读取。与PLC的数据交换在PLC的程序里完成,具体的功能由FC21这个功能块来完成。3 o- |$ _/ ^( b$ {
下面看一下FC21的应用例子。
4 o+ B$ u: U$ |CALL  FC21   
+ B  p3 |- ?' s, E. k% D: q Enable :=TRUE        解释:1=FC21 active" E0 q* D" E9 {3 B: R
Funct  :=B#16#4        解释:B#16#4=write(PLC写NC);B#16#3=read(PLC读NC)5 j0 D8 F) y% J6 }' Q% O
S7Var  :="HM_B_250"        解释:PLC中数据的地址- q7 K, p- f/ L: v+ z3 @5 Z
IVAR1  :=42                解释:NC中的数据地址
# ?7 O- A6 s! D* p! ^# PIVAR2  :=-17 h. \7 V3 ]$ {" d  D
Error  :=#Er_FC21_DPR42_wri_A2
) l* R' X* D3 _: YErrCode:=#ErrC_FC21_DPR42_wri_A27 G& P& {- i/ F! R
( m0 S1 [! R" g; J9 L  n' R: l/ g
上面的例子实现了如下功能:将PLC地址MB250里的数据写到$A_DBB[42]里。然后NC程序就可以读取了。
鲜花(0) 鸡蛋(0)
发表于 2009-2-17 22:43 | 显示全部楼层
同言同羽 置业良晨
老兄是个人才,更难得的是能把自己的知识拿来和大家分享!:
理袁律师事务所
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-2-27 04:35 | 显示全部楼层

SIEMENS 840D GHOST

同言同羽 置业良晨
笔记本测需要的设定 :& F  `+ ^9 L, b
1 在笔记本有空间的硬盘分区中创建一文件夹, 属性为共享 ,同时名字要与下面第17步中的名字一样 例如:OP50A& k* ]( w' w) B' B. I3 U  s
2 在网卡属性设定中 对IP 地址进行设定,一般为:192 168 1 2
# |1 J: d/ g* S* K7 o255 255 255 0
0 w/ u/ _% I: I' j. k7 Y: P4 m3笔记本中必须要有下面用户名”AUDUSER”  并且必须是 “管理者”,至于用何用户名子登陆这台笔记本无所谓的(设定在控制面板中)
3 E8 z1 l6 s! l, s4 笔记本的用户名字要与下面 第17部中一致  。(修改:点击我的电脑右键 属性).
' e! O8 G& K! s- g机床控制面板侧操作如下:7 X/ d6 C4 Z4 Z  S  \
1 启动设备 , 并执行tool change  position使刀具回到库6 C4 E4 B) ]( ]
2作系统的系列备份 方法 :
8 P3 H! s0 }, f! `, n% Ja :MENU  SELECT5 x, X0 R: L2 N5 }# ^. R" [0 w
B:  SERVICES
4 ?$ V$ f% ^& LC:  按扩展键出现 SERIES  START-UP8 d- }" P$ |: [' \
D: 移动光标 到 NC     WITH COMPENSATION DATA 将两个小方框 全选上对号 。并在 ARCHIVE NAME 处写上名字。
# {5 [0 v2 i8 E3 iE: 按 ARCHIVE这时NC的系列备份开始作了 。
" w) N; ?1 H. w8 O同样将 PLC也做一次 系列备份 。
; E. v% L% I( C3 t. ^( I3 在按 MENU  SELECT/按扩展键出现EXIT,并重新起动840D工控机.
+ t' I$ y) j. u; u2 M( x. p4 出现 “SINUMERIK”按向下箭头并回车。
2 a, w/ Q/ Q9 m5 ~3 v  i! A, Q& ]5        选择7 BACKUP/RESTORE
. H' M; _4 v. ?0 U0 C2 G6        提示输入密码 : PSCNC8 o) n9 T# {' l' S! Y
7        选1 HARDDISK BACKUP /RESTORE WITH GHOST
  b/ d! B# ~4 u0 o: T8        选 1CONFIGURE  GHOST PARAMETERS
$ ^" t" }. O8 L  |5 _9 I7 C, |9        GHOST CONNECTION MODE :LOCAL/NETWORK
# W- G1 v+ ]" c9 @9 xBACKUP TO IMAGE FILE:G:\OP55A.GHO
% V6 k, ?* P" q" ^% h& [. QRESTORE FROM IMAGE FILE:G:\55-CH-VI.GHO: |& [2 U% X1 y7 h
在第 3中可以设定备份的镜像文件的名字
& _/ q8 O" k! Y$ Y) J' ?10        在 第6项中可以修改IP址MANAGE METWORK DRIVES
3 T( e$ p( O4 q9 W6 }) n1 B3 _11        选4 CHANGE NETWORK SETTINGS
( I$ Y" ]  g- H9 uMACHINE MAME         CNC321-OP50A
* }% e5 F: D; s6 y" N9 [$ AUSER NAME                   AUDUSER
' _; }/ j- o4 c& G: I: eTRANSPORT  PROTOCOL            TCPIP  GET  IP ADDRESSES MANUALLY
) X" M, t. R% ]! S1 qLOGNO TO DOMAIN         YES
: H& S$ e6 B# v) rDOMAIN  NAME     WW0047 Y8 m8 u* y& }3 Z
CONNECTED NETWORK DRIVE    NONE
. S4 r: c6 P& D$ F1 Q. U12        选6CHANGE TCPIP SETTINGS/ K. d4 Q$ E* l0 e  C$ V
GET IP SDDRESSES       MANUALLY
7 [" Z2 d3 x7 `MY IP ADDRESS    192 168 1 15 ]7 a; x8 d, R: H+ a8 T# B
SUBNETMASK       255 255  255 0( D' ^6 D. X6 y; c* ~- H
GATEWAY              10 10 136 1
1 W9 q1 {# o: D8 M0 v如果需要修改IP 地址选择2  CHANGE IP ADDRESS1 C% e% l/ s1 O, T9 n
13        按 back to prvious menu) O, C3 r7 |1 j7 u6 |6 N* S
14        按 back to prvious menu" i$ H( Z6 I- `3 \" \" {
15        按 1 CONNECT TO NETWORK DRIVE
9 t1 {9 L- b9 ?% q  s( g16        出现提示输入密码:SUNRISE0 B# v( G6 v1 P. _* y$ W7 v5 Q
17        出现 LETTER FOR NETWORK DRIVE [G]:G         G是指笔记本整个硬盘* ]4 v8 f3 i/ O0 w6 k
DIRECTORY TO BE MOUNTED [\\SGM\OP50A]:\\SGM\OP50A其中SGM使笔记本的用户名OP50是笔记本中间的共享文件夹; W9 s& W7 {4 d5 S
18 提示输入笔记本的密码: SUNRISE              (这时画面回自动退到上一级去)
; q/ t, k2 c5 |+ r$ U% n1 c7 ~; t8 d19  按 back to prvious menu          (提示是否要保存 ,输入Y)( Y' U( r- K7 v. l4 C, L1 {4 _- b1 d
20        按 back to prvious menu
% o; y/ Z6 J/ b. g' o0 ^7 [8 P* T21        按2  HARDDISK BACKUP TO G: \OP50A .GHO ,MODE LOCAL/NETWORK; P- q* ]/ K  |
22        提示CONTIUNE BACKUP [Y,N]输入Y并回车,此时SIEMENS自动进入GHOST画面了。. t7 b3 g8 c, T4 y5 s1 Q
23        做完GHOST后重启840D电脑( d5 ~" G# q9 L" F& K4 q
注意事项:1 网线要交叉网线
8 I. K7 p1 A# t3 R$ y1 N2 BACKUP TO IMAGE FILE:G:\OP55A.GHO一定是G盘
  Z( G# x! T* J3 操作面板侧 对IP地址进行设定时,不能用“点”例如:192.168.1.1这是不对的 ,正确的是192 168 1 1 用“空格”。
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-3-3 03:21 | 显示全部楼层

fanuc 414报警

机床在加工过程中出现传送杆NC报警,机床停止加工.接上CRT显示414报警,造成414报警的原因大致有以下几种:(1)过载报警(2)电压不足报警(3)过电流报警(4)电流异常报警(5)过电压报警(6)放电报警(7)断线报警(8)伺服控制内部存储器的溢出报警。然后根据CRT中显示DGN200 ,HCA 1,这就是表示电流异常报警(伺服放大器侧的报警),伺服放大器上显示“8.”报警,这就是说明伺服放大器内的IPM内检测到异常(IPM内过电流,高温或驱动回路用电源电压下降).造成这种报警的可能一是伺服放大器模块自身有问题,二是电缆有问题,三是伺服电机有问题.  X" V! r; b/ u8 s' {" x5 ^
    因为机床是在自动加工过程中出现的这种报警,所以模块自身的问题可能性很小,所以剩下的就是电缆和伺服电机的可能性最大.然后先将电源总开关断开再用兆欧表来对电缆和电机进行测量发现电缆电机绝缘以损坏对地,并有短路现象,这样就找到了故障的根本原因,然后拆开电机动力线接头发现接头内有冷却液残留物的迹象,这说明造成电机短路的主要原因就是由于长期受冷却液长期浸泡渗入所造成.! z! V5 o' k1 ]0 s% |2 q1 T
解决方法就是更换电机,更换电机动力线接头,在更换动力线接头时要注意几点,一是因为接线端子都是焊接的,所以更换时一定要把动力线线头焊接处处理干净,以避免上面有氧化层,焊锡不能融合.二是焊接时一定要注意不要虚焊,因为电机启动时电流比较大,虚焊会增大阻值,造成局部温度过高,很容易开焊造成断路缺相现象.三是线头尺寸要掌握好避免线头裸露过多,造成隐患.四是当焊接完接头后要用兆欧表对其进行检查.+ i3 p% M+ A# `; l
当电机和动力线安装完毕后,检查无误然后将总电源开关合上,打开机床液压,由于拆卸伺服电机就必须要拆掉编码器电缆这样伺服电机的原点就会丢失,就必须重新设定原点,设定原点的方法已经在前几次维修心得中介绍过了,在这就不在说明,在原点设定完后要检查所有工位和工件是否正常,确定正常后,手动将传送杆升起落下几次,观察工件与机床定位销的位置是否准确,以保证原点设定准确,然后通知操作者以自动加工,手动传送的方式进行加工,以这种方式进行几个循环后确认无误后才可以进行自动加工.4 ^. |; c6 q5 P0 ]7 u4 G9 y3 D
这就是此次维修的全部过程和通过这次维修总结的一点经验.
鲜花(1) 鸡蛋(0)
发表于 2009-3-3 17:39 | 显示全部楼层

回复 25楼 的帖子

老杨团队,追求完美;客户至上,服务到位!
鲜花(0) 鸡蛋(0)
发表于 2009-3-12 01:57 | 显示全部楼层
非常感谢分享经验。 任何CNC编程我非常熟悉, 但CNC的PLC编程不懂。 很想跟老大你学习CNC的维修, 不知有无相关CNC PLC的书籍推荐?
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2009-3-15 17:49 | 显示全部楼层
cnc里的plc不需要你去编程,如果你会的话,那就黄金万两了,呵呵。还有你说cnc编程你都会,不过你应该学学海德翰系统,我打赌你这个肯定不会。
鲜花(34) 鸡蛋(0)
发表于 2009-3-18 21:01 | 显示全部楼层

我怎么觉得simenes的控制系统,在数控机床上用的并不是很多

我在这里,用过西门子的s7-200,设计工厂的自动冲床,主要的原因是便宜,上手快。好像在整个加拿大,很少工厂可以用到s7-400的水平。(加东就不知道了)。
% ?# }. u  M( q" A5 g, n! V0 N# C& U% a7 U
我一直都是维修mazak的数控机床,几乎就没有西门子的控制系统。
鲜花(0) 鸡蛋(0)
发表于 2009-3-19 13:28 | 显示全部楼层
老杨团队,追求完美;客户至上,服务到位!
原帖由 korg707 于 2009-3-15 18:49 发表 $ `4 A5 R8 I/ U4 d* S
cnc里的plc不需要你去编程,如果你会的话,那就黄金万两了,呵呵。还有你说cnc编程你都会,不过你应该学学,我打赌你这个肯定不会。
' S2 O  Z0 I0 y
% m# J* U/ e' p" G4 e# K$ T' J/ W
在edmonton有Heidenhain系统的机器估计不到15台, 大都是NICOLAS CORREA的五轴机器, 还有些台湾产的机器也是。 正好我曾经编程和运行过至少7-8台。 对海德翰系统数控编程, 我想爱城没有人比我更熟悉了。 但使用中发现运行海德翰系统的机器很不可靠, 即使是新机器也是半年内必出大问题。 远不如Mazak。  所以产生了学习机床维修的想法。
. _, x' p7 a% n- `  \( g
8 L6 X2 G* {% e2 r. k' V想请教楼主, 哪里找CNC里的PLC的学习资料。 ( W4 t. J! \' M# }1 Q
* {# M7 M' F# ?8 h. K
另外借贴想问一问, 楼主手头是否知道有谁有二手的CNC mill出售??
鲜花(34) 鸡蛋(0)
发表于 2009-3-19 13:43 | 显示全部楼层

隔行如隔山

plc编程也不是复杂的不得了,不过在alberta基本上没有用武之地。公司的自动冲床和试验机,也都是我自己编程,毕竟不是很大的工程(比如机场的控制系统,就复杂得多拉)。
) j8 M  p) _) v; p! W& f6 E4 }3 ^3 d* v
如果要学习cnc的维修,关键是可以看懂plc的语言。新一代的mazak数控机床,已经把plc的梯形图,直接包含在现实菜单里,可以直接在线调试,但关键是你要看懂。知道每一条的指令。。过去的是在书上,用地址单元自己去查询,累死了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|小黑屋|手机版|Archiver|埃德蒙顿中文网

GMT-7, 2026-7-29 08:58 , Processed in 0.449505 second(s), 27 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表