博舍

ABB机器人编程示例 机器人画三角形编程程序

ABB机器人编程示例

【一】:系统介绍

中文手册:http://samwangpan01.club:8081/externalLinksController/chain/ABB%E6%9C%BA%E5%99%A8%E4%BA%BA%E4%B8%AD%E6%96%87%E6%89%8B%E5%86%8C.pdf?ckey=7GLNrf1%2BOQSWcq5sVS%2FgnB8vkb7KlFdiqF%2BhMQLd6YxkLw7tWFYKqFXOj3TRqlE5

RobotStudio6.08下载地址备份:

http://samwangpan01.club:8081/externalLinksController/chain/ABB%E6%9C%BA%E5%99%A8%E4%BA%BA%E8%BD%AF%E4%BB%B6RobotStudio_6.08.rar?ckey=UFYiQy57v1B0KlKgHhda9IUKbuLFwKn7%2FBdsOio1MxPVyWTSHhBjKN0KFvWJ1JBX

abb机器人简介(百度文库): https://wenku.baidu.com/view/845ae63a5afb770bf78a6529647d27284b733763.html?rec_flag=default&word=abb%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%95%85%E9%9A%9C%E5%A4%84%E7%90%86&fr=pc_newview_relate-1001_1-2-wk_rec_doc2-1001_1-2-845ae63a5afb770bf78a6529647d27284b733763

S1:IRB6

S2:IRB60  IRB90

S3:IRB1500  IRB2000  IRB3000  IRB6000

S4:IRB1400  IRB2400   IRB4400  IRB6400

S4C:IRB1400  IRB2400  IRB4400  IRB5400  IRB6400

S4Cplus:IRB1400  IRB2400  IRB4400  IRB5400  IRB6600  IRB7600

IRC5: IRB1400  IRB2400  IRB4400  IRB5400  IRB6600  IRB7600

IRB1400最大工作半径1444mm,最大承载5kg

IRB2400最大工作半径1550-1810mm,最大承载5-16kg

IRB4400最大工作半径1955-2745mm,最大承载10-60kg

IRB6400最大工作半径2250-3000mm,最大承载75-200kg

IRB6400R最大工作半径2469-2999mm,最大承载120-200kg

IRB6600/6650最大工作半径2550-3200mm,最大承载125-225kg

IRB7600 最大工作半径2300-3500mm,最大承载150-500kg

IRB140 最大工作半径810mm,最大承载5kg

IRB640四轴堆垛专用机器人,最大工作半径2905mm,最大承载160kg

IRB340三轴或四轴分拣专用机器人,最大工作半径566mm,最大承载1kg

IRB840(0)龙门架机械手工作范围很大,最大承载12000kg

IRB940铸造行业专用机器人,垂直最大承载1300kg,水平承载350kg

IRB5400;IRB540;IRB5300; IRB500;IRB5600;IRB580;T10/F10Trolley;T20Trolley;T10/F20Trolley喷涂机器人,承载5-35kg,工作半径2813mm

1.控制系统Controller

计算机系统包括。Robotcomputerboard:机器人计算机板,控制运动与输入/输出通讯。Memoryboard:存贮板,增加额外的内存。Maincomputerboard:主计算机板,含8M内存,控制整个系统。Optionalboards:选项板Communicationboards:通讯板,用于网络或现场总线通讯Supplyunit:供电单元,整流输出电压及短路保护。驱动系统包括:DClink:将三相交流电转换为三相直流Drivemodule:控制2-3根轴的转距。Lithiumbatteries:锂电池,存贮备用电源。Panelunit:面板单元,处理所有影响安全与操作的信号。I/Ounits:输入/输出单元。Serialmeasurementboard(inthemanipulator):串行测量板,收集并传送电机位置信息。【二】:示教器功能介绍

