ABB RobotStudio & RAPID FOR & WHILE & 함수 & CC-LINK & PulseDO
RobotStudio
ABB 로봇 연결
연결 요청 및 적용
새파일 만들기
내 컴퓨터에서 ABB 로봇에 파일 저장
for문
FOR 변수값 FROM 시작값 TO 끝값 STEP 증감값 DO
MoveL p10, v200, fine, tool명;
MoveL Offs(p10,변수값,0,0), v200, fine, tool명;
MoveL Offs(p10,변수값,변수값,0), v200, fine, tool명;
MoveL Offs(p10,0,변수값,0), v200, fine, tool명;
MoveL p10, v200, fine, tool명;
ENDFOR
FOR user_ct FROM 50 TO 150 STEP 50 DO
MoveL p10, v200, fine, tool2_ej;
MoveL Offs(p10,user_ct,0,0), v200, fine, tool2_ej;
MoveL Offs(p10,user_ct,user_ct,0), v200, fine, tool2_ej;
MoveL Offs(p10,0,user_ct,0), v200, fine, tool2_ej;
MoveL p10, v200, fine, tool2_ej;
ENDFOR
while문
WHILE 변수 조건 DO
ENDWHILE
WHILE user_ct < 100 DO
ENDWHILE
함수
프로그램 편집기 > 파일 열고 > 우측 상단 루틴 > 좌측 하단 파일 > 새 루틴…
main()에서 명령어 추가 > ProcCall
프로그램 편집기 > 파일 열고 > 우측 상단 루틴 > 좌측 하단 파일 > 선언 변경 > 파라미터: 에서 추가 가능
프로시져 PROCEDURE
로봇의 모션과 프로그램의 순차연산을 위한 루틴
MODULE MainModule
CONST robtarget p10:=[[545.69,-238.40,663.04],[0.604676,0.463697,0.631768,0.142201],[-1,0,0,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
VAR num user_num:=0;
VAR num user_size:=0;
PROC main()
AccSet 1, 1;
TPErase;
TPWrite "=========Select 1 , 2 , 3 or 4=========";
TPReadNum user_num, " Select num?";
IF user_num = 1 THEN
u_shape;
ELSEIF user_num = 2 THEN
u_triangle;
ELSEIF user_num = 3 THEN
u_circle;
ELSE
u_for;
ENDIF
ENDPROC
PROC u_shape()
TPReadNum user_size, "Input Rec size?";
MoveL p10, v200, fine, tool2_ej;
MoveL Offs(p10,user_size,0,0), v200, fine, tool2_ej;
MoveL Offs(p10,user_size,user_size,0), v200, fine, tool2_ej;
MoveL Offs(p10,0,user_size,0), v200, fine, tool2_ej;
MoveL p10, v200, fine, tool2_ej;
WaitTime 1;
ENDPROC
PROC u_triangle()
TPReadNum user_size, "Input Triangle size?";
MoveL p10, v200, fine, tool2_ej;
MoveL Offs(p10,0,-user_size * Sin(45),-user_size * Sin(45)), v200, fine, tool2_ej;
MoveL Offs(p10,0,user_size * Sin(45),-user_size * Sin(45)), v200, fine, tool2_ej;
MoveL p10, v200, fine, tool2_ej;
WaitTime 1;
ENDPROC
PROC u_circle()
TPReadNum user_size, "Input Circle size?";
MoveL p10, v200, fine, tool2_ej;
MoveC Offs(p10,0,-user_size,-user_size), Offs(p10,0,0,-user_size*2), v200, z10, tool2_ej;
MoveC Offs(p10,0,user_size,-user_size), p10, v200, z10, tool2_ej;
WaitTime 1;
ENDPROC
PROC u_for()
TPReadNum user_size, "Input Rec For size?";
MoveL Offs(p10,0,0,0),v200,fine,tool2_ej;
MoveL Offs(p10,user_size,0,0),v200,fine,tool2_ej;
MoveL Offs(p10,user_size,user_size,0),v200,fine,tool2_ej;
MoveL Offs(p10,0,user_size,0),v200,fine,tool2_ej;
MoveL Offs(p10,0,0,0),v200,fine,tool2_ej;
FOR user_ct FROM 50 TO 150 STEP 50 DO
MoveL p10, v200, fine, tool2_ej;
MoveL Offs(p10,user_ct,0,0), v200, fine, tool2_ej;
MoveL Offs(p10,user_ct,user_ct,0), v200, fine, tool2_ej;
MoveL Offs(p10,0,user_ct,0), v200, fine, tool2_ej;
MoveL p10, v200, fine, tool2_ej;
ENDFOR
ENDPROC
ENDMODULE
MODULE MainModule
CONST robtarget p10:=[[545.69,-238.40,663.04],[0.604676,0.463697,0.631768,0.142201],[-1,0,0,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
VAR num user_shape:=0;
VAR num user_count:=0;
PROC main()
AccSet 1, 1;
WHILE TRUE DO
TPErase;
TPWrite "=========Select 1 , 2 or 3=========";
TPReadNum user_shape, " Select shape?";
TPReadNum user_count, " Select count?";
shape user_shape,user_count;
WaitTime 1;
ENDWHILE
ENDPROC
PROC shape(num pa1, num pa2)
FOR user_ct FROM 1 TO pa2 DO
IF pa1=1 THEN
MoveL p10, v200, fine, tool2_ej;
MoveL Offs(p10,150,0,0), v200, fine, tool2_ej;
MoveL Offs(p10,150,150,0), v200, fine, tool2_ej;
MoveL Offs(p10,0,150,0), v200, fine, tool2_ej;
MoveL p10, v200, fine, tool2_ej;
ENDIF
IF pa1=2 THEN
MoveL p10, v200, fine, tool2_ej;
MoveL Offs(p10,0,-150 * Sin(45),-150 * Sin(45)), v200, fine, tool2_ej;
MoveL Offs(p10,0,150 * Sin(45),-150 * Sin(45)), v200, fine, tool2_ej;
MoveL p10, v200, fine, tool2_ej;
ENDIF
IF pa1=3 THEN
MoveL p10, v200, fine, tool2_ej;
MoveC Offs(p10,0,-150,-150), Offs(p10,0,0,-150*2), v200, z10, tool2_ej;
MoveC Offs(p10,0,150,-150), p10, v200, z10, tool2_ej;
ENDIF
ENDFOR
ENDPROC
ENDMODULE
펑션 FUNCTION
수학적 연산을 위한 루틴
FUNC num 함수명(num 파라미터1, num 파라미터2)
RETURN 파라미터1 + 파라미터2;
ENDFUNC
트랩 TRAP
인터럽트 실행을 위한 루틴
CC-LINK 통신
제어판 > 구성 > 파일 > 파라미터 로드… > 파라미터 로드 및 중복 대체 > StatonNo_378B_10 선택 (다시시작 안해도 됨)
제어판 > 구성 > I/O - DeviceNet Command > StatonNo_378B_10 선택 > OccStat_378B_10 에서 Value 를 2로 설정 (점유국수)
제어판 > 구성 > I/O - Signal > 추가 >
Name : do00_gripon
Type of Signal : Digital Output
Assigned to Device : D378B_10
Device Mapping : 0 으로 설정
do01_gripoff 위랑 똑같이 하고 Device Mapping : 1 으로 설정
다시시작
메뉴 > 입력 및 출력 > 보기 > 모든 신호
제어판 > 프로그램 키
키1출력 에 형식:출력, 누른 키: 펄스, 자동 모드에서 허용: 아니오, 디지털 출력: do00_gripon
키2출력 에 형식:출력, 누른 키: 펄스, 자동 모드에서 허용: 아니오, 디지털 출력: do01_gripoff
PLC 연결
기본 설정 시 ABB PLC IP 주소에 연결하기
PulseDO
프로그램 좌측에 HOME 폴더 밑에 Configuration 폴더 > I/O System 에서 내가 설정한 Signal 을 보면 do00_gripon, do01_gripoff 의 정보를 볼 수 있다.
WHILE TRUE DO
PulseDO\PLength:=0.2, do00_gripon;
WaitTime 0.5;
PulseDO\PLength:=0.2, do01_gripoff;
WaitTime 0.5;
ENDWHILE
Comments