比如有一台沈阳GMB龙门加工中心(840D没有激活刀具管理)换刀程序有一段程序如下:(相关联的PLC怎么看?是FC21什么的吗?)
;--------------------------------------------------
DEF INT NEW_TOOL, SPD_TOOL
DEF REAL HIGHSPEED,LOWSPEED
NEW_TOOL=$C_T ; new programmed tool number
SPD_TOOL=$P_TOOLNO ; current tool number on the spindle
HIGHSPEED=$MN_USER_DATA_FLOAT[1]
LOWSPEED=$MN_USER_DATA_FLOAT[2]
IF $MN_USER_DATA_INT[3]==0 GOTOF _END
IF $A_DBB[83]==1 GOTOF _END ;程序段搜索 $A_DBB[83]什么意思?哪来的?怎么了解?
G290 ;西门子方式
IF $P_ISTEST==1 GOTOF _END
_MM[0]=$MN_USER_DATA_INT[3] _MM[0]前面一直没有定义,是制造商随便用的数组吗?
IF NEW_TOOL>_MM[0] GOTOF _END0 ; GOTO ALARM MSG
IF SPD_TOOL==NEW_TOOL GOTOF NO_CHG
IF (_MM[2]==_MM[4]) GOTOF _RIGHT
GOTOF _ALARM1
_RIGHT:
_MM[0]=0
_PP: _MM[0]=$A_DBB[72] ;开门条件:ATC原点,对应db91.dbw72 刀库开门的条件检测可以做到M93对应的PLC里吗?然后$A_DBB[72]是不是就是db91.dbw72?里面通过PLC传递的吗?
IF _MM[0]<>1 GOTOB _PP
M93 ;刀库门开
STOPRE
G500 ;取消零点偏置
D0 ;取消刀补
m24 ;取消Y轴第二软限位
STOPRE
G153 G0 G90 Z0 ;Z轴回零点
SPOS=$MN_USER_DATA_FLOAT[0] ; 主轴准停
G153 G01 G90 Y=$MN_USER_DATA_INT[4] F=HIGHSPEED
_MM[0]=0
_TT: _MM[0]=$A_DBB[80] ;YZ轴运动条件:开门到位 同样$A_DBB[80]怎么查找他的根源,哪来的?
IF _MM[0]==0 GOTOB _TT
G153 G01 G90 Y=$MA_FIX_POINT_POS[1,AX2] F=HIGHSPEED
G153 G01 G90 Z=$MA_FIX_POINT_POS[1,AX3] F=HIGHSPEED
M91 ;断进给轴伺服使能
STOPRE
M81
STOPRE
_MM[0]=0
_AA: _MM[0]=$A_DBB[66] ;机械手启动条件:倒刀到位且ATC在原点,db91.dbb66
IF _MM[0]<>1 GOTOB _AA
M84 ;到刀,机械手扣刀,主轴松刀,机械手换刀,主轴夹刀
STOPRE
_MM[0]=0
_BB: _MM[0]=$A_DBB[70] ;主轴夹紧的条件,db91.dbb70
IF _MM[0]<>1 GOTOB _BB ;主轴夹紧以后才激活刀具参数
M85 ;ATC二次回原点
STOPRE
M66 ;激活刀具参数 通道参数22560设定的值,用于激活刀具参数,这些刀具参数是什么在哪里?(840D但没有开通刀具管理)
STOPRE
_MM[0]=0
_CC: _MM[0]=$A_DBB[72] ;恢复进给使能的条件:ATC在原点,db91.dbw72
IF _MM[0]<>1 GOTOB _CC
M92 ;恢复进给轴伺服使能
STOPRE
D0
G153 G0 G90 Z0 ;Z轴返
G153 G0 G90 Y=$MN_USER_DATA_INT[4]
;刷新NC刀表 下面用到大量的_MM[]数组,是固定的意思吗?
M66激活刀具就是激活这些吗?如果是,那么_MM[]数组肯定是有专门指定的意思吧?
_MM[0]=0 ;最大刀数
_MM[1]=0
_MM[2]=0 ;实际刀数和
_MM[3]=0
_MM[4]=0 ;理论刀数和
_MM[0]=$MN_USER_DATA_INT[3]
AA:_TH[_MM[1]]=$A_DBB[_MM[1]] ;赋值给刀表
_MM[2]=_TH[_MM[1]]+_MM[2] ;_MM[2]不能在其他地方清零赋值 _TH[]什么意思
_MM[1]=_MM[1]+1
IF _MM[1]<=_MM[0] GOTOB AA
IF _MM[0]MOD(2)==0
_MM[4]=(1+_MM[0])*_MM[0]/2
ELSE
GOTOF MS
ENDIF
MS:_MM[4]=(POT(_MM[0])+ _MM[0])/2
_ST:
IF _MM[2]==_MM[4]
GOTOF _RIGHT1
ELSE
GOTOF _ALARM1
ENDIF
_RIGHT1:
_MM[0]=0
_QQ: _MM[0]=$A_DBB[72] ;关门条件:ATC原点
IF _MM[0]<>1 GOTOB _QQ
M94 ;刀库门关
STOPRE
m25 ;恢复Y轴第二软限位
STOPRE
M83 ;回刀
STOPRE
_MM[0]=0
_TT1: _MM[0]=$A_DBB[80]
IF _MM[0]<>0 GOTOB _TT1
GOTOF _END ;换刀结束条件
NO_CHG:
MSG("***编程刀具号等于主轴刀具号***")
;MSG("***PROGRAMMED TOOL is on the spindle. No TOOL change ***")
G4F3
GOTOF _END
_ALARM1:
MSG("***刀具表中出现相同刀号_MM[2]<>MM[4]***")
GOTOB _ALARM1
_END0:
MSG("***换刀结束. 新刀具超出换刀数量***")
GOTOB _END0
_END:
版主推荐答案
FC21功能块(Transfer PLC NCK data exchange),当此功能块被调用的时候,根据此功能块的FUNCTION CODE,实现PLC与NCK的数据通讯.
$A_DBB // Data byte (8 bits)
$A_DBW // Data word (16 bits)
$A_DBD // Data double word (32 bits)
$A_DBR // Real data (32 bits)
CALL "FB_SIEM_ PLC_NCK" ;FC21
Enable :=TRUE
Funct :=B#16#4 ;写入
S7Var :="DB_MW_an_NC".MW_FenaL_re ;DB293.DBD0
IVAR1 :=36 ;$A_DBD[36]
IVAR2 :=-1
Error :=#temp1
ErrCode:=#temp2
NOP 0
举例说明,调用FC21,执行写操作,将DB293.DBD0赋值给$A_DBD[36],然后再NC中执行相关操作。Funct :=B#16#3 ;读入数据,所以具体要看你的PLC怎么写的。
_MM[0]前面一直没有定义,是制造商定义的全局变量或通道变量,在变量定义中可以找到。
查看完整帖子:
http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1419209&bid=20
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc307447.html