机械手自动化程序
机械手工件搬运PLC顺控程序

机械手工件搬运PLC顺控程序机械手工件搬运PLC顺控程序是一种自动化工艺,用于控制和协调机械手和工业车间中的其他设备,以完成物料和零件的搬运。
PLC(可编程逻辑控制器)是这个系统的核心部分,它包含了一个程序,用于控制机械手的动作,并协调搬运过程中的其他元素,例如输送带、传送机和各种传感器。
该系统的主要应用场景是工业生产线,例如汽车、电子和五金制品制造厂等。
其中最大的优点是实现了高效率、高精度和高质量的生产流程。
本文将深入探讨机械手工件搬运PLC顺控程序的构成、原理和应用,以帮助读者更好地理解和应用这个自动化系统。
1. 构件机械手工件搬运PLC顺控程序由以下四个构件组成:机械手、输送带、传送机和PLC控制器。
机械手是核心部件,它包括一个控制系统和一系列从动部件。
控制系统通常由一个工控机和一个专用的PLC控制器组成,它们负责控制机械手的动作,并与其他设备协调工作。
输送带和传送机是用来传输工件和零件的,通常安装在生产线上。
输送带通常是一条长度较长的带式输送机,由电机驱动,可在两端控制速度和停止运行。
传送机通常是一个类似于传送带的机械臂,负责在不同的生产器件之间传输物品。
这两个设备都配备了传感器,用于激活PLC控制器,以便向机械手指示何时进行抓取和卸载操作。
PLC控制器是整个系统的核心,由一个或多个微处理器组成。
它与机械手、输送带和传送机之间建立通信网络,以便管理工作流程,并实现自动化操作。
因为PLC控制器是可编程的,它可以根据需要进行定制操作,满足不同的生产要求。
2. 工作原理该系统的工作过程如下:- 首先,工件或零件通过输送带或传送机传输到机械手前方,触发传感器。
- 传感器激活PLC控制器,PLC控制器发送信号到机械手,让机械手开始运作。
- 机械手进行抓取动作,把工件从输送带或传送机上抓取下来。
- 机械手在特定的位置上停止,等待PLC控制器发送下一道指令。
- PLC控制器向机械手发送下一道指令,指示机械手如何移动或卸载工件。
简易机械手PLC控制

简易机械手PLC控制简介在制造业中,机械手是一种关键的工业自动化设备,用于处理和搬运物品。
机械手的控制非常重要,它决定了机械手的精度和效率。
PLC (可编程逻辑控制器)是一种常用的控制设备,它可以编程来控制机械手的运动和动作。
本文将介绍如何使用PLC控制一个简易机械手的运动。
所需硬件和软件•一台简易机械手•一个PLC设备•一个用于编程的PLC软件步骤步骤一:连接PLC设备和机械手首先,将PLC设备连接到机械手控制器上。
确保连接正确,以便PLC能够发送指令给机械手控制器。
步骤二:安装PLC软件并编程在电脑上安装PLC软件,并启动软件。
创建一个新的项目,并选择适当的PLC类型和通信配置。
然后,开始编程。
步骤三:设置输入输出(IO)点在PLC软件中,设置适当的输入输出(IO)点,以接受和发送信号。
例如,设置一个输入点来接收机械手的位置信号,以便PLC可以确定机械手的当前位置。
同时,设置一个输出点来发送控制信号给机械手,以控制它的动作。
步骤四:编写程序逻辑使用PLC软件编写机械手的控制程序。
根据机械手的需求,编写逻辑来控制机械手的运动和动作。
例如,如果机械手需要抓取一个物体并将其放置到另一个位置,那么编程逻辑应该包括机械手的移动和抓取指令。
确保编写的逻辑合理且有效。
步骤五:测试和调试在PLC软件中,模拟机械手的动作并进行测试。
确保PLC能够正确地控制机械手的运动。
如果发现错误或问题,进行调试并修正程序逻辑。
步骤六:上传程序到PLC当测试和调试完成后,将编写的程序上传到PLC设备中。
确保上传的程序可以在PLC上正确运行。
步骤七:运行机械手一切准备就绪后,运行机械手。
PLC将根据编写的逻辑控制机械手的运动和动作。
结论使用PLC控制机械手是一种常见的工业自动化方法。
通过编写合理的程序逻辑,PLC可以控制机械手的运动和动作,提高生产效率和精度。
希望本文能够帮助读者了解如何使用PLC控制简易机械手。
机械手自动操作控制的PLC程序设计

