1、DV-SC /07.04.2004,Festo Didactic GmbH&Co.KG 2004,For COSIMIR,MELFA-BASIC 4,第,1,单元,MELFA-BASIC-IV,位置及移动指令,:,1.MOV(,移动,),2.SPD(,速度,),3.DLY(,延时,),4.MVS(,直线移动,),5.MVR(Move R),6.MVR2(Move R2),MELFA-BASIC-IV,抓手指令,:,7.HCLOSE (,抓手关闭,),8.HOPEN (,抓手打开,),MELFA-BASIC-IV,程序指令,:,9.END(,结束,),10.HLT(Halt),1.MOV (,移
2、动,),功能描述,:,将机械手移动到指定位置,(,明确插补,),Sample program:,程序举例,5 Start of the course (,说明,),10 MOV p1 (,移动到位置,1),20 MOV p2 (,移动到位置,2),30 END (,程序结束,),移动指令,移动指令,MVS (,直线移动,),功能描述,:,从当前位置到目标位置执行直线插补运动。,程序举例,:,10 MOV P1,20 DLY 2,30 SPD VSLOW,40 MVS P2,50 MOV P1,移动指令,MVR (,移动,R),功能描述,:,从起始点通过过度点到结束点执行直角坐标中的,曲线,插补
3、运动。在这个指令中需要用到,3,个点。,第一位置是起始点,第二个位置是过度点,第三个位置是结束点。,但是必须注意,因为机械手只工作在一定的工作范围内。,当使用的点超出了机械手的工作范围,运动及仿真功能将失效。,还要注意的是,:,机械手的运动路径不是固定的。,程序举例,:,10 MOV P1,15 SPD SLOW,20 MVR P1,P2,P3,30 DLY 2,40 SPD FAST,50 END,移动指令,MVR2 (,移动,R2),功能描述,:,从起始点到结束点执行直角坐标系内的曲线插补运动。,运动轨迹为不经过,中间过度,点轨迹。,程序举例,:,10 MOV P1,15 SPD SLOW
4、20 MVR2 P1,P2,P3,30 DLY 2,移动指令,如果起始点和现在位置不统一?,如果三点中有两点重合或三点在一条直线上?,移动指令,如果起始点和现在位置不统一?,如果三点中有两点重合或三点在一条直线上?,移动指令,移动指令,SPD (,速度,),功能描述,:,定义机械手直线及曲线运动的速度。在你使用速度功能前,你必须定义你要用到的速度级别。,程序举例,:,步骤,1,定义,10 DEF INTE VSLOW(,极低速,),20 DEF INTE SLOW(,低速,),25 DEF INTE MIDDLE(,中速,),30 DEF INTE FAST(,快速,),步骤,2,变量声明,
5、100 VSLOW=15 (,常规范围,10-15),110 SLOW=20(,常规范围,15-30),115 MIDDLE=35 (,常规范围,30-45),120 FAST=60(,常规范围,45-70),步骤,3,在程序中调用,190 SPD FAST,200 MOV P1,210 SPD MIDDLE,220 MOV P2,速度指令,DLY (,延时,),功能描述,:,停止运动一段时间。,DLY 3,意思是:机械手停止运动,3,秒。,(1=1sec),程序举例,:,10 MOV P1,20 DLY 3(,机械手等待,3,秒钟,),30 SPD SLOW,40 MOV P2,延时指令,抓
6、手指令,HOPEN (,抓手打开,),功能描述,:,抓手打开指令。,程序举例,:,10 MOV P1,20 HOPEN 1(,抓手1打开,),抓手指令,HCLOSE (,抓手关闭,),功能描述,:,抓手关闭指令。,程序举例,:,10 MOV P1,20 HCLOSE 1(,关闭抓手1,),抓手指令,HLT (,停止,),功能描述,:,中断并结束程序执行及机械手运动。,程序举例,:,10 MOV P1,20 HOPEN 1,30 END,40 HLT,结束指令,END (,结束,),功能描述,:,结束程序执行。,程序举例,:,10 MOV P1,20 SPD SLOW,30 DLY 2,40 H
7、OPEN 1,50 END,结束指令,程序指令,MELFA-BASIC-IV,程序指令,:,11 FOR NEXT(For Next),12.GOSUB (,调用子程序,)+RETURN (,返回,),13.GOTO (,跳转,),MELFA-BASIC-IV,位置及移动指令,:,14.DEF POS(,定义点,),15.AUXPOS(,辅助点,),FOR NEXT(,循环,),功能描述,:,重复执行,FOR,与,NEXT,之间的程序部分,直到满足结束条件为止。,程序举例,:,10,DEF INTE M1,20 FOR M1=1 to 3(,重复循环,M1 3,次,),30 MOV P1(,到
8、达位置,1),40 MOV P2(,到达循环中的位置,2),50 NEXT M1(,结束循环,),GOSUB (,调用子程序,)+RETURN (,返回,),功能描述,:,命令程序跳转到子程序,子程序带有明确的行号或名称,*,名称,。这个命令通常用于完善程序。,当使用多个子程序时应该调用一个主循环*,MAINLOOP,,而且子程序的名称应该与子程序,中的主要动作相关联。,200*TAKE,210 MOV P3,220 DLY 3,230 HOPEN 1,240 GOSUB*CONTROL,250 MOV P4,260 RETURN,300*CONTROL,310 MOV P5,320 MVR
9、P6,P7,P8,330 RETURN,程序举例,:,10,*MAINLOOP,20,GOSUB*LOOK,30,GOSUB*TAKE,40,GOTO*MAINLOOP,60 END,100*LOOK,110 MOV P1,120 MVS P2,130 RETURN,GOSUB,指令,GOTO (,跳转,),功能描述,:,是程序顺序跳转到某一行,行号,或到一个子程序,*,名称,。,程序举例,:,5*MAIN,20 MOV P2,30 MVS P3,40 DLY 1,50 HOPEN 1,60 GOTO 5(,或,60 GOTO*MAIN,),70 END,无限循环,GOTO,跳转指令,位置及移
10、动指令,DEF POS(,定义点,),AUX POS(,辅助点,),DEF POS(,中间变量,),功能描述,:,定义中间变量。中间变量必须先定义再使用,在定义变量之后还要给定变量的值及方向,之后可以,在程序中调用该变量。当在处理一个复杂运动时,通常要示教许多点。使用中间变量可以减少示,教的数目。这样可以节约许多时间。,程序举例,:,步骤,1,定义变量,10 DEF POS,VECZ20,20 DEF POS,VECX20,步骤,2,说明变量值及方向,70 VECZ20=(+0.00,+0.00,+20.00,+0.00,+0.00),80 VECX20=(+20.00,+0.00,+0.00
11、0.00,+0.00),(X ,Y ,Z ,A ,B ),其中,,A:,为腕部转动的角度。当面对机器人时,以腕部的轴线为基准,正值为逆时针方向角度,负值 为顺时针方向角度。,B:,为腕部平面与水平面间的夹角。,步骤,3,在程序中调用,150 SPD SLOW,160 MOV P1+VECX20,170 MOV P2+VECZ20,MELFA-BASIC-IV,程序指令,:,16.IF THEN(,如果,),17.IF THEN ELSE(,否则,),18.WAIT(,等待,),MELFA-BASIC I/O-IV,控制指令,:,19.DEF IO (,定义输入、输出,),20.M_IN()
12、和,M_OUT(),AUXPOS(,辅助点,),功能描述,:,不是一条执行指令,只是定义了一个点可以在程序中变动。这个点不必在程序开始时说明。,可以在程序中任何时候说明这个点,而且可以给这个点另外命名。,如果想避免写很长的中间变量,可以使用辅助点。,程序举例,:,20 DEF POS AUXPOS,100 MOV P1100 MOV P1,110 MOV P1+VECZ3+VECY2110 AUXPOS=P1+VECZ3,120 MOV AUXPOS+VECY2,120 MOV P1130 MOV P1,130 MOV P1+VECZ3+VECX3 140 MOV AUXPOS+VECX3,
13、140 MOV P1+VECZ3+VECZX3 150 MOV AUXPOS+VECZX3,150 MOV P1+VECX5+VECZ7 160 AUXPOS=P1+VECX5,170 MOV AUXPOS+VECZ7,不用,AUXPOS,使用,AUXPOS,IF THEN(,如果,),功能描述,:,根据表达式的结果选择并执行程序。,(,不断地用于输入和输出条件,),程序举例,:,30*MAINLOOP 30*MAINLOOP,40 GOSUB*TEST 40 GOSUB*TEST,50 END 50 END,60 HLT 60 HLT,80*TEST 80*TEST,90 IF INP1=1
14、 THEN*WORK 90 IF INP1=1 THEN*WORK,100 DLY 5 100 DLY 5,110 OUTPUT1=1 110 OUTPUT1=1,120 RETURN 120 RETURN,130*WORK 130*WORK,140 DLY 3 140 DLY 3,150 MVR P1,P2,P3 150 MVR P1,P2,P3,160 RETURN 160 RETURN,17.IF THEN ELSE(,否则,),功能描述,:,根据表达式的结果选择并执行程序。,(,不断地用于输入和输出条件,),程序举例,:,30*MAINLOOP,(,输入,INP1,为,0),40 GO
15、SUB*TEST,50 END,60 HLT,80*TEST,90 IF INP1=1 THEN*WORK ELSE GOTO 30,100 DLY 5,110 OUTPUT1=1,120 RETURN,130*WORK,(,输入,INP1,为,1),140 DLY 3,150 MVR P1,P2,P3,160 RETURN,18.WAIT(,等待,),MELFA-BASIC I/O-IV,控制命令,功能描述,:,等待变量到达预期值。,程序举例,:,100 WAIT INPUT1=1 (,等待,直到输入,1,变为,1),110 MOV P1,120 GOTO*TAKE,19.DEF IO(,定
16、义输入,/,输出,),功能描述,:,说明一个输入,/,输出变量。但是必须小心对待这个指令,,因为很难区分输入位和输出位。小心使用指令,DEF IO,。,对于输入输出不能使用相同的位。通常我们将,BIT 0-BIT 7,定义为输出位,而将,BIT 8-BIT 15,定义为输入位。,程序举例,:,步骤,1,定义变量,10 DEF IO INPUT1=BIT,8,20 DEF IO INPUT2=BIT,9,30 DEF IO OUTPUT1=BIT,0,步骤,2,在程序中调用,190*TEST,200 HOPEN 1,210 MOV P10,220 IF INPUT1=1 THEN*WORK EL
17、SE GOTO 200,230 DLY 2,240 RETURN,400*WORK,410 MOV P12,420 OUTPUT1=1(,将,output1,即,:Bit 0,置,1),423 MOV P13,425 MOV P14,430 IF INPUT2=1 THEN*WAIT(,察看,INPUT2,是否为,1),430 RETURN,20.M_IN()and M_OUT(),功能描述,:,常用功能是定义特殊位。,M_IN(“BIT number“),用于输入,,M_OUT(“BIT number“),用于输出。使用这个指令不必在先前定义输入,/,输出。,程序举例,:,30*MAINLO
18、OP,40 GOSUB*TEST,(,当输入,BIT 3,为,0),50 END,60 HLT,80*TEST,90 IF M_IN(3)=1 THEN *WORK ELSE GOTO 30,100 DLY 5,110 M_OUT(1)=1(,设置输出,BIT1,为,1),120 RETURN,130*WORK,140 DLY 3,(,当输入,1 BIT 3,为,1),150 MVR P1,P2,P3,155 M_OUT(5)=0(,设置输出,BIT5,为,0),160 RETURN,MELFA-BASIC 4 EXERCISES,For COSIMIR,练习,1(,第,1,单元,),机械手运
19、动到位置,1,,再运动到位置,2-4,,再回到位置,1,。,在位置,1,抓起工件之后在位置,4,放下。,机械手从位置,2-3,,以及位置,4-1,作直线运动。,在点,2,、,3,延时一段时间。,请使用,3,种不同的速度状态,(,如图所示,),。,练习,1:,答案,步骤,1,定义,20 DEF INTE SLOW(,低速,),30 DEF INTE MIDDLE(,中速,),40 DEF INTE FAST(,快速,),步骤,2,变量声明,50,VSLOW=15 (,常规范围,10-15),60 SLOW=20(,常规范围,15-30),70 MIDDLE=35 (,常规范围,30-45),80
20、 FAST=60(,常规范围,45-70),步骤,3,在程序中调用,110 HCLOSE 1,120 MOV P1,130 HOPEN 1,140 HCLOSE 1,150 SPD FAST,160 MOV P2,165 DLY 2,170 SPD MIDDLE,180 MVS P3,185 DLY 3,190 SPD FAST,200 MOV P4,210 HOPEN 1,220 HCLOSE 1,230 SPD SLOW,240 MVS P1,250 HLT,260 END,练习,2(,第,2,单元,),使用两个子程序完成该练习。首先机械手运动到位置,1,,画两遍平行四边形,之后画两遍等腰
21、三角形。,只允许你示教两个点,第,1,点由示教盒确定第,2,点由,Cosimir,在线状态的,Teach,模块确定。,请在机械手的运动过程中使用中间变量,并在标志位时使用,Auxpos,指令。,机械手要重复执行每个子程序,2,次。,机械手在位置,1,抓起工件,在位置,2,放下工件。,执行完第,1,个子程序,机械手沿直线从点,1,移动到点,2,。,程序无限循环。,答案,2:,10 DEF INTE MIDDLE,20 MIDDLE=35,23 Index:START,24,SUB1,30 DEF POS AUXPOS,35,SUB2,40 DEF POS VECZY1,50 DEF POS VE
22、CZY2,60 DEF POS VECY10,70 DEF POS VECY8,80 VECZY1=(+0.00,+5.00,+11.00,+0.00,+0.00),90 VECZY2=(+0.00,+6.00,+8.00,+0.00,+0.00),95 VECY10=(+0.00,+10.00,+0.00,+0.00,+0.00),96 VECY12=(+0.00,+12.00,+0.00,+0.00,+0.00),105 HCLOSE 1,110 SPD MIDDLE,120*MAINLOOP,130GOSUB*SUB1,150GOSUB*SUB2,160 GOTO*MAINLOOP,18
23、0 END,190*SUB1,192 MOV P1,193 HOPEN 1,194 HCLOSE 1,200 FOR M1=1 to 2,220 MOV P1+VECZY1,230 AUXPOS=P1+VECZY1+VECY10,240 MOV AUXPOS,250 MOV AUXPOS-VECZY1,260 MOV AUXPOS-VECZY1-VECY10,270 NEXT M1,280 RETURN,290*SUB2,295 MVS P2,296 HOPEN 1,297HCLOSE 1,300 FOR M2=1 to 2,310 MOV P2+VECZY2,320 MOV P2+VECY1
24、2,330 MOV P2,340 NEXT M2,350 RETURN,练习,3(,第,3,单元,),请使用练习,2,中已有的程序并在这个练习中进行修改。,当输入信号,Bit 1,变为,1,,机械手开始执行子程序,1,同时将输出信号,BIT 8,置,1,。,当输入信号,Bit 2,变为,1,,机械手执行子程序,2,同时将输出信号,BIT9,置,1,。,如果输入信号都为,0,,机械手停止运动。,答案,3:,10 DEF INTE MIDDLE,20 MIDDLE=35,25 DEF IO INPUT1=BIT,1,26 DEF IO INPUT2=BIT,2,27 DEF IO OUTPUT1=
25、BIT,8,28 DEF IO OUTPUT2=BIT,9,35 DEF POS AUXPOS,40 DEF POS VECZY1,50 DEF POS VECZY2,60 DEF POS VECY10,70 DEF POS VECY8,80 VECZY1=(+0.00,+5.00,+11.00,+0.00,+0.00),90 VECZY2=(+0.00,+6.00,+8.00,+0.00,+0.00),95 VECY10=(+0.00,+10.00,+0.00,+0.00,+0.00),96 VECY8=(+0.00,+12.00,+0.00,+0.00,+0.00),105 HCLOSE
26、1,110 SPD MIDDLE,200*MAINLOOP,210GOSUB*TEST,240 END,250*TEST,270IF INPUT1=0 THEN GOTO 280 ELSE*SUB1,280IF INPUT2=0 THEN GOTO 240 ELSE*SUB2,290 RETURN,350*SUB1,360 MOV P1,370 HOPEN 1,380 HCLOSE 1,385 FOR M1=1 to 2,390 MOV P1+VECZY1,395OUTPUT1=1,400 AUXPOS=P1+VECZY1+VECY10,410 MOV AUXPOS,420 MOV AUXPOS-VECZY1,430 MOV AUXPOS-VECZY1-VECY10,440 NEXT M1,460 RETURN,470*SUB2,480 MVS P2,490HOPEN 1,495 HCLOSE 1,498 FOR M2=1 to 2,500MOV P2+VECZY2,505OUTPUT2=1,510 MOV P2+VECY8,520 MOV P2,530 NEXT M2,540 RETURN,Thank you,for your attention!,Internet:,/didactic,谢谢,!,






