3 분 소요

Hits

RobotStudio

ABB 로봇 연결

20241217_01

연결 요청 및 적용

20241217_02

새파일 만들기

20241217_03

내 컴퓨터에서 ABB 로봇에 파일 저장

20241217_04

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

인터럽트 실행을 위한 루틴

제어판 > 구성 > 파일 > 파라미터 로드… > 파라미터 로드 및 중복 대체 > 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 연결

20241217_05

기본 설정 시 ABB PLC IP 주소에 연결하기
20241217_11

20241217_12

20241217_06

20241217_07

20241217_08
20241217_09

PulseDO

프로그램 좌측에 HOME 폴더 밑에 Configuration 폴더 > I/O System 에서 내가 설정한 Signal 을 보면 do00_gripon, do01_gripoff 의 정보를 볼 수 있다.

20241217_10

WHILE TRUE DO
	PulseDO\PLength:=0.2, do00_gripon;
	WaitTime 0.5;

	PulseDO\PLength:=0.2, do01_gripoff;
	WaitTime 0.5;
ENDWHILE

태그:

카테고리:

업데이트:

Comments