전체 글 33

VBA Code: 날짜를 인수로 받아 요일을 반환하는 함수

엑셀에 weekday라는 내장 함수가 있는데요, 이 함수는 인수로 주어진 날짜가 일요일이면 1, 화요일이면 3, 이런식으로 번호를 반환합니다. 이를 응용해서 ChooseWeekday란 함수를 간단히 만들어 보았습니다. Function ChooseWeekday(ByVal dateValue As Date) As String Dim weekdayIndex As Integer weekdayIndex = Weekday(dateValue) Select Case weekdayIndex Case 1 ChooseWeekday = "일" Case 2 ChooseWeekday = "월" Case 3 ChooseWeekday = "화" Case 4 ChooseWeekday = "수" Case 5 ChooseWeekday = ..

KUKA KRL 문법: Program 실행 흐름 제어 004 - REPEAT ... UNTIL

오늘 소개해 드릴 내용은 KRL에서 제공하는 또다른 반복문 REPEAT ... UNTIL 입니다. LOOP 반복문은 조건 없이 사용하면 무한반복 구문이 되는 반면, REPEAT ... UNTIL의 경우 1회 반복할 때마다 다시 반복할지 여부를 확인하는 조건문이 필수로 들어가는 점이 다릅니다. 예를 보겠습니다. REPEAT ... UNTIL은 코드를 1회 반복 후 UNTIL뒤에 나오는 조건문 결과가 FALSE이면 반복을 계속합니다. UNTIL뒤에 나오는 조건문 결과가 TRUE이면 반복을 멈추고 다음 코드를 진행합니다. 아래 코드는 A 값을 1씩 증가시키다가 A의 값이 100보다 크면 REPEAT ... UNTIL을 빠져나갑니다. A=1 REPEAT A=A+1 UNTIL A>100 반복문을 빠져나온 후 A의..

KUKA KRL 문법: Program 실행 흐름 제어 003 - LOOP

현대의 프로그래밍은 조건문과 반복문으로 이루어 졌다고 해도 과언이 아닌데요, 앞서 조건문(IF와 SWITCH) 2가지를 다루었으니 이제 KRL의 반복문 중 하나인 LOOP 문을 소개해드리겠습니다. A의 값에 1을 넣어주고 A의 값을 계속해서 1씩 늘려주고 싶다고 가정해 보겠습니다. 가장 쉬운 방법은 아래와 같이 다소 터프하고 정직한(?) 코드를 생각해 볼 수 있습니다. A=1 A=2 A=3 A=4 ... 우리가 프로그래밍을 하는 이유는 사람이 잘 못하는 반복적인 작업을 컴퓨터에게 대신 시키려는 것인데, 위의 코드로 A값이 10,000까지 가게한다면 글자 그대로 10,000줄의 코드가 필요합니다. 자, 이제 LOOP 문을 투입할 차례 입니다. 아래 예제는 LOOP 문의 사용예제 입니다. A의 값에 1을 넣..

KUKA KRL 문법: Program 실행 흐름 제어 002 - SWITCH

이번에는 SWITCH 문에 대해 알아 보겠습니다. IF 문은 무엇이든 비교할 수 있지만 SWITCH 문은 비교대상이 INT(정수형), CHAR(문자형), ENUM(열거형) 3가지 데이터 형식으로 제한됩니다. 비교대상이 제한적인 SWITCH 문이 왜 필요한가 싶지만 SWITCH 문을 사용하면 코드가 간결해 집니다. 아래 예제는 VERSION 변수에 저장된 값에 따라 SWITCH 문으로 프로그램 실행 흐름을 제어하는 사용예시 입니다. VERSION 값이 1이면 UP_1()을, VERSION 값이 2이면 UP_2()를 실행합니다. SWITCH VERSION CASE 1 UP_1() CASE 2 UP_2() ENDSWITCH IF 문에서는 ELSE를 사용하여 IF 조건에 해당하지 않을 때 실행한다면, SWITC..

KUKA KRL 문법: Program 실행 흐름 제어 001 - IF

프로그램 실행 흐름 제어라고 하면 아마 가장먼저 IF 구문을 떠올리실 텐데요, KRL에도 IF 문이 있습니다. 다른 언어와 구분되는 특징은 너무 아쉽게도 ELSE IF 구문이 없습니다.ㅠㅠ 먼저 가장 기본적인 IF 문의 구조 입니다. A의 값이 1이면, B에 2를 대입합니다. IF A==1 THEN B=2 ENDIF ELSE 구문을 추가할 수도 있습니다. A의 값이 1이면 B에 2를 대입하고, A의 값이 1이 아닌 다른 값이면 B에 3을 대입합니다. IF A==1 THEN B=2 ELSE B=3 ENDIF ELSE IF 구문은 없지만, IF 문의 중첩이 가능하기 때문에 아래와 같은 구조로 3가지 이상의 조건을 걸 수 있습니다. A의 값이 1이면 B에 2를 대입하고, A의 값이 2이면 B에 3을 대입. A..

KUKA KRL 문법: 들어가며

