桌面网站怎么做,淄博哪里有网站建设平台,外销网站,云服务器推荐start() begin//延时10秒 delay(5)//初始化变量call init()//清空原有运动堆栈resetMotion()//建立上电任务taskCreate robotpower,100,robotpower()wait(isPowered())//建立生产任务taskCreate ProductionCycle,10,ProductionCycle()//建立安全区域…start() begin//延时10秒 delay(5)//初始化变量call init()//清空原有运动堆栈resetMotion()//建立上电任务taskCreate robotpower,100,robotpower()wait(isPowered())//建立生产任务taskCreate ProductionCycle,10,ProductionCycle()//建立安全区域检测任务taskCreate CheckSafeArea,10,CheckSafeArea()//建立屏幕刷新任务taskCreate HMI,80,HMI()// //
endinit() begin_bPartReversefalse_bPartRightfalse_bCheckArrivedfalse_bStartCheckfalse_bSyncErrfalsedoERobotDonefalsedoEhomefalsedoERobotErrorfalseopen(tGripper)_nDifY0_nItem0sState已停止
endHMI() beginuserPage()//切换到用户屏幕cls()gotoxy(0,2)put(生产状态)gotoxy(0,4)put(工件序号)gotoxy(0,6)put(光电信号)gotoxy(0,8)put(正反检测)gotoxy(0,10)put(检测偏差)while true//刷新生产状态gotoxy(10,2)put( )gotoxy(10,2)put(sState)//刷新工件序号gotoxy(10,4)put( )gotoxy(10,4)put(toString(,_nItem1))//刷新激光传感器信号gotoxy(10,6)put( )if diFCheckSensortruegotoxy(10,6)put(ON)elsegotoxy(10,6)put(OFF)endIf//刷新正反向判断gotoxy(10,8)put( )if _bPartRightgotoxy(10,8)put(正向)elseIf _bPartReversegotoxy(10,8)put(反向)endIf//刷新检测偏差gotoxy(10,10)put( )gotoxy(10,10)put(toString(0.2,_nDifY)mm)delay(0)endWhile
endrobotpower() beginwhile true//控制器在远程模式// if (workingMode()4 or workingMode()1)if workingMode()4if !isPowered()enablePower()//控制器运行模式切换延时时间delay(1)wait(isPowered())endIfelseIf workingMode()1enablePower()//wait(isPowered())elseIf workingMode()2 or workingMode()3disablePower()doERobotDonefalseendIfdelay(0)endWhile
endProductionCycle() begin//开始回零//wait(diEPlcReadytrue or (workingMode()1 and isPowered()and delay(2)) or doEhometrue)wait(diEPlcReadytrue or doEhometrue or diEManualStarttrue)doERobotDonefalsesState回原点l_pHomejointToPoint(tGripper,world,jHome)l_pHerehere(tGripper,world)l_pHere.trsf.zmax(l_pHere.trsf.z,50)movel(l_pHere,tGripper,mSpeedL)movej(jHome,tGripper,mSpeedL)waitEndMove()open(tGripper)doEhometrue//循环生产while truecall Pallet()delay(0)endWhile
endCheckSafeArea() beginwhile truel_pHerehere(tGripper,world)if l_pHere.trsf.xnXLimitMax or l_pHere.trsf.xnXLimitMin or l_pHere.trsf.ynYLimitMax or l_pHere.trsf.ynYLimitMin// disablePower()stopMove()resetMotion()l_bAlarmtrueelsel_bAlarmfalseendIfif l_bAlarm and !l_bLastAlarmpopUpMsg(机器人超出安全工作空间)logMsg(机器人超出安全工作空间)endIfl_bLastAlarml_bAlarm//判断机器人是否在home位l_pHomejointToPoint(tGripper,world,jHome)if distance(l_pHere,l_pHome)5doEhometrueelsedoEhomefalseendIfdelay(0)endWhile
endPallet() begin//在进行开启/关闭阀门时//最好是使用waitendmove()等点到位以后再使用//wait(diEPlcDonetrue)//doERobotDonefalsewait(diEStarttrue or diEManualStarttrue)doERobotDonefalse//if !isPowered() //call start()//endIf//抓放循环5次for _nItem0 to 4//运动开始//wait(diEStarttrue or workingMode()1)//去取件sState取件中l_pPickApproappro(pPick[_nItem],{0,0,-nPickAppro,0,0,0})movej(l_pPickAppro,tGripper,mSpeedH)doEhomefalsemovel(pPick[_nItem],tGripper,mSpeedL)waitEndMove()close(tGripper)l_nMoveIDmovel(l_pPickAppro,tGripper,mSpeedL)//去检测wait(getMoveId()l_nMoveID0.5)sState检测中movej(pCheckReady,tGripper,mSpeedH)movel(pCheckStart,tGripper,mSpeedL)l_nMoveIDmovel(pCheckOver,tGripper,mSpeedLL)//开始检测激光传感器状态wait(getMoveId()l_nMoveID)// _bStartChecktrue// wait(_bCheckArrived)// _bCheckArrivedfalse// do// until (diFCheckSensorfalse)//传感器感应到后停止手臂运动清除运动指令//检测导光条的边缘若检测不到信号则报警if watch(diFCheckSensorfalse,3)falsesState无导光条doERobotErrortruestopMove()resetMotion()wait(diEResettrue)doERobotErrorfalse//PLC复位后给出回原信号机械手回原wait(diEPlcReadytrue)doERobotDonefalsedoERobotErrorfalsesState回原点l_pHomejointToPoint(tGripper,world,jHome)l_pHerehere(tGripper,world)l_pHere.trsf.zmax(l_pHere.trsf.z,50)movel(l_pHere,tGripper,mSpeedL)movej(jHome,tGripper,mSpeedL)waitEndMove()open(tGripper)doEhometruereturnendIfstopMove()resetMotion()//检测到导光条外部绿灯亮doESensor!diFCheckSensor//delay(0.5)//计算工件Y向位置偏差l_pHerehere(tGripper,world)_nDifYl_pHere.trsf.y-pCheckMark.trsf.y//向上提起判断正反向l_pCheckRightl_pHere//向上提起到pCheckUp的高度l_pCheckRight.trsf.zpCheckUp.trsf.z//向里伸入0.2mml_pCheckRight.trsf.yl_pHere.trsf.y0.2movel(l_pCheckRight,tGripper,mSpeedL)waitEndMove()//延时检测delay(0.1)//如果光电感应不到判断为正向,并计算调整后的放件位置if diFCheckSensortrue_bPartRighttrue_bPartReversefalse//l_pPlacecompose(pPlace[0,_nItem],fPlacePallet,{0,_nDifY,0,0,0,0})l_pPlaceappro(pPlace[0,_nItem],{-_nDifY,0,0,0,0,0})//否则为反向,并计算调整后的放件位置else_bPartRightfalse_bPartReversetrue//l_pPlacecompose(pPlace[1,_nItem],fPlacePallet,{0,-_nDifY,0,0,0,0})l_pPlaceappro(pPlace[1,_nItem],{-_nDifY,0,0,0,0,0})endIf//向上提起离开检测区l_pCheckApproappro(l_pCheckRight,{0,0,-20,0,0,0})movel(l_pCheckAppro,tGripper,mSpeedL)if _bPartRightl_nMoveIDmovej(pCheckReady,tGripper,mSpeedH)elsel_nMoveIDmovej(jhomen,tGripper,mSpeedH)endIfwaitEndMove()//去放件wait(getMoveId()l_nMoveID0.3)sState放件中//外部绿灯灭doESensorfalse//去放件准备位l_pPlaceApproappro(l_pPlace,{0,0,-nPlaceAppro,0,0,0})movej(l_pPlaceAppro,tGripper,mSpeedH)//根据压入深度计算压入点l_pPressappro(l_pPlace,{0,0,nPressDeepth,0,0,0})//计算压入准备位在压入点上方nPressAppro高角度与放件位相同。l_pPressApproappro(l_pPress,{0,0,-nPressAppro,0,0,0})//到压入准备位,打开夹爪movel(l_pPressAppro,tGripper,mSpeedL)waitEndMove()open(tGripper)//延时nPressDelay s,保证夹爪已打开delay(nPressDelay)//压入卡槽movel(l_pPress,tGripper,mSpeedL)//回准备位l_nMoveIDmovel(l_pPlaceAppro,tGripper,mSpeedL)wait(getMoveId()l_nMoveID0.5)_bPartReversefalse_bPartRightfalsedelay(0)endFor//放件完成回原点,发送完成信号sState回原点movej(jHome,tGripper,mSpeedH)waitEndMove()doERobotDonetrue// delay(10)
end