中北大学信息商务学院课程设计说明书学生姓名:学号:系:机械自动化系专业:机械设计制造及其自动化题目:数控技术课程设计——机械手自动操作控制的PLC程序设计指导教师:职称:职称:2016年12月5日中北大学信息商务学院课程设计任务书2016/2017 学年第 1 学期所在系:机械工程系专业:机械设计制造及其自动化学生姓名:学号:课程设计题目:数控技术课程设计—机械手自动操作控制的PLC程序设计起迄日期:2016年12月5日~2016年12月9日课程设计地点:中北大学信息商务学院指导教师:系主任:暴建岗下达任务书日期: 2016 年12月 5日课程设计任务书1.设计目的:通过对机械手自动操作控制的PLC程序设计,使学生在熟练机械手的动作顺序与原理的基础上,学会应用PLC。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):机械手将工件从A工作台搬到B工作台。
机械手的工作过程由8个动作完成一个循环,如图所示。
取放工件的上升/下降和左移/右移分别用YV1、YV3、YV4和YV5控制,夹具的夹紧和放松由电磁阀YV2控制。
当工件搬到B工作台返回时,用光电开关SQ7发出无工件信号。
(1)采用内部移位寄存器M100~ M117逐位输出方式实现顺序控制,移位条件是对各限位开关(SQ1~SQ6)的状态检测来决定。
(2)夹紧或放松动作,分别用定时器T450、T451延时控制。
(3)采用具有保持功能的辅助继电器M202驱动夹紧阀。
通过本课程设计,完成①输入输出信号分析与PLC I/O分配图②PLC选型③主要元器件型号的选择④主接线图设计⑤完成梯形图设计并完成相应指令。
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:目录1机械手的工作原理1.1 机械手的概述 (1)1.2 机械手的工作方式 (2)2机械手控制程序设计2.1 输入和输出点分配表及原理接线图 (3)2.2 控制程序 (4)3梯形图及指令表3.1 梯形图 (9)3.2 指令表 (11)总结 (13)参考文献 (14)附录 (15)1机械手的工作原理1.1机械手的概述能模仿人手和臂的某些动作功能,用以按固定程序抓取、搬运物件或操作工具的自动操作装置。
机械手自动操作控制的PLC程序设计

中北大学信息商务学院课程设计说明书学生姓名: 学号:系: 机械自动化系专业: 机械设计制造及其自动化题目: 数控技术课程设计——机械手自动操作控制的PLC程序设计指导教师:职称:职称:2016年12月5日中北大学信息商务学院课程设计任务书2016/2017 学年第 1 学期所在系: 机械工程系专业: 机械设计制造及其自动化学生姓名: 学号:课程设计题目: 数控技术课程设计—机械手自动操作控制的PLC程序设计起迄日期: 2016年12月5日~2016年12月9日课程设计地点: 中北大学信息商务学院指导教师:系主任: 暴建岗下达任务书日期: 2016 年12月 5日课程设计任务书机械手将工件从A工作台搬到B工作台。
机械手的工作过程由8个动作完成一个循环,如图所示。
取放工件的上升/下降与左移/右移分别用YV1、YV3、YV4与YV5控制,夹具的夹紧与放松由电磁阀YV2控制。
当工件搬到B工作台返回时,用光电开关SQ7发出无工件信号。
(1)采用内部移位寄存器M100~ M117逐位输出方式实现顺序控制,移位条件就是对各限位开关(SQ1~SQ6)的状态检测来决定。
(2)夹紧或放松动作,分别用定时器T450、T451延时控制。
(3)采用具有保持功能的辅助继电器M202驱动夹紧阀。
通过本课程设计,完成①输入输出信号分析与PLC I/O分配图②PLC选型③主要元器件型号的选择④主接线图设计⑤完成梯形图设计并完成相应指令。
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:要求独立完成机械手自动操作控制的PLC程序设计,包括程序的编制与调试,并根据规定格式完成课程设计说明书的撰写。
4.主要参考文献:按国标GB 7714—87《文后参考文献著录规则》书写:1. 廖常初,FX系列PLC编程的应用.北京:机械工业出版社,2005、42. 范永胜,王岷.电气控制与PLC应用.北京:中国电力出版社,20073. 齐从谦,王士兰.PLC技术及应用.北京:机械工业出版社,2000、8目录1机械手的工作原理1、1 机械手的概述 (1)1、2 机械手的工作方式 (2)2机械手控制程序设计2、1 输入与输出点分配表及原理接线图 (3)2、2 控制程序 (4)3梯形图及指令表3、1 梯形图 (9)3、2 指令表 (11)总结 (13)参考文献 (14)附录 (15)1机械手的工作原理1.1机械手的概述能模仿人手与臂的某些动作功能,用以按固定程序抓取、搬运物件或操作工具的自动操作装置。
涂装机械手自动化系统操作流程