2、窗口键:(Windowkeys)

    Jogging  -操纵窗口手动状态下,用来操纵机器人。显示屏上显示机器人相对位置及当前座标系。rogram-编程窗口手动状态下,用来编程与测试。所有编程工作都在编程窗口中完成。Input/Outputs-输入/输出窗口显示输入输出信号表与其数值。可手动给输出信号赋值。Misc.-其他窗口:包括系统参数、服务、生产以及文件管理窗口。3、导航键:(Navigationkeys)List  -切换键将光标在窗口的几个部分间切换。(通常由双实线分隔)extPage-向下翻页键将光标向下快速移动。reviousPage-向上翻页键将光标向上快速移动。Uparrows-光标上移键将光标向上单步移动。Downarrows-光标下移键将光标向下单步移动。Leftarrows-光标左移键将光标向左单步移动。Rightarrows-光标右移键将光标向左单步移动。4、运动控制键:(Motionkeys)MotionUnit-运动单元切换键手动状态下,操纵机器人本体与机器所控制的其他机械装置(外轴)之间的切换。MotionType1-运动模式切换键1直线运动与姿态运动切换键。直线运动是指机器人TCP沿座标系X、Y、Z轴方向作直线运动。姿态运动是指机器人TCP在座标系中X、Y、Z轴数值不变,只沿着X、Y、Z轴旋转,改变姿态。MotionType2-运动模式切换键2单轴运动选择键。·第一组:1、2、3轴·第二组:4、5、6轴Incremental-点动操纵键启动或关闭点动操纵功能,从而控制机器人手动运行时速度。5、其他键:(Otherkeys)top-停止键停止机器人程序运行。Contrast-光亮键调节显示器对比度。MenuKeys-菜单键显示下拉式菜单(热键),共有五个菜单键,显示包含各种命令的菜单。Functionkeys-功能键直接选择功能(热键),共有五个功能键,直接选择各种命令。Delete-删除键删除显示屏所选数据,机器人操作时,所要删除任何数据、文件、目录等,都用此键。Enter-回车键进入光标所示数据。6、自定义键:(Programmablekeys)P1-P5这五个自定义键的功能可由程序员自定义,每个键可以控制一个模拟输入信号或一个输出信号以及其端口。

【三】:安全链(绝对禁止对安全链进行短接、定义或修改)

【四】:papid语言基本指令介绍与示例

1.MovJ关节运动:MoveL[Conc,]ToPoint,Speed[V]|[ ], Zone[][Inpos], Tool[WObj];

2.MovL线性运动:MoveL[Conc,]ToPoint,Speed[V]|[T],Zone[][Inpos],Tool[WObj][Corr];

例1:画一个方形,每圈向外移动10

MODULEModule1CONSTrobtargetp10:=[[931.61,46.87,1472.75],[0.768115,0.0441544,0.636333,0.0559423],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];VARnumK:=0;VARnumi:=0;PROCmain()i:=0;!循环标志位,i=0FORiFROM1TO5DO!循环5圈K:=-i*10;!每圈向外10MoveLoffs(p10,k,0,-500),v500,fine,tool0;!xyz分别是k,0,-500;速度是500MoveLoffs(p10,K,400,-500),v500V:=1000,z40:=45,tool0;MoveLoffs(p10,K,400,150),v500,z40,tool0;MoveLoffs(p10,K,0,150),v500,z40,tool0;MoveLoffs(p10,K,0,-500),v500,z40,tool0;ENDFORENDPROCENDMODULE

3.MovC圆弧运动:MoveC[Conc,]CirPoint,ToPoint,Speed[V]|[ ],Zone[][Inpos],Tool[WObj][Corr];

[Conc,]:协作运动开关。(switch);  

CirPoint:中间点,默认为*。(robotarget);

ToPoint:目标点,默认为*。(robotarget);  

Speed:运行速度。(speeddata);  [V]:特殊运行速度mm/s。(num);  [T]运行时间控制。(num);  

