KUKA堆放件控制USER说明:
PTP VB=100% VE=0% ACC=100% RobWzg=1 Base=0 SPSTrig=5[1/100s] PU
1: FB PSPS = EIN
2: A23 = AUS
3: A18 = EIN
4: GOTO SPSLabel 3 = F940 F940如果抓手上没件
5: SPSLabel 2
6: WARTE BIS (E61 + E213) & M2 +M1 & F940
7: --重置为容器1-在容器为空时重置--
8: i51 ( E59 ) = 1 E59容器1内没有件,没有件就重置I51
9: --重置为容器2-在容器为空时重置-- -
10: i52 ( E209 ) = 1 E209容器2内没有件, 没有件就重置I52
11: i31 ( E61 ) = i51 E61料架1是否合格,可以进入,i31总计数,i51料架1计数器.
12: i31 ( E213 ) = i52 E213料架是否合格,可以进入,i31总计数,i52料架2计数器.
13: bin20 ( EIN ) = i31 反馈上一次计数值给PLC用于比较
14: A61 = E61 & !E213 机器人去料架1-A61
15: A213 = !E61 & E213 机器人去料架2-A213
16: --从PLC读取计数器状态--
17: i31 ( EIN ) = binin20 PLC将数值发给I31
18: bin20 ( EIN ) = i31 反馈计数值给PLC用于比
---下面的F916和F917是用来判断计数器I31的计数是否正确-----
19: F916 = i31 = 0 i31计数值=0就激活F916
20: F917 = i31 > 9 i31计数值>9就激活F917
-----------------
21: F918 = (F916 & !E917) +(!F916 & F917) F918是计数数值不正确
22: GOTO SPSLabel 2 = F918 计数数值不正确就再回第2步
23: SPSLabel 3
24: F901 = M2 & !E15 + F941& E15 M2/F901抓持上有件
25: WARTE BIS E63 & F901 &!E18 + E212 & F901 & !E18 + F940 & !F901
E63往鼠笼1放件,E212往鼠笼2放件, F940 & !F901抓持器上没有件
26: A18 = AUS
27: F902 = i51 < 10 鼠笼1数量在小于10以内
28: F903 = i52 < 10 鼠笼2数量在小于10以内
29: WARTE BIS F901 & (F902 +F903) + F940
等待F901抓持器上有件,F902/F903计数器在正常范围内或者F940抓持器上没有件
30: WARTE BIS E23
31: A23 = EIN
32: FB PSPS = M30
UP14 = E63 & F901 & F902 去鼠笼1放件
UP15 = E212 & F901 & F903 去鼠笼2放件
-------------------------
UP14 放件程序分析:
通过USE程序和计数器I31结合改变BASE值实现向鼠笼料架进行堆放件的程序编写.
PTP VB=100% VE=0% ACC=100% RobWzg=1 Base=3 SPSTrig=5[1/100s] P
Tech_T_Speicher Platz=Base+i31 FRG S-Platz = 63 EIN
VW_USR_R (#USR_ADV,107,2,1,1,1,63,1,TRUE)
开始放件步
LIN VB=250[mm/s] VE=100% ACC=100% RobWzg=1 Base=31 SPSTrig=0[1/100s] P
LIN VB=250[mm/s] VE=10% ACC=100% RobWzg=1 Base=31 SPSTrig=0[1/100s] P
放件点轨迹
LIN VB=250[mm/s] VE=0%ACC=100% RobWzg=1 Base=31 SPSTrig=5[1/100s] P
LIN VB=250[mm/s] VE=0% ACC=100% RobWzg=1 Base=31 SPSTrig=0[1/100s] P
ADV
CASE 107 ;
; VW_USR_R (#USR_ADV,107,2,1,1,1,63,1,TRUE)
P1 =2 偏移模式
P5 =63 与PLC进行IO通讯反馈
P7 = TRUE 激活USER
零件存放
IF(PAR7==TRUE)THEN 激活位置计算功能
CONTINUE
IF(PAR5>0)THEN 如果 PAR5有值
IF NOT $IN[PAR5] THEN 如果没有E63
CONTINUE
$OUT[PAR5] = TRUE 发出A63给PLC提示机器人开始进行偏移放件
nRintMsgNr[10] = 0
WHILE NOT $IN[PAR5]
当指令:当没有E63 时发出提示信息
IF(exists_krlMsg(nRintMsgNr[10])== FALSE)THEN
MLD(40,#StateMsg);零件编号 PLC中缺少
ENDIF
ENDWHILE
MSG_DEL = Clear_KrlMsg (nRintMsgNr[10])删除状态消息
ENDIF
ENDIF
CONTINUE
$COUNT_I[i_T_Speicher]=$B_IN[Binin_T_Sp] BIN20的数给I31
CONTINUE
WHILE($COUNT_I[i_T_Speicher]<1) OR ($COUNT_I[i_T_Speicher]>254)
当指令: 当I31 小于1,或大于254 发出提示信息
MLD(14,#QuitMsg);PLC存储器位置无效
$COUNT_I[i_T_Speicher]=$B_IN[Binin_T_Sp] I31 =Bin20
ENDWHILE
$B_OUT[Binout_T_Sp]=$B_IN[Binin_T_Sp]
将个给入的Bin20再发出去BINout20给PLC
设置零件存储位置1-254
CONTINUE
IF(BASE_TYPE[VW_MPARA_ACT.BASE_NO]==#BASE)THEN
只有当BASE_TYPE[1]被设置成#BASE时执行
CONTINUE
WHILE(T_Speicher[$COUNT_I[i_T_Speicher]].Z==0.0)
当T_Speicher的Z方向是0时提示信息
MLD(15,#QuitMsg);存储位置的坐标无效
ENDWHILE
SWITCH Par1 Par1=2
CASE 1
CONTINUE
BASE_DATA[31]=T_Speicher[$COUNT_I[i_T_Speicher]]
当 Par1=1时 BASE_DATA[31]直接由变量T_Speicherge[]给赋值
CASE 2 Par1=2时
CONTINUE 改变$BASE31的坐标值:当前使用的BASE值与T_Speicher的计算
BASE_DATA[31]=BASE_DATA[VW_MPARA_ACT.BASE_NO]:T_Speicher[$COUNT_I[i_T_Speicher]]
DEFAULT P1要是其他的值
MLD(20,#QuitMsg);选择错误
ENDSWITCH
ELSE BASE_TYPE[1]没有设置成#BASE需要提示报警
MLD(31,#QuitMsg);基本类型无效
ENDIF
;
ENDIF
FRAME T_Speicher[300] 程序中使用了9个空位
T_Speicher[1]={X 0.0,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[2]={X -180.300003,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[3]={X -360.600006,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[4]={X -540.900024,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[5]={X -721.200012,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[6]={X -901.5,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[7]={X -1081.80005,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[8]={X -1262.09998,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
T_Speicher[9]={X -1442.40002,Y 0.0,Z 0.100000001,A 0.0,B 0.0,C 0.0}
全部0条评论
快来发表一下你的评论吧 !