涂装机械手自动化系统操作流程涂装机械手自动化系统是现代工业生产中广泛应用的一种设备,它能够实现物体的自动喷涂,提高生产效率和涂装质量。
为了正确操作涂装机械手自动化系统,以下是一个操作流程的示例。
一、准备工作1.1 确认涂装机械手自动化系统的工作状态。
检查机械手的电源是否正常,各个传感器和控制器是否运行正常。
1.2 检查涂装设备的涂料和溶剂是否充足,以及喷枪是否处于良好状态。
1.3 穿戴个人防护装备,包括工作服、手套、护目镜等,确保工作安全。
二、机械手程序操作2.1 打开涂装机械手自动化系统的主控制面板,并输入访问密码。
2.2 选择涂装程序,通常涂装机械手会有多个预设程序可供选择,根据具体涂装要求进行选择。
2.3 检查涂装路径和喷枪位置。
根据工件形状和涂装要求,设定机械手的路径和喷枪的位置。
2.4 调整喷枪参数。
根据具体涂料和工件要求,调整喷枪的喷涂压力、喷涂速度和喷涂距离等参数。
2.5 启动涂装机械手。
确认一切准备就绪后,启动涂装机械手进行自动涂装操作。
三、涂装过程监控3.1 监控涂装质量。
通过远程监控系统或观察操作面板,实时检查涂装质量,确保涂装效果符合要求。
3.2 检查涂料和溶剂消耗情况。
根据涂料和溶剂的消耗情况,及时补充或更换涂料和溶剂,保证涂装生产的连续性。
3.3 定期检查设备状态。
在涂装机械手自动化系统运行过程中,定期检查机械手、传感器和控制器的状态,及时发现和处理故障。
四、涂装操作完成4.1 停止涂装机械手。
在涂装任务完成后,及时停止涂装机械手,确保安全。
4.2 清洁涂装设备。
对喷枪、喷嘴等涂装设备进行清洁,以保证下次使用时的正常工作。
4.3 关闭涂装机械手自动化系统。
关闭涂装机械手自动化系统的主控制面板,并进行必要的系统维护工作。
总结:涂装机械手自动化系统操作流程的正确执行可以保证涂装质量和工作效率的提高。
在操作前需要确保准备工作的充分,包括检查设备状态、准备涂料和个人防护装备等。
epson机械手程序讲解

epson机械手程序讲解Epson机械手程序讲解Epson机械手是一种先进的自动化设备,广泛应用于工业生产线上。
它的功能强大,可以完成各种复杂的任务,如搬运、装配和焊接等。
今天,我将为大家详细介绍Epson机械手的工作原理和程序控制。
我们来了解一下Epson机械手的结构。
它由基座、臂、手和手指组成。
基座固定在工作台上,臂连接在基座上,并可以在三个方向上移动。
手则连接在臂的末端,并具有多个关节,使机械手可以灵活地移动和旋转。
手指用于抓取物体,具有可调节的力量和灵敏度。
Epson机械手的程序控制是通过编程实现的。
在编写程序之前,我们首先需要对任务进行分析和规划。
然后,我们可以使用Epson机械手的编程软件来编写程序。
编程软件提供了一系列的指令,可以控制机械手的各种动作,如移动、旋转和抓取等。
在编写程序时,我们需要考虑机械手的安全性和效率。
为了确保机械手的安全操作,我们需要设置一些限制条件,如最大速度和力量。
此外,我们还可以使用传感器来检测环境和物体,以避免碰撞和损坏。
一旦程序编写完成,我们就可以将其加载到机械手的控制器中。
控制器是机械手的"大脑",负责解析和执行程序。
一旦程序开始执行,机械手将按照指定的路径和动作进行操作。
通过不断的反馈和调整,机械手可以高效地完成任务。
Epson机械手的运行速度和精度非常高,可以大大提高生产效率和质量。
它可以在短时间内完成大量的工作,而且准确无误。
与传统的人工操作相比,机械手可以减少人力成本和劳动强度,并提高工作环境的安全性。
总结一下,Epson机械手是一种功能强大的自动化设备,可以完成各种复杂的任务。
通过编写程序和控制器的实施,机械手可以高效地工作,并提高生产效率和质量。
它为工业生产线带来了巨大的改变,使生产过程更加安全、快速和精确。
相信随着技术的不断发展,Epson机械手将会在更多领域得到应用。
机械手的程序设计