Zone:运行转角数据。(zonedata);[]:特殊运行转角mm。(num);  [Inpos]:运行停止点数据。(stoppointdata);

Tool:工具中心点(TCP)。(tooldata);[WObj]:工件坐标系。(wobjdata);[Corr]:修正目标点开关。(switch);

例1:画一个圆

MODULEModule1!CONSTrobtargetp10:=[[931.61,246.87,1472.75],[0.768115,0.0441544,0.636333,0.0559423],[0,0,-1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];VARnumi:=0;TASKPERSwobjdatawobjTable:=[FALSE,TRUE,"",[[0,0,0],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];TASKPERStooldatatool1:=[TRUE,[[0,0,0],[1,0,0,0]],[-1,[0,0,0],[1,0,0,0],0,0,0]];CONSTrobtargetp1:=[[931.61,567.83,1239.40],[0.768115,0.0441542,0.636333,0.055942],[0,0,-1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp2:=[[931.61,-17.19,1476.60],[0.768115,0.0441543,0.636333,0.0559421],[-1,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp3:=[[931.61,-506.46,1144.68],[0.768116,0.0441543,0.636333,0.0559421],[-1,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp4:=[[931.61,80.26,875.84],[0.768115,0.0441544,0.636333,0.0559421],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];PROCmain()i:=0;FORiFROM1TO5DOMoveLp1,v500,fine,tool0;MoveCp2,p3,v500,z20,tool0;MoveCp4,p1,v500,fine,tool0;ENDFORENDPROCENDMODULE

4.信号输出:机器人运动至目标点,并在目标点输出相应信号

 MoveJDOToPoint,Speed[T],Zone,Tool[WObj],Signal,Value;

 MoveLDOToPoint,Speed[T],Zone,Tool[WObj],Signal,Value;

 MoveCDOCirPoint,ToPoint,Speed[T],Zone,Tool[WObj],Signal,Value;

Signal:数字输出信号名称。(signaldo);

Value:数字输出信号值。(dionum);

4.1.ResetOUT10;信号输出0。 Set信号输出1。

4.2.InvertDOOUT10;信号反转。

例1:

PROCmain()IDeleteintno1;IDeleteintno2;CONNECTintno1WITHMyExti1;CONNECTintno2WITHMyExti2;ISignalDIIN10,1,intno1;ISignalDIIN20,1,intno2;WHILETRUEDOIFregint1=1THENregint1:=regint1-1;!InvertDOOUT10;MoveLoffs(p10,k,0,-500),v2000,fine,tool0;MoveLoffs(p10,K,400,-500),v2000V:=1000,z40:=45,tool0;MoveLoffs(p10,K,400,150),v2000,z40,tool0;MoveLoffs(p10,K,0,150),v2000,z40,tool0;MoveLDOoffs(p10,K,0,-500),v2000,z40,tool0,OUT10,1;ELSEIFregint2=1THENregint2:=regint2-1;InvertDOOUT20;MoveLp1,v2000,fine,tool0;MoveCp2,p3,v2000,z20,tool0;MoveCp4,p1,v2000,fine,tool0;ELSEResetOUT10;ResetOUT20;ENDIFENDWHILEENDPROCTRAPMyExti1regint1:=regint1+1;ENDTRAPTRAPMyExti2regint2:=regint2+1;ENDTRAP

5.调用相应例行程序指令:机器人运动至目标点,并在目标点调用相应例行程序

 MoveJSyncToPoint,Speed[T],Zone,Tool[WObj],Proc;

 MoveLSyncToPoint,Speed[T],Zone,Tool[WObj],Proc;

 MoveCSyncCirPoint,ToPoint,Speed[T],Zone,Tool[WObj],Proc;

CirPoint:中间点,默认为*。(robotarget);

ToPoint:目标点,默认为*。(robotarget);  

Speed:运行速度。(speeddata);  [V]:特殊运行速度mm/s。(num);  [T]运行时间控制。(num);  

Zone:运行转角数据。(zonedata);[]:特殊运行转角mm。(num);  [Inpos]:运行停止点数据。(stoppointdata);

Tool:工具中心点(TCP)。(tooldata);[WObj]:工件坐标系。(wobjdata);[Corr]:修正目标点开关。(switch);

Proc:例行程序名称。(string);

用指令Stop停止当前指令运行,会出现一个错误信息,如需避免,采用指令StopInstr。

不能使用此指令来调用中断处理程序TRAP,不能但不执行此指令所调用的例行程序PROC。

6.MoveAbsJ移动机械臂至绝对位置MoveAbsJ[Conc,]ToJointPos[NoEOffs],Speed[V]|[T],Zone[][Inpos],Tool[WObj];

MODULEModule1VARnumi:=0;CONSTjointtargetp100:=[[37.6131,10.5047,7.03996,59.9717,-46.3082,-58.3159],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTjointtargetp110:=[[-35.2865,8.06415,7.40231,-53.7255,-39.571,61.2511],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTjointtargetp120:=[[-35.4623,27.1492,55.474,-32.0575,-76.4809,23.2391],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTjointtargetp130:=[[50.0835,42.6387,47.1232,51.5741,-78.9401,-28.6567],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTjointtargetp140:=[[-65.7798,-0.0497541,-8.7633,-76.5653,-61.5277,96.468],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];PROCmain()i:=0;FORiFROM1TO500000DOMoveAbsJp100,v2000,fine,tool0;MoveAbsJConc,p110NoEOffs,v500,fine,tool0;MoveAbsJp120,v2000V:=1000,z40:=45,tool0;MoveAbsJp130,v2000,z40,tool0WObj:=wobj0;MoveAbsJp140,v2000,fineInpos:=inpos50,tool0;ENDFORENDPROCENDMODULE【五】:papid语言其它指令使用一:外轴指令

外轴激活ActUnit;外轴失效DeactUnit;

1.ActUnitm7dm1;外轴激活。2.DeactUnitm7dm1;外轴失效(m7dm1是自己定义的外轴)

关于外部轴如何配置:https://blog.csdn.net/qq_35831134/article/details/106871946

例1:导轨移动,p100和p110是定义导轨移动的2个位置

PROCmain()IDeleteintno1;IDeleteintno2;CONNECTintno1WITHMyExti1;CONNECTintno2WITHMyExti2;ISignalDIIN10,1,intno1;ISignalDIIN20,1,intno2;WHILETRUEDOIFregint1=1THENregint1:=regint1-1;InvertDOOUT10;ActUnitm7dm1;MoveLp100,v2000,fine,tool0;MoveLp110,v2000,fine,tool0;DeactUnitm7dm1;MoveLoffs(p10,k,0,-500),v2000,fine,tool0;MoveLoffs(p10,K,400,-500),v2000V:=1000,z40:=45,tool0;MoveLoffs(p10,K,400,150),v2000,z40,tool0;MoveLoffs(p10,K,0,150),v2000,z40,tool0;MoveLoffs(p10,K,0,-500),v2000,z40,tool0;ELSEIFregint2=1THENregint2:=regint2-1;InvertDOOUT20;MoveLp1,v2000,fine,tool0;MoveCp2,p3,v2000,z20,tool0;MoveCp4,p1,v2000,fine,tool0;ELSEResetOUT10;ResetOUT20;ENDIFENDWHILEENDPROCTRAPMyExti1regint1:=regint1+1;ENDTRAPTRAPMyExti2regint2:=regint2+1;ENDTRAP

二:输入输出指令

如何配置IO板:https://blog.csdn.net/qq_35831134/article/details/107098972

对信号名称进行化名AliasIO;信号反转InvertDO; IO板失效IODisable;IO板激活IOEnable;脉冲信号PulseDO;信号为低电平Reset;高电平Set;模拟输出SetAO;组合延时输出SetDO;延时输出SetGO;等待输入信号满足相应值WaitDI;等待输出信号满足响应值WaitDO;

1.AliasIOconfig_do,alias_do;(config_do:在系统参数内定义,alias_do:在程序内定义)。

2.InvertDOOUT10;(OUT10:IO名称)。IODisable"cell",5;(cell:信号板名称,5:最长等待时间)。

3.IOEnable"cell",0;。

4.PulseDOHighPLengthdo10;(High:输出脉冲时信号可以在高电平,PLength:脉冲长度,do10:IO名称)。

5.SetAOAO10,5;(AO10信号名称,5:值)。

6.SetDOSDelay:=0.2,weld,high;(SDelay:延时s,weld:信号名称,high:值)。

7. SetGOSDelay:=0.2,go_Type,10;(SDelay:延时s,Type:信号名称,10:值)。

8.WaitDIdi_Ready,1;(等待输入信号为1才执行后面的指令)

9.WaitDIdi_Ready,1MaxTime:=5;(等待输入信号,5秒内无输入di_Ready为1,自动运行ErrorHandler处理,如果没有Error就报错)。

10.WaitDIdi_Ready,1MaxTime:=1Timeflag:=bTimeout;(等待输入信号,1秒内无输入di_Ready为1,机器人执行后面指令,但此时TimeFlag的值为TRUE;如果在1秒内等到输入信号,TimeFlag的值为FALSE)。

11.WaitDO(与输入原理一样)。

三:停止指令

在当前指令行立即停止,运行指针停在下一行Break;停止运行并重置Exit;在当前指令行停止运行,指针停在下一行Stop;在当前指令行立即停止运行,当前循环结束,并从主程序第一行继续进行下一个循环ExitCycle;

四:计时指令

时钟复位ClkReset;时钟开始ClkStart;时钟停止ClkStop;

例1:计算出画一个圆所用的时间nCycleTime

ClkResetclock1;ClkStartclock1;MoveLp1,v2000,fine,tool0;MoveCp2,p3,v2000,z20,tool0;MoveCp4,p1,v2000,fine,tool0;ClkStopclock;nCycleTime:=ClkRead(clock1);TPWrite"Lastcycletime:"Num:=nCycleTime;五:计数指令

加Add;清零Clear;加加Incr;减减Decr;

Addreg1,3;(等同于reg1:=reg1+3)。Clearreg1;(等同于reg1:=0)。Incrreg1(等同于reg1:=reg1+1)。Decr(相当于C语言里面-。-)

六:中断指令

CONNECT;IDelete;ISignalDI;ISignalDO;ISignalAI;ISignalAO;ISleep;IWatch;IDisable;IEnable;ITimer;

例1:IDelete外部中断,IN10和IN20来触发中断程序改变相应标志位来执行死循环里面程序

PROCmain()    IDeleteintno1;                 !IDelete中断    CONNECTintno1WITHMyExti1; !调用外部中断函数    ISignalDIIN10,1,intno1;   !外部中断所映射IO为IN10    WHILETRUEDO         !循环判断标志位状态      IFregint1=1THEN      !判断标志位状态        regint1:=regint1-1;    !清除标志位        MoveLp1,v2000,fine,tool0;        MoveCp2,p3,v2000,z20,tool0;        MoveCp4,p1,v2000,fine,tool0;       ELSE        ResetOUT10;      ENDIF    ENDWHILE  ENDPROC  TRAPMyExti1          !定义的中断函数      regint1:=regint1+1;  !改变标志位  ENDTRAP

MODULEModule1CONSTrobtargetp10:=[[1203.52,0.00,1092.05],[0.676581,0.112147,0.72011,0.105368],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp1:=[[1196.82,-300.08,956.44],[0.676581,0.112147,0.72011,0.105368],[-1,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp2:=[[1203.52,0.00,1092.05],[0.676581,0.112147,0.72011,0.105368],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp3:=[[1196.82,304.63,956.44],[0.676581,0.112147,0.72011,0.105368],[0,0,-1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp4:=[[1196.82,0.00,750.21],[0.676581,0.112147,0.72011,0.105368],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];VARnumK:=0;VARnumregint1:=0;VARnumregint2:=0;VARintnumintno1:=0;VARintnumintno2:=0;CONSTrobtargetp100:=[[1196.82,-300.08,956.44],[0.676581,0.112147,0.72011,0.105368],[-1,-1,0,0],[97.5137,9E+9,9E+9,9E+9,9E+9,9E+9]];CONSTrobtargetp110:=[[1196.82,-300.08,956.44],[0.676581,0.112147,0.72011,0.105368],[-1,-1,0,0],[1828.95,9E+9,9E+9,9E+9,9E+9,9E+9]];PROCmain()IDeleteintno1;IDeleteintno2;CONNECTintno1WITHMyExti1;CONNECTintno2WITHMyExti2;ISignalDIIN10,1,intno1;ISignalDIIN20,1,intno2;WHILETRUEDOIFregint1=1THENregint1:=regint1-1;InvertDOOUT10;ActUnitm7dm1;MoveLp100,v2000,fine,tool0;MoveLp110,v2000,fine,tool0;DeactUnitm7dm1;MoveLoffs(p10,k,0,-500),v2000,fine,tool0;MoveLoffs(p10,K,400,-500),v2000V:=1000,z40:=45,tool0;MoveLoffs(p10,K,400,150),v2000,z40,tool0;MoveLoffs(p10,K,0,150),v2000,z40,tool0;MoveLoffs(p10,K,0,-500),v2000,z40,tool0;ELSEIFregint2=1THENregint2:=regint2-1;InvertDOOUT20;MoveLp1,v2000,fine,tool0;MoveCp2,p3,v2000,z20,tool0;MoveCp4,p1,v2000,fine,tool0;PulseDOHighPLength:=1,OUT30;ELSEResetOUT10;ResetOUT20;ENDIFENDWHILEENDPROCTRAPMyExti1regint1:=regint1+1;ENDTRAPTRAPMyExti2regint2:=regint2+1;ENDTRAPENDMODULE 七:通信指令

清屏TPErase;显示字符串TPWrite;字符串和按钮TPReadFK;TPReadNum;ErrWrite;TPShow;

1.TPWriteString[Num][Bool][Pos][Orient];  

String:字符串(string);[NUm]:"123"(num);[ool]:"TRUE"(bool);[Pos]:显示位置xyz"[21f,52,72]"(pos);[Orient]:显示方位q1q2q3q4"[0.5,3,5,0]"(orient)。

例1:TPWrite"CycleTime="Num:=nTIme;  (Num是字符串类型 varNumnTIme:=12;)。

例2:TPWrite"xyz="Pos:=xyz;  (Pos坐标 varPosxyz:=[10,20,30];)。

2.TPReadFKAnswer,Text,FK1,FK2,FK3,FK4,FK5,[MaxTime],[DIBreak][BreakFlag];

Answer:数字赋值1-5(num);Text:屏幕字符串(string);FKx:功能键字符串(string);[MaxTime]:最长等待时间(num);[DIBreak]:输入信号控制(signaldi);[BreakFlag]:指令状态控制(errnum);

例1:TPReadFKreg5,"more?",stEmpty,"yes","no","Button1","Button2";

3.TPReadNum 

4.ErrWrite[W],Header,Reason[RL2][RL3][RL4];

[W]:事件记录开关(switch);Header:错误信息标题(string);Reason:错误信息原因(string);[RL2];[RL3];[RL4]:附加错误信息原因(string);

例1:ErrWritew,"Searcherror","NOhitforthefirstsearch";

例2:ErrWritew,"PLCerror","FatalerrorinPLC"RL2:="Callservice";

 八:程序流程指令

循环FOR;等待输入条件判断WaitUntil;延时WaitTime;CompactIF;条件判断IF;TEST;死循环WHILE;无条件转移(跳转)指令GOTO;定义变量或标号的类型Lable;调用子程序procCall;跳出程序到上一级return;

1.1.FOR循环,循环5次

i:=0;FORiFROM1TO5DOMoveLp1,v2000,fine,tool0;MoveLp1,v2000,fine,tool0;ENDWHILE

1.2.FOR示例:

VARc:=0;PROCmain()FORiFROM1TO2DOFORjFROM1TO2DOc:=i*j;TPWrite"CycleTime="Num:=c;ENDFORENDFORENDPROC

2.WaitUntil[InPos],Cond[MaxTime][TimeFlag];

[InPos]:提前量开关(switch);Cond:判断条件(bool);[MaxTime]:等待时间s(num);[TimeFlag]:超时逻辑量(bool);

例1:WaitUntilIN10=1MaxTime:=5;   !如果5秒内IN10不输入1就运行ErrorHandler,如果没用Error的话就报错

例2:WaitUntilbOK=TRUEMaxTime:=1TimeFlag:=bTimeOut; 

3.WHILE指令示例,循环5次

reg1:=0;reg2:=5;WHILEreg1=100%,与SoftDeact指令同时使用。

8.SoftDeact[Ramp];

[Ramp]:软化坡度,>=100%(num);

例1:

SoftAct5,30;

SoftDeact;

SoftAct1,90;

SoftDeactRamp:=100;

FANUC机器人程序实例:走轨迹

 

PS:1→2、2→3、7→8、8→9、9→10、10→7为圆弧运动;

   6→1、3→4、4→5、5→6、6→7、7→6  为直线运动;

   先画图1,循环3次,等待3秒,再画图2,轨迹如上图所示。

   10个位置在同一平面。

程序(位置寄存器法:建立坐标系,指定位置具体坐标):

程序行

指令

注释

1

PR[6]=LPOS

以位置6为原点

2

PR[1]=PR[6]

将位置6赋值给位置1

3

PR[1,2]=PR[6,2]+120

位置1:以位置6为基准,其Y方向+120

4

PR[2]=PR[1]

将位置1赋值给位置2

5

PR[2,1]=PR[1,1]+50

位置2:以位置6为基准,其Y方向+50

6

PR[2,2]=PR[1,2]+50

位置2:以位置6为基准,其X方向+50

7

PR[3]=PR[1]

将位置1赋值给位置3

8

PR[3,1]=PR[1,1]+100

位置3:以位置1为基准,其X方向+100

9

PR[4]=PR[3]

将位置3赋值给位置4

10

PR[4,2]=PR[3,2]-120

位置4:以位置3为基准,其Y方向-120

11

PR[5]=PR[2]

将位置2赋值给位置5

12

PR[5,2]=PR[2,2]-220

位置5:以位置2为基准,其Y方向-220

13

PR[6]=PR[1]

将位置1赋值给位置6

14

PR[6,2]=PR[1,2]-120

位置6:以位置1为基准,其Y方向-120

15

R[1]=0

程序1初始值为0

16

LBL[1]

程序1分支标签

17

LPR[6]2000mm/secFINE

从其它位置以2000mm/sec直线运动到位置6

18

LPR[1]2000mm/secFINE

从位置6以2000mm/sec直线运动到位置1

19

CPR[2]

从位置1,经过位置2以2000mm/sec

 PR[3]2000mm/secFINE

圆弧运动到位置3

20

LPR[4]2000mm/secFINE

从位置3以2000mm/sec直线运动到位置4

21

LPR[5]2000mm/secFINE

从位置4以2000mm/sec直线运动到位置5

22

LPR[6]2000mm/secFINE

从位置5以2000mm/sec直线运动到位置6

23

R[1]=R[1]+1

每循环一次,R[1]值加1

24

IFR[1]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