제가 처음 KUKA KRL 문법을 배울 때 어설픈 한국어 번역본 메뉴얼 외에는 마땅한 자료가 없어서 초반에 생각지도 못한 진입장벽이 많았습니다. 영문 메뉴얼을 구해 번역해 가며, 실제 로봇을 움직이면서 하나하나 테스트 한 배움의 내용을 하나씩 기록해 보겠습니다. 아마 아주 높은 확률로 이 블로그를 찾아오신 분들은 Yaskawa나 FANUC 로봇, 또는 다른 제조사의 제품을 이미 다루어보신 분들이실 것입니다. 제가 Yaskawa나 FANUC 로봇을 사용해 보셨을 것이라고 추정한 것은 한국 로봇시장 점유율이 대략 Yaskawa > FANUC > ABB > KUKA 순이기 때문 입니다.(HD 현대중공업의 경우 현대 계열사 공장에는 많이 쓰는데 다른 사업장에서는 그리 많이 사용되지 않아 제외 하였습니다.) 프로..

KUKA KRL 현재 로봇 위치를 지속적으로 PLC에게 알려 주려면

지난번 포스팅에서 로봇의 현재 위치가 특정 티칭위치 근처에 있는지 반환하는 함수를 소개해 드렸습니다. https://dsseo.tistory.com/6 KUKA KRL 현재위치가 특정 티칭위치 근처에 있는지 확인하는 함수 좌표공간에서 두 점 사이의 거리를 구하는 공식을 이용하여 로봇의 TCP가 특정 티칭위치 근처에 있는지 확인하는 함수를 소개합니다. 아래 함수는 첫번째 인수로 거리값을 mm로 받고, 두번째 인 dsseo.tistory.com 이번에는 해당 함수를 활용하여 지속적으로 PLC에게 로봇의 위치를 알려주는 방법을 소개해 드립니다. 산업용 로봇은 티칭된 위치에 있을 때 가장 안전 합니다. 로봇이 정지해 있을 때 누군가가 Jogging으로 로봇을 이도저도 아닌 위치로 이동시켜 두었다면, 해당위치에서..

VBA Code: 엑셀 파일 연결 끊기가 안될 때 문제 해결

지난번 포스팅에서 엑셀 파일을 새롭게 생성하지 않고 여러사람이 작업을 하고, 또 작업본을 다른 이름으로 저장해서 사용할 때 시트복사시 이름충돌에 대한 문제를 해소할 수 있는 VBA Code 를 소개해 드렸는데요, 오늘은 엑셀파일 링크가 깨져서 데이터 연결을 끊어도 끊어지지 않는 문제를 해결할 VBA Code를 소개해 드립니다. 경험상 해당 문제는 회사 파일 서버에 위치한 엑셀 파일을 링크하거나, 웹 드라이브에 있는 엑셀 파일에 링크가 걸려있는 파일에서 문제(ex. 서버의 특정 디렉토리에 파일이 저장되어 있다가 해당 파일이 다른 곳으로 옮겨진 경우)가 되는데요, 아래에 소개해 드릴 코드로 간단히 해결할 수 있습니다. 먼저 파일 연결에 문제가 있는 파일을 열면 아래와 같은 경고를 만나게 됩니다. '콘텐츠 사..

KUKA KRL 현재 로봇 위치가 특정 티칭위치 근처에 있는지 확인하는 함수

좌표공간에서 두 점 사이의 거리를 구하는 공식을 이용하여 로봇의 TCP가 특정 티칭위치 근처에 있는지 확인하는 함수를 소개합니다. 아래 함수는 첫번째 인수로 거리값을 mm로 받고, 두번째 인수로 티칭 포지션을 받습니다. GLOBAL DEFFCT BOOL CHECK_LOCATION1(rDistance:IN,pCheckPos:IN) BOOL bReturnVal REAL X1,X2,Y1,Y2,Z1,Z2,rCalResult,rDistance E6POS pCheckPos bReturnVal=FALSE X1=$POS_ACT_MES.X Y1=$POS_ACT_MES.Y Z1=$POS_ACT_MES.Z X2=pCheckPos.X Y2=pCheckPos.Y Z2=pCheckPos.Z rCalResult=SQRT((X1-X..

VBA Code: 엑셀 시트 복사시 이름 충돌 해결을 위한

엑셀 파일을 새롭게 생성하지 않고 여러사람이 작업을 하고, 또 작업본을 다른 이름으로 저장해서 사용하다 보면 시트복사시 아래와 같은 알림 메세지가 떠서 복사할 때마다 번거로운 상황이 생깁니다. 이름 관리자에 들어가 보면 보통은 아래와 같이 참조가 깨진 이름 목록들이 나와있고 전체 선택 후 삭제하면 시트 복사시 에러 메시지가 없어집니다. 문제는, 이름을 모두 삭제하고 아래와 같이 참조가 깨진 이름이 더이상 목록에 없는데도 에러 메시지가 발생하는 경우가 있다는 것입니다. 이 때는 VBA창을 열고 아래 코드를 실행해 주면 이름 관리자에서 보이지 않는 이름들이 삭제되어 문제가 해결 됩니다. Sub ShowNames() Dim areaName As Name For Each areaName In ThisWorkbo..