我们在很多时候都会遇到机器人的虚拟外部轴滞后故障报警,它的报警时如何发出的呢?
报警中的滞后故障:
SZMsg(MsgNr :IN) ---伺服钳报警信息程序
SWITCH MsgNr 控制号
CASE 1
SWITCH $SoftPlcint[21] 软PLC反馈信息
CASE 1
USER_MSG.MSG_TXT[]="SZ1 Schleppfehler im Programmbetrieb, Quittierung in Single-Step erforderlich !"
程序模式下SZ1滞后错误,需要单步确认!
......
CASE 2
SWITCH $SoftPlcint[21] 软PLC反馈信息
CASE 1
USER_MSG.MSG_TXT[]="SZ1 Schleppfehler im Programmbetrieb"
SZ1程序模式下的跟随错误
.......
CASE 3
SWITCH $SoftPlcint[21] 软PLC反馈信息
CASE 1
USER_MSG.MSG_TXT[]="SZ1 Schleppfehler, Warte bis kein Schleppfehler !"
SZ1跟随错误,等到没有跟随错误!
....
--产生报警的程序设置—-
GLOBALINTERRUPTDECL 8 WHEN $softplcbool[5] DO SZIntR(7)中断程序激活滞后故障,$softplcbool[5]触发中断程序.
通过中断程序我们可以知道机器人虚拟外部轴的滞后故障是由软PLC的反馈点引起的,说明滞后故障是由软PLC软件监控产生的.
IF NOT $OUT[O_SZ1_FRG] AND (abs($softplcreal[1])>max_sf) AND ($softplcint[1]>0)THEN
BRAKE 机器人程序停止,机器人运动立刻停止
IF ANTEIN_MERKER AND $softplcbool[5] THEN
ANTEIN_MERKER在断开机器人程序驱动,PLC提示错误
nRintMsgHandle[2] = SZMsg(2) 发出提示信息SZ1程序模式下的跟随错误
WAITFOR $softplcbool[6]==FALSE 等待没有软PLC的提示信息
SF_Vorwarnung=FALSE 预警
WAITFOR $IN[I_SZ1_IPos_g] 等待E716位置有效
IF(nRintMsgHandle[2] > 0)Then 反馈值是整数
MSG_DEL = Clear_KrlMsg (-99) ; 清除提现状态信息
nRintMsgHandle[2]=-1
ENDIF
ELSE机器人程序在执行过程中
IF(Handbetrieb==FALSE)THEN如果机器人不是外部自动模式被认为是手动准备
F_Handbetrieb=TRUE 故障手动标识位
IF($softplcint[1]>0)THEN有外部轴被使用
$OUT[O_SZ1_F_Schl]=TRUE ---A131焊钳拉拽故障PLC反馈点
ENDIF
nRintMsgHandle[1] = SZMsg(1)
发出提示信息: 程序模式下SZ1滞后错误,需要单步确认!
WHILE Handbetrieb==FALSE 关闭手动准备
ENDWHILE
IF(nRintMsgHandle[1] > 0)Then
MSG_DEL= Clear_KrlMsg (-99) ;清除故障信息
nRintMsgHandle[1]=-1
ENDIF
ENDIF
IF NOT F_Handbetrieb THEN 没有故障手动标识位
nRintMsgHandle[1] = SZMsg(1)
发出提示信息:程序模式下SZ1滞后错误,需要单步确认!
IF(nRintMsgHandle[1] > 0)Then
MSG_DEL= Clear_KrlMsg (-99) ; 清除故障信息
nRintMsgHandle[1]=-1
ENDIF
ENDIF
ENDIF
ENDIF
;ENDFOLD
Schleppfehler 滞后误差! 除了伺服焊钳外,还可以针对伺服有钉铆钳NZ,和无钉伺服铆钳CZ.下面我们以气伺服焊钳为例进行分析:
IF SZ_VORHANDEN OR MIT_NZ1_Serv OR MIT_NZ2_Serv THEN
SZ_VORHANDEN使用伺服焊钳 虚拟轴 ,或者是伺服铆钳1和伺服铆钳2
---机器人手动时的拉拽故障被触发--
IF $OUT[O_R_Hand] AND TAST_AKTIV_1 AND NOT $OUT[O_SZ1_t_auf] AND NOT $OUT[O_SZ1_t_zu] AND NOT Temp_Komb_1 THEN
A11机器人手动,如果测试点动功能激活,没有A719和A720的焊钳点动控制激活,
Temp_Komb_1=false
TAST_AKTIV_1=FALSE 测试功能激活
WAITSEC 0.4 等待
$OUT[O_SZ1_FRG]=FALSE A715焊钳功能激活
schleppfehler=TRUE 激活拉拽故障
sf_prog_status=#user_act # user_act:操作确认键时的滞后误差
$OUT[O_SZ1_SPos_g]=FALSE A716 使用位置有效
ENDIF
... ...
IF schleppfehler THEN ---- schleppfehler滞后变量被激活
Behandlung_schleppfehler() 跟踪错误的处理
ELSE
SetSollPos(TRUE);空运行
IF $softplcbool[5] THEN 软PLC ---第五位是拉拽故障.
sg_fehler()
ENDIF
ENDIF
sg_fehler ()
FOR SZNr=1 To 7 -----1到7轴
FrgSZ=FctFrgSZ(SZNr)焊钳1的A715激活焊钳控制功能
IF($softplcint[SZNr]<>0) AND NOT FrgSZ AND NOT $power_fail THEN
$softplcint[1]=7伺服焊钳 焊钳没有激活控制 $power_fail电源故障
schleppfehler=TRUE 激活拉拽故障变量
IF $PRO_STATE1==#P_ACTIVE THEN 程序激活
sf_prog_status=#prg_motion程序运行中出现的滞后误差
ELSE; 程序状态是不激活
IF NOT $EXT THEN
SetSollPos(FALSE)
ENDIF
IF NOT $COULD_START_MOTION THEN
显示机器人是否可以移动/机器人不在移动
IF(IOCTL("IBusDrv",3,0)==1) AND NOT $power_fail THEN
"IBusDrv" interbus网络驱动这里值不使用,没有电源故障
sf_prog_status=#driveoff_motion
驱动装置关断时的滞后误差
ErrSZNr = SZNr 记录发出故障信息用的恶故障的钳号
SyncMoveMessage(18, #QuitMsg, ErrSZNr);
故障信息:钳子处于非法位置
ErrSZNr =-1
ENDIF
ELSE 显示机器人可以移动
IF NOT $power_fail THEN 没有电源故障
sf_prog_status=#man_motion 用运行驱动装置时的滞后误差
MsgNum=6
ENDIF
ENDIF
ENDIF
InvDestPos=FctDestPos(SZNr) E773目标位置无效
IF InvDestPos THEN
ErrSZNr= SZNr
SyncMoveMessage(19, #QuitMsg, ErrSZNr); 发出故障信息:目标位置无效
ErrSZNr=-1
sf_prog_status=#dest_invalid
ENDIF;目标位置无效
ENDIF
ENDFOR
;产生讯息
IF MsgNum > 0 THEN 发出报警信息
ErrSZNr=SZNr
SyncMoveMessage(MsgNum, #StateMsg, ErrSZNr)
RemMsgNum=MsgNum
ErrSZNr=-1
ENDIF
END
;ENDFOLD
-----------------------------------------
DEFFCTBOOL FctFrgSZ(SZNr:IN)
INT SZNr
BOOL FctFrgSZVal
SWITCH SZNr
CASE 1
FctFrgSZVal=$OUT[O_SZ1_FRG] 焊钳1的A715激活焊钳控制功能
CASE 2
FctFrgSZVal=$OUT[O_SZ2_FRG]
CASE 3
FctFrgSZVal=$OUT[O_SZ3_FRG]
CASE 4
FctFrgSZVal=$OUT[O_NZ1_FRG]
CASE 5
FctFrgSZVal=$OUT[O_NZ2_FRG]
CASE 6
FctFrgSZVal=$OUT[O_CZ1_FRG]
CASE 7
FctFrgSZVal=$OUT[O_CZ2_FRG]
ENDSWITCH
RETURN(FctFrgSZVal)
ENDFCT
;ENDFOLD
-------------------------------------
DEF Behandlung_schleppfehler()跟踪错误的处理
BOOL bRet
IF(async_active==FALSE) AND NOT $power_fail THEN
SWITCH sf_prog_status
CASE #man_motion 用运行驱动装置时的滞后误差
Fahrt_SG_Istpos() 异步行进到实际位置
CASE #prg_motion 程序运行中出现的滞后误差
IF $ROB_STOPPED THEN 机器人停止
IF $EXT==FALSE THEN 外部自动关闭
SetSollPos(FALSE) 关闭实际位置有效A716
IF $softplcbool[6] THEN
Fahrt_SG_Istpos()异步行进到实际位置
ELSE
schleppfehler=FALSE
sf_prog_status=#SZ_io无滞后误差
ENDIF
ELSE
IF $COULD_START_MOTION THEN显示机器人是否可以移动/机器人不在移动
SetSollPos(TRUE) A716发出实际位置有效
IF $softplcbool[6]==FALSE THEN 没有故障反馈点
schleppfehler=FALSE
sf_prog_status=#SZ_io
ENDIF
ENDIF
ENDIF
ENDIF
CASE #driveoff_motion 驱动装置关断时的滞后误差
IF $EXT==FALSE THEN 外部自动关闭
SetSollPos(FALSE)
Fahrt_SG_Istpos()
ELSE
IF $COULD_START_MOTION THEN显示机器人是否可以移动/机器人不在移动
SetSollPos(TRUE)
IF $softplcbool[6]==FALSE THEN
schleppfehler=FALSE
sf_prog_status=#SZ_io
ENDIF
ENDIF
ENDIF
CASE #dest_invalid由于目标位置无效导致的滞后误差
Fahrt_SG_Istpos()
CASE #user_act操作确认键时的滞后误差
Fahrt_SG_Istpos()
CASE #SZ_io无滞后误差
IF NOT $softplcbool[5] AND NOT $softplcbool[6] THEN
schleppfehler=FALSE
ENDIF
ENDSWITCH
ENDIF
SWITCH $ASYNC_STATE 同步系统状态
CASE #BUSY 正在工作
async_active=TRUE
CASE #IDLE ; 异步运动完成
IF async_active THEN
schleppfehler = FALSE
sf_prog_status=#SZ_io
SetSollPos(TRUE)
async_active=FALSE
ENDIF
async_active=FALSE
ENDSWITCH
;
END
;ENDFOLD
异步行进到实际位置判断
DEF Fahrt_SG_Istpos()
INT SZNr, i
E6AXIS zielpos
; 到当前位置的异步驱动
IF $COULD_START_MOTION AND $ROB_STOPPED THEN
FOR SZNr=1 To 7
IF $softplcint[SZNr]<>0 THEN
SWITCH $softplcint[SZNr]
CASE 7 伺服焊钳1
zielpos.E1=IstPosCalc(SZNr)获得机器人虚拟轴实际位置
pos_outofsoftend=Outofsoftend(zielpos.E1, 7)
判断伺服焊钳实际位置是否超程,并发出提示信息
CASE 8伺服焊钳2
zielpos.E2=IstPosCalc(SZNr)获得机器人虚拟轴实际位置
pos_outofsoftend=Outofsoftend(zielpos.E2, 8)
判断伺服焊钳实际位置是否超程,并发出提示信息
CASE 9伺服焊钳3
zielpos.E3=IstPosCalc(SZNr)获得机器人虚拟轴实际位置
pos_outofsoftend=Outofsoftend(zielpos.E3, 9)
判断伺服焊钳实际位置是否超程,并发出提示信息
CASE 10伺服NZ铆钳1
zielpos.E4=IstPosCalc(SZNr)获得机器人虚拟轴实际位置
pos_outofsoftend=Outofsoftend(zielpos.E4, 10)
判断伺服焊钳实际位置是否超程,并发出提示信息
CASE 11伺服NZ铆钳2
zielpos.E5=IstPosCalc(SZNr)获得机器人虚拟轴实际位置
pos_outofsoftend=Outofsoftend(zielpos.E5, 11)
判断伺服焊钳实际位置是否超程,并发出提示信息
CASE 12伺服CZ铆钳1
zielpos.E6=IstPosCalc(SZNr)获得机器人虚拟轴实际位置
pos_outofsoftend=Outofsoftend(zielpos.E6, 12)
判断伺服焊钳实际位置是否超程,并发出提示信息
DEFAULT
HALT
ENDSWITCH
ENDIF
IF pos_outofsoftend THEN位置超出极限设置
goto FctEnd调步到结尾
ENDIF
ENDFOR
FOR i = 1 TO 6
$ACC_EXTAX[i]=100提前运行中外部轴的加速度
$VEL_EXTAX[i]=100提前运行中外部轴的轴速度
ENDFOR
IF $ROB_CAL AND NOT pos_outofsoftend THEN
掌握所有机器人轴后,将设置此输出
asyptp zielpos 如果不超程执行PTP外部虚拟轴的实际位置
ENDIF
FctEnd:
ENDIF
END
设置额定位置有效
DEF SetSollpos(SollState : IN)
Bool SollState 激活位置有效
IF SollState THEN
$OUT[O_SZ1_SPos_g]=TRUE A716焊钳位置有效
$OUT[O_SZ2_SPos_g]=TRUE 二号钳位置有效
$OUT[O_SZ3_SPos_g]=TRUE 三号钳位置有效
IF MIT_NZ1_Serv THEN如果伺服有钉铆钳1
$OUT[O_NZ1_SPos_g]=TRUE位置有效
ENDIF
IF MIT_NZ2_Serv THEN如果伺服有钉铆钳2
$OUT[O_NZ2_SPos_g]=TRUE位置有效
ENDIF
IF MIT_CZ1_Serv THEN如果伺服无钉铆钳1
$OUT[O_CZ1_SPos_g]=TRUE位置有效
ENDIF
IF MIT_CZ2_Serv THEN如果伺服无钉铆钳2
$OUT[O_CZ2_SPos_g]=TRUE位置有效
ENDIF
ELSE没有激活位置有效 就关闭焊钳或铆钳的位置控制
$OUT[O_SZ1_SPos_g]=FALSE
$OUT[O_SZ2_SPos_g]=FALSE
$OUT[O_SZ3_SPos_g]=FALSE
IF MIT_NZ1_Serv THEN
$OUT[O_NZ1_SPos_g]=FALSE
ENDIF
IF MIT_NZ2_Serv THEN
$OUT[O_NZ2_SPos_g]=FALSE
ENDIF
IF MIT_CZ1_Serv THEN
$OUT[O_CZ1_SPos_g]=FALSE
ENDIF
IF MIT_CZ2_Serv THEN
$OUT[O_CZ2_SPos_g]=FALSE
ENDIF
ENDIF
END
;ENDFOLD
;
DEFFCTBOOL FctDestPos(SZNr:IN)反馈焊钳位置无效
INT SZNr
BOOL FctDestPosVal
SWITCH SZNr
CASE 1
FctDestPosVal=$IN[I_SZ1_F_Ziel] E773目标位置无效
CASE 2
FctDestPosVal=$IN[I_SZ2_F_Ziel]
CASE 3
FctDestPosVal=$IN[I_SZ3_F_Ziel]
CASE 4
FctDestPosVal=$IN[I_NZ1_F_Ziel]
CASE 5
FctDestPosVal=$IN[I_NZ2_F_Ziel]
CASE 6
FctDestPosVal=$IN[I_CZ1_F_Ziel]
CASE 7
FctDestPosVal=$IN[I_CZ2_F_Ziel]
ENDSWITCH
RETURN(FctDestPosVal)函数反馈值
ENDFCT
整体上说明当虚拟外部轴报滞后故障时,其主要是由软PLC的反馈点$softplcbool[5]来控制的.
;ENDFOLD
;ENDFOLD
审核编辑 :李倩
-
机器人
+关注
关注
211文章
28418浏览量
207076 -
程序
+关注
关注
117文章
3787浏览量
81037 -
焊钳
+关注
关注
0文章
16浏览量
1388
原文标题:KUKAC4机器人焊钳拉拽程序分析sg_fehler ()w
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论