机械手的程序设计机械手是一种自动化装置,广泛应用于工业生产线、仓储物流等领域。
机械手的程序设计是指为机械手设定一系列的动作和任务,以实现特定的功能和工作流程。
本文将介绍机械手程序设计的基本原理和步骤。
一、机械手程序设计的基本原理机械手程序设计基于控制系统来实现。
控制系统包括硬件设备和软件程序两部分。
硬件设备主要包括机械手臂、传感器、执行器等,而软件程序则负责控制硬件设备的运作。
机械手程序设计的基本原理是将任务分解为一系列的运动和动作,并将其编程到机械手的控制系统中。
机械手可以通过各种传感器获取输入信号,并根据预先编写的程序进行相应的动作。
程序设计需要考虑到机械手的结构特点、工作环境以及任务需求,以保证机械手的安全性和工作效率。
二、机械手程序设计的步骤1. 分析任务需求:首先,需要对机械手的任务需求进行详细的分析和了解。
这包括任务的性质、工作空间的要求、物体的尺寸和重量等。
只有清楚了解任务需求,才能更好地进行程序设计。
2. 设计动作序列:根据任务需求,设计机械手的动作序列。
动作序列是指机械手需要执行的一系列动作和运动。
可以根据实际情况将任务分解为多个子任务,并设计相应的动作序列。
3. 编写程序代码:根据设计的动作序列,编写程序代码。
程序代码需要根据机械手控制系统的编程语言和平台来编写。
常用的编程语言包括C++、Python等。
4. 调试和优化:完成程序编写后,需要对程序进行调试和优化。
通过调试和测试可以发现和解决程序中的错误和问题,并对程序进行优化,提高机械手的工作效率和稳定性。
5. 上机验证和应用:在调试和优化完成后,将程序加载到机械手的控制系统中,并进行实际的上机验证和应用。
根据实际情况对程序进行进一步的调整和改进,以满足任务需求。
三、机械手程序设计的挑战和解决方案1. 运动规划:机械手的运动规划是程序设计的核心问题。
机械手的运动规划需要考虑到物体的位置、运动轨迹、碰撞检测等因素,以实现精确的动作控制。
机械手的PLC控制程序

机械手的PLC控制程序摘要本设计利用PLC控制程序调试,能够完成机械手的下降,夹紧,上升,右移,下降,松开,上升,左移等一系列的动作,完全符合现实工业生产的需要,经触摸屏模拟调试效果良好,其连续性运行或手动的操作都符合要求,整个程序符合自动化的生产的要求。
本文配有动作示意图,I/O分配表,I/O连接图,梯形图和触摸屏画面,同时有程序的详细分析。
关键词:机械手;自动化;可编程控制器PLC;触摸屏目录摘要 (1)1. 概述 (4)2. 控制要求 (4)2.1. I/O连接图 (5)2.2. 程序解释 (6)2.3. 完整梯形图如下所示 (11)2.4. 触摸屏画面 (14)3. PLC应注意的问题及解决方法 (15)3.1工作环境 (15)3.1.1 温度 (15)3.1.2 湿度 (15)3.1.3 震动 (15)3.2 空气 (15)3.3安装与布线 (16)3.4 外部安全 (16)3.5 PLC的接地 (16)4.结束语 (16)5.参考文献 (16)1.概述机电一体化在各个领域的应用,机械设备的自动控制成分显来越来越重要,大机械手是一种模仿人体上肢运动的机器,它能按照预定要求输送工种或握持工具进行操作的自动化技术设备,对实现工业生产自动化,推动工业生产的进一步发展起着重要作用。
本设计采用PLC作为控制机对工业机械手进行控制及监控。
它能按照生产工艺的要求,遵循一定的程序、时间和位置来完成工件的传送和装卸,从而大大改善工人的劳动条件,显著地提高劳动生产率工业机械手可以代替人手的繁重劳动,显著减轻工人的劳动强度,提高劳动生产率和自动化水平。
2.控制要求如图所示是一台机械手传送工件机械运动状态示意图,其作用是将工件从A点传递到B点。
机械手的初始置位停在原点,按下启动后按钮后,机械手将下降—夹紧工件延时2秒-上升-右移-再下降-放松工件延时2秒-再上升-左移完成一个工作周期。
机械手的下降、上升、右移、左移等动作转换,是由相应的动作开关来控制的,而夹紧和放松的转换是有时间来控制的气动机械手的升降和左右移行作分别由两个具有双线圈的两位电磁阀驱动气缸来完成,其中下降与上升对应电磁阀的线圈分别为YV3与YV1,右行、左行对应电磁阀的线圈分别为YV2与YV4。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、主程序main&ACCESS RVP1&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF Pro_main( )INT l;FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI)GLOBAL INTERRUPT DECL 4 WHEN $IN[10]==FALSE DO Itrpt1 ()GLOBAL INTERRUPT DECL 5 WHEN $IN[11]==FALSE DO Itrpt1 ()INTERRUPT DECL 6 WHEN $IN[9]==TRUE DO Itrpt1 ();地轨异常进入中断INTERRUPT ON 6;开地轨监视中断6IF NOT Gripper_ChkStatus(1,"C") THENGripper_SetStatus(1,"O")Part0InLeft = FALSEPart2InLeft = FALSEENDIFIF NOT Gripper_ChkStatus(2,"C") THENGripper_SetStatus(2,"O")Part1InRight = FALSEENDIFFOR l = 1 TO 14$OUT[l] = FALSEENDFOR;此循环语句在初始化时把所有端口清零复位。
IF $IN[5] THENMachine1_OnlyDrop = TRUEMachine2_OnlyDrop = TRUE;机台1有首件信号时,机台1与机台2第一次响应只放标志位置1 ELSEMachine1_OnlyDrop = FALSEMachine2_OnlyDrop = FALSEENDIF$FLAG[8]=FALSE;FLAG[8]是干什么用的?;ENDFOLD (INI);初始化完成$OV_PRO=70;限定系统运行速度;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDIF $IN_HOME THEN$OUT[5]=FALSE$OUT[8]=FALSE$OUT[11]=FALSEENDIFLOOPWAIT SEC 0.05IF $IN[1] AND NOT Part0InLeft AND Gripper_ChkStatus(3,"O") THEN ToPick_Search()ENDIFIF Part0InLeft AND ($IN[3] OR Machine1_OnlyDrop) AND Gripper_ChkStatus(1,"C") AND Gripper_ChkStatus(2,"O") THENMachine1()ENDIFIF Part1InRight AND ($IN[6] OR Machine2_OnlyDrop) AND Gripper_ChkStatus(2,"C") AND Gripper_ChkStatus(1,"O") THENMachine2()ENDIFIF Part2InLeft AND ($IN[8] OR Machine3_OnlyDrop) AND Gripper_ChkStatus(1,"C") THENMachine3()ENDIFENDLOOPENDDEF Itrpt1 ()HALTBRAKEEND2、取料程序(采用中断的方法自动探料,完成取料作业)&ACCESS RVO2&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF ToPick_Search( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( );单独用了一个系统中断?INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)INTERRUPT DECL 1 WHEN $IN[10]==TRUE DO FOUND()SevenAxis_Run(1)GOTO MARK;FOLD PTP P1 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT2$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD;FOLD PTP P3 CONT Vel=100 % PDAT8 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P3, 3:C_DIS, 5:100, 7:PDAT8$BWDSTART=FALSEPDAT_ACT=PPDAT8FDAT_ACT=FP3BAS(#PTP_PARAMS,100)PTP XP3 C_DIS;ENDFOLD;FOLD LIN P2 CONT Vel=2 m/s CPDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:2, 7:CPDAT2$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P1 Vel=0.05 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P1, 3:, 5:0.05, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP1BAS(#CP_PARAMS,0.05)LIN XP1;ENDFOLD;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDmark:Search()INTERRUPT OFF 1WAIT SEC 0XP4=$POS_ACT;FOLD LIN P4 CONT Vel=2 m/s CPDAT10 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P4, 3:C_DIS C_DIS, 5:2, 7:CPDAT10$BWDSTART=FALSELDAT_ACT=LCPDAT10FDAT_ACT=FP4BAS(#CP_PARAMS,2)LIN XP4 C_DIS C_DIS;ENDFOLDGripper_SetStatus(1,"O")LIN_REL{Z 15}LIN_REL{Z -17}Gripper_SetStatus(1,"C")Part0InLeft = TRUEWAIT SEC 0XP0=$POS_ACTXP0.Z=XP0.Z+25 ;看一下寻料程序到底是怎么运转的!;FOLD LIN P0 CONT Vel=0.025 m/s CPDAT8 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P0, 3:C_DIS C_DIS, 5:0.025, 7:CPDAT8$BWDSTART=FALSELDAT_ACT=LCPDAT8FDAT_ACT=FP0BAS(#CP_PARAMS,0.025)LIN XP0 C_DIS C_DIS;ENDFOLDWAIT SEC 0IF NOT $IN[10] THENGOTO markENDIF;FOLD LIN P1 CONT Vel=2 m/s CPDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P1, 3:C_DIS C_DIS, 5:2, 7:CPDAT7$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP1BAS(#CP_PARAMS,2)LIN XP1 C_DIS C_DIS;ENDFOLDENDDEF Search( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)INTERRUPT ON 1;FOLD PTP P1 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD$OUT[16]=TRUE;FOLD LIN P3 CONT Vel=2 m/s CPDAT11 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:C_DIS C_DIS, 5:2, 7:CPDAT11$BWDSTART=FALSELDAT_ACT=LCPDAT11FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3 C_DIS C_DIS;ENDFOLD;FOLD LIN P2 CONT Vel=0.05 m/s CPDAT5 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:0.05, 7:CPDAT5$BWDSTART=FALSELDAT_ACT=LCPDAT5FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P1 Vel=0.02 m/s CPDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P1, 3:, 5:0.02, 7:CPDAT6$BWDSTART=FALSELDAT_ACT=LCPDAT6FDAT_ACT=FP1BAS(#CP_PARAMS,0.02)LIN XP1;ENDFOLDWAIT SEC 0ENDDEF FOUND()BRAKELIN $POS_INT ;rise a littleRESUMEEND3、机台1取放料程序(完成机台1取放料动作与信号交互)&ACCESS RVO2&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF Machine1( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)SevenAxis_Run(1);FOLD OUT 5 '' State=TRUE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:5, 3:, 5:TRUE, 6: $OUT[5]=TRUE;ENDFOLDIF NOT Machine1_OnlyDrop THEN;FOLD PTP P1 CONT Vel=100 % PDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT4$BWDSTART=FALSEPDAT_ACT=PPDAT4FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLDmark:;FOLD LIN P2 CONT Vel=2 m/s CPDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:2, 7:CPDAT4$BWDSTART=FALSELDAT_ACT=LCPDAT4FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P3 CONT Vel=2 m/s CPDAT5 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:C_DIS C_DIS, 5:2, 7:CPDAT5$BWDSTART=FALSELDAT_ACT=LCPDAT5FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3 C_DIS C_DIS;ENDFOLDGripper_SetStatus(2,"C")LIN_REL{Z 7.5}Gripper_SetStatus(2,"O");FOLD LIN P3 Vel=2 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:2, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(2,"C")Part1InRight = TRUE;FOLD LIN P2 Vel=0.05 m/s CPDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:, 5:0.05, 7:CPDAT6$BWDSTART=FALSELDAT_ACT=LCPDAT6FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2;ENDFOLDIF NOT $IN[11] THENGOTO markENDIF;FOLD PTP P4 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P4, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel=100 % PDAT10 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT10$BWDSTART=FALSEPDAT_ACT=PPDAT10FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT8 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT8$BWDSTART=FALSEPDAT_ACT=PPDAT8FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT7$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(1,"O");FOLD PTP P6 CONT Vel=100 % PDAT14 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT14$BWDSTART=FALSEPDAT_ACT=PPDAT14FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT9 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT9$BWDSTART=FALSEPDAT_ACT=PPDAT9FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDELSE;FOLD PTP P5 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT2$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT13 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT13$BWDSTART=FALSEPDAT_ACT=PPDAT13FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT9 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT9$BWDSTART=FALSELDAT_ACT=LCPDAT9FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(1,"O");FOLD PTP P6 Vel=100 % PDAT12 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:, 5:100, 7:PDAT12$BWDSTART=FALSEPDAT_ACT=PPDAT12FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT7$BWDSTART=FALSEPDAT_ACT=PPDAT7FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDMachine_Start(1);FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDENDIFIF Machine1_OnlyDrop THENMachine1_OnlyDrop = FALSEENDIFMachine_Start(1)END4、机台2取放料程序(完成机台2取放料动作与信号交互)&ACCESS RV2&REL 6&PARAM DISKPATH = KRC:\R1\ProgramDEF Machine2();FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)PTP $POS_ACTSevenAxis_Run(2);FOLD OUT 8 '' State=TRUE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:8, 3:, 5:TRUE, 6: $OUT[8]=TRUE;ENDFOLDIF NOT Machine2_OnlyDrop THEN;FOLD PTP P1 CONT Vel=100 % PDAT3 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT3$BWDSTART=FALSEPDAT_ACT=PPDAT3FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLDmark:;FOLD PTP P2 CONT Vel=100 % PDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P2, 3:C_DIS, 5:100, 7:PDAT4$BWDSTART=FALSEPDAT_ACT=PPDAT4FDAT_ACT=FP2BAS(#PTP_PARAMS,100)PTP XP2 C_DIS;ENDFOLD;FOLD LIN P3 Vel=2 m/s CPDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:2, 7:CPDAT4$BWDSTART=FALSELDAT_ACT=LCPDAT4FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(1,"C")LIN_REL{Z 7.5}Gripper_SetStatus(1,"O");FOLD LIN P3 Vel=2 m/s CPDAT0 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:2, 7:CPDAT0$BWDSTART=FALSELDAT_ACT=LCPDAT0FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(1,"C")Part2InLeft = TRUE;FOLD LIN P2 CONT Vel=0.05 m/s CPDAT3 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:0.05, 7:CPDAT3$BWDSTART=FALSELDAT_ACT=LCPDAT3FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2 C_DIS C_DIS;ENDFOLDIF NOT $IN[10] THENGOTO markENDIF;FOLD PTP P4 CONT Vel=100 % PDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P4, 3:C_DIS, 5:100, 7:PDAT7$BWDSTART=FALSEPDAT_ACT=PPDAT7FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel=100 % PDAT14 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT14$BWDSTART=FALSEPDAT_ACT=PPDAT14FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT9 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT9$BWDSTART=FALSEPDAT_ACT=PPDAT9FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT7$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(2,"O");FOLD PTP P6 CONT Vel=100 % PDAT11 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT11$BWDSTART=FALSEPDAT_ACT=PPDAT11FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT12 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT12$BWDSTART=FALSEPDAT_ACT=PPDAT12FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDELSE;FOLD PTP P5 CONT Vel=100 % PDAT13 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT13$BWDSTART=FALSEPDAT_ACT=PPDAT13FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT1$BWDSTART=FALSEPDAT_ACT=PPDAT1FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(2,"O");FOLD LIN P6 CONT Vel=2 m/s CPDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P6, 3:C_DIS C_DIS, 5:2, 7:CPDAT2$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP6BAS(#CP_PARAMS,2)LIN XP6 C_DIS C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDMachine_Start(2);FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:,5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDENDIFIF Machine2_OnlyDrop THENMachine2_OnlyDrop = FALSEENDIFMachine_Start(2)END5、机台3取放料程序(完成机台3取放料动作与信号交互)&ACCESS RVP1&REL 6DEF Machine3( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI)WAIT FOR $FLAG[1]$FLAG[8]=TRUE;ENDFOLD (INI)PTP $POS_ACTSevenAxis_Run(3);FOLD OUT 11 '' State=TRUE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:11, 3:, 5:TRUE, 6: $OUT[11]=TRUE;ENDFOLD;FOLD PTP P1 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD;FOLD PTP P2 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P2, 3:C_DIS, 5:100, 7:PDAT2$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP2BAS(#PTP_PARAMS,100)PTP XP2 C_DIS;ENDFOLD;FOLD LIN P3 Vel=0.25 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:0.25, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP3BAS(#CP_PARAMS,0.25)LIN XP3;ENDFOLDGripper_SetStatus(1,"O");FOLD LIN P2 CONT Vel=2 m/s CPDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:2, 7:CPDAT2$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD PTP P4 CONT Vel=100 % PDAT3 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P4, 3:C_DIS, 5:100, 7:PDAT3$BWDSTART=FALSEPDAT_ACT=PPDAT3FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel=100 % PDAT5 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT5$BWDSTART=FALSEPDAT_ACT=PPDAT5FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLDMachine_Start(3);FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLD$TIMER_STOP[1]=FALSEIF $TIMER[1]>0 THEN$TIMER_STOP[1]=TRUEENDIFIF Machine3_OnlyDrop THENMachine3_OnlyDrop = FALSEENDIFCount_Part=Count_Part+1IF Count_Part>=40 THENCount_Part=0SevenAxis_Run(4)WAIT SEC 0.1ENDIFEND6、地轨运动程序(完成与地轨信号交互及运动交互)&ACCESS RV2&REL 8&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabeDEF SevenAxis_Run(Num:IN)INT NumSWITCH NumCASE 1;FOLD PULSE 1 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:1, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[1], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT FOR $IN[2]$OUT[1] = FALSE$OUT[14] = FALSECASE 2;FOLD PULSE 2 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:2, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[2], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[2] = FALSE$OUT[14] = FALSECASE 3;FOLD PULSE 3 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:3, 3:, 5:TRUE,6:, 8:1PULSE($OUT[3], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[3] = FALSE$OUT[14] = FALSECASE 4;FOLD PULSE 4 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:4, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[4], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[4] = FALSE$OUT[14] = FALSEDEFAULTMsgQuit("Error")ENDSWITCHEND7、机台启动控制程序(完成机台启动,取消工作中信号给开始加工信号)&ACCESS RV2&REL 3&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabeDEF Machine_Start(Num:IN)INT NumSWITCH NumCASE 1;FOLD OUT 5 '' State=FALSE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:5, 3:, 5:FALSE, 6: $OUT[5]=FALSE;ENDFOLD;FOLD PULSE 6 '' State=TRUE Time=0.5 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:6, 3:, 5:TRUE, 6:, 8:0.5PULSE($OUT[6], TRUE,0.5);ENDFOLDCASE 2;FOLD OUT 8 '' State=FALSE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:8, 3:, 5:FALSE, 6: $OUT[8]=FALSE;ENDFOLD;FOLD PULSE 9 '' State=TRUE Time=0.5 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:9, 3:, 5:TRUE, 6:, 8:0.5PULSE($OUT[9], TRUE,0.5);ENDFOLDCASE 3;FOLD OUT 11 '' State=FALSE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:11, 3:, 5:FALSE, 6: $OUT[11]=FALSE;ENDFOLD;FOLD PULSE 12 '' State=TRUE Time=0.5 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:12, 3:, 5:TRUE, 6:, 8:0.5PULSE($OUT[12], TRUE,0.5);ENDFOLDDEFAULTMsgQuit("Error")ENDSWITCHEND8、手爪控制程序(完成对手爪的控制)手爪1控制点位为OUT[16],对应检测为IN[10],对应中断4手爪2控制点位为OUT[15],对应检测为IN[11],对应中断5&ACCESS RV2&REL 50&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabeDEF Gripper_SetStatus(Num:IN,Status:IN)INT NumCHAR StatusSWITCH NumCASE 1SWITCH StatusCASE "O"IF NOT $T1 THENINTERRUPT OFF 4ENDIF$OUT[16] = FALSEWAIT SEC 0.3WAIT FOR NOT $IN[10]Part0InLeft = FALSEPart2InLeft = FALSECASE "C"IF NOT $T1 THENINTERRUPT ON 4ENDIF$OUT[16] = TRUEWAIT SEC 0.5WAIT FOR $IN[10]DEFAULTMsgQuit("Element Error")ENDSWITCHCASE 2SWITCH StatusCASE "O"IF NOT $T1 THENINTERRUPT OFF 5ENDIFINTERRUPT OFF 89$OUT[15] = FALSEWAIT SEC 0.3WAIT FOR NOT $IN[11]Part1InRight = FALSECASE "C"IF NOT $T1 THENINTERRUPT ON 5ENDIF$OUT[15] = TRUEWAIT SEC 0.5WAIT FOR $IN[11]Part1InRight = TRUEDEFAULTMsgQuit("Element Error")ENDSWITCHDEFAULTMsgQuit("Element Error")ENDSWITCHEND9、手爪真空检测(完成对掉料状况的检测)&ACCESS RV2&REL 10&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\FunctionVorgabe DEFFCT BOOL Gripper_ChkStatus(Num:IN,Status:IN)INT NumCHAR StatusSWITCH NumCASE 1SWITCH StatusCASE "O"IF NOT $OUT[16] AND NOT $IN[10] THENRETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[16] AND $IN[10] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHCASE 2SWITCH StatusCASE "O"IF NOT $OUT[15] AND NOT $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[15] AND $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHCASE 3SWITCH StatusCASE "O"IF NOT $OUT[15] AND NOT $OUT[16] AND NOT $IN[10] AND NOT $IN[11] THEN RETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[15] AND $OUT[16] AND $IN[10] AND $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHENDFCT10、装夹检测子程序(完成对每台机的装夹检测与装夹异常信号交互)11、后台监视程序(对安全姿态信号自动触发等后台程序进行配置)&ACCESS R&COMMENT HandlerOnRobotFaultDEF IR_STOPM ( );-----------------------------------; Error Handling Robot Controller; Switch OFF and Switch ON processes; KRC Version >= V5.5;-----------------------------------;FOLD DECLARATIONS;FOLD USER DECL; Please insert user defined declarations;ENDFOLD (USER DECL);FOLD BASISTECH DECLBOOL ApplicationRunFlagDECL CHAR ID[3];ENDFOLD (BASISTECH DECL);ENDFOLD (DECLARATIONS);FOLD BASISTECH INITINTERRUPT OFF 3STOPM_FLAG=TRUE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt ID[]="CTL"If ($STOPMESS==TRUE) THENBRAKE;ENDFOLD (BASISTECH INIT);FOLD USER STOP;Make your modifications here;ENDFOLD (USER STOP);FOLD BASISTECH STOPP00 (#EXT_ERR,#PGNO_GET,ID[],128 )ApplicationRunFlag=FALSEIF (Appl_Run>0) THENIF $OUT[Appl_Run] THENApplicationRunFlag=TRUE$OUT[Appl_Run]=FALSEENDIFENDIFREPEATPOWER=SYNC()HALTUNTIL (($STOPMESS==FALSE) AND ($POWER_FAIL==FALSE));ENDFOLD (BASISTECH STOP);FOLD BASISTECH RESTARTP00 (#EXT_ERR,#PGNO_GET,ID[],0 )IF (ApplicationRunFlag==TRUE) THENIF (Appl_Run>0) THEN$OUT[Appl_Run]=TRUEENDIFENDIF最新精品文档,知识共享!;ENDFOLD (BASISTECH RESTART);FOLD USER RESTART;Make your modifications here;ENDFOLD (USER RESTART);FOLD BASISTECH REACTIVATEEndifINTERRUPT ON 3STOPM_FLAG=FALSE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt;ENDFOLD (BASISTECH REACTIVATE)END。