이자료는 와우엔시라는 카폐에서 발취했습니다...
준비사항:
머시닝 MDI 모드에서 #500=100; 라고 입력하시고 사이클스타트를 누르십시요
만약 에러가 난다면 마크로옵션이 활성화가 안돼있는것입니다
빨리 AS 문의하셔서 마크로옵션을 풀으세요
요즘은 마크로는 기본사양으로 나오다시피해서 풀어달라고 조르면
못이기는척하고 알려줍니다 옵션이라고 돈주고 사지는마시길...
강좌이름:[마크로로 머신을 찜쪄먹자]
강좌순서
강좌 1부 [마크로로 머신을 찜쪄먹자] 마크로란 무엇인가.
강좌 2부 [마크로로 머신을 찜쪄먹자] 마크로 변수를 알자.
강좌 3부 [마크로로 머신을 찜쪄먹자] 문법과 함수에 대하여.
강좌 4부 [마크로로 머신을 찜쪄먹자] 나만의 G,M 코드 등록법.
강좌 5부 [마크로로 머신을 찜쪄먹자] 실용예제.
====================================================================
1부 [마크로로 머신을 찜쪄먹자] 마크로란 무엇인가.
강좌의 특성상 존칭은 생략합니다.
이해하시리라 믿고............이해못하면 빨리 다른곳으로 휘리릭~~
마크로라는것은 화낙시스템및 기타 NC 에서 사용하는 일종의 프로그램언어이다
PC에는 C,비주얼베이직 , 파스칼 등등의 프로그램의 언어로 필요한 프로그램을
생성해내듯이 화낙시스템및 기타 머시닝에서는 마크로라는것을 이용해 필요한 프로그램을
작성할있다.
그렇다고해서 PC에서처럼 강력한 언어는 아니지만 가공에필요한 최소한의환경을갖춘
인터프리터 언어라고할수도있고
일종의 연속된루틴들을행하는 프로그램리스트라고할수있다.
사실 필자가 마크로프로그램을 처음 접했을때 좀 허접하다라는 생각이 들었었다.
그때 당시 필자는 c나 베이직 파스칼에을 배우던 시절이라...
하지만 머신을 운영하기에는 손색이 없을정도로 있을것은 다있고 충분하다.
왜냐면 마크로로 워드를 작성할일은 없지않은가 말이다.
이 마크로라는것은 어떤조건식이 주어졌을때 그것이 참인지거짓인지를 판단하고
만약 참이라면 어떤행동을하고 아니라면 다른행동을하라 하는것처럼
만약이라는 어떠한조건에 ~이면 ~를하라는 식으로 가정을지어 콘트롤에 명령하는것들의
집합체이다
여기 ~면 ~를 하라는에서
~를 에서 할수있는 일들이란 가공에서 쓰이는 모든코드들과,연산, 멧시지 발생등
머신에서 할수있는 일들은 다할수가 있고
좌표계가100개가 필요하더라도 G54 좌표계하나만 가지고도 다할수있다(G10 기능으로도
할수있지만)
한마디로 머신을 가지고놀수있다
참고로 필자의 머신에서는 공구의 장보정및 워크좌표계 등등 거의 모든일들을
마크로로 자동으로하고있고 따라서 콘트롤러의 옵셋에가서 조작하는일이 거의 없다.
이러한일들의 장점은 유저가 오타의 불안감에서 해방될수있고 기타의 여러실수들로부터
안전하게 해주고 또한 유저의능력을 제품생산에만 주력할수있게 해준다.
밑에글중 주축에있는공구를 또 불렀을경우 에러가안나게하는 방법을 물으신분도
이 마크로를알면 해결할수 있을것이다
자자 기대되지 않는가 마크로의 세계가..
1부를 마치며.
이미 아는것이지만 글로옮기려니 문장실력이 짧아 힘드네요
2부
성원에 힘입어 2부를 시작합니다. 존칭은 생략합니다.
========================================================
== 2부 [마크로로 머신을 찜쪄먹자] 마크로 변수를 알자. ==
========================================================
[변수] 이것이 무엇인가
잘보고 생각해보니 변하는수 라는 말인데
무엇이 변해?
흠! 이것은 변하는수라는 말보다는 숫자를 담을 그릇이라 생각면 더 가깔울것같다.
먼져 변수의 생김새를 보자
#1
#100
#2000
등등....
우끼지 않는가 뭐 저렇게 생겼는지원...아주 흉악하게 생겼다.
PC 언어는 사용자에게 보다 친숙한언어로다가오는데 머시닝변수는 좀 글타.
그래도 어쩌겠는가 요놈을 써먹을라면 적응을해야하지 않겠는가.
자! 그럼 #1 이라는 변수에 10.5라는 숫자를 담아볼까나.
간단히 #1=10.5 라고하면 된다
그럼 #1 은 담부터 즉 10.5 로 인식한다
조금 나아가서 그럼 써먹어보자.
머신을 X방향으로 #1 만큼 움직이고 싶다면?
#1=10.5
G91 GO X#1 라고하면 된다
이것만 보고 뭐하러 그렇게 하냐고 묻는 사람이 있다면
그 사람은 이 강좌의 본질을 이해못하는 사람이라고 봐야겠고 이글보다는 다른글을읽는것이
좀더 유익하다 할것이다.
자 그럼 한발 더 나가서 #1 에다가 10 만큼 더가고싶다면?
2가지 예제를 들겠다
EX1) #1=10.5
G91 G0 X#1+10
EX2) #1=10.5
#1=#1 + 10
G91 G0 X#1
라고하면 된다.
연산은 산수? 에 쓰이는 +, -, *(곱하기), /(나누기)등 대부분의것이 가능하다.
2가지 모두 총20.5가 움직이고 콘트롤러가 혼자계산을하며 움직였다.
자 뭔가 무한한 잠재력과 가능성이 엿보이지않는가?
여기까지 했다면 한가지 궁굼할것이다
저걸 대체 어디다가 작성해서 써먹어야 하는가
결론은 장소를가리지 않는다.
우리가 흔히짜는 가공프로그램 중간에와도되고
심지어는 드릴싸이클(G81) 중간에 위치해도 상관없으며
또는 별도의 프로그램으로 만들어서 나만의 G 코드로 등록할수도있다.
그렇나 이것은 이번강좌의 범위를 벗어나는것이므로 담에 하기로 하고
다음으로 진도를 나가자.
그럼 변수에는 어떤것들이 있을까.
변수에는 프로그램들 사이에서 어떤값을 인수로넘길수있는 LOCAL 변수.
프로그램과 프로그램사이에서 값을공유할수있는 COMMON변수.
기계 고유의 변수인 SYSTEM 변수가있다.
정리하자면
======================================================================
LOCAL (#1 ~ #33)
:인자로 값을 넘겨줄수있고 사용자가 임으로 쓸수있다.
:기계전원을 끄면 저장값이 없어진다.
!!인자란 어떤프로그램을 호출하면서 추가로 넘겨주는 값을 말한다.
EX) G100 X100. Y10.
여기서 G100은 사용자가 만든G코드이고 X100. Y10. 가 인자로 넘어간다
즉 G100 을 호출하면서 호출당하는 넘한테 X100. Y10. 이라는 숫자를 넘겨준다
G100 에 연결된 프로그램이 O9010이라면
호출한넘: G100 X100. Y10. => 호출 O9010
호출당한넘: O9010
G90 G0 X#24 Y#25
M30
라고 했을때 G90 G0 X#24 Y#25 => G90 G0 X100. Y10. 이된다
그럼 X와 #24의 관계는뭔가 그것은 그리어렵지않다
A=#1
B=#2
C=#3
D=#4
E=#5
.
.
.
X=#24
Y=#25
Z=#26
이해가 안가면 좀 골똘히 생각해보라. 생각이 날 것이다
이해를 돕고자 한다면
호출한넘: G100 C100. D10. => 호출 O9010
호출당한넘: O9010
G90 G0 X#3 Y#4
M30
이것은 인자를넘기기 위한 규칙이다. 그리고 이건 필히 이해를 해야할 것이다.
======================================================================
COMMON(#100 ~ #999)
:사용자 마음대로 쓸수있다
:전원을꺼도 값을 기억한다(#500~#999만)
EX) O100
G90 G0 X100. Y10. Z10.
#100=-10. (이부분)
M98 P200
M30
O200
G1 Z#100 F100 => (G1 Z-10. F100) (이부분)
G0 Z10.
M99
보다시피 #100의 값은 프로그램 사이에서 공유되고있다.
또한 값 참조하기가 쉽다
만약 주축툴의 값을 영원히 기억하길원한다면
#500 ~ #999 값 사이에 주축공구번호를 기억시키고
기계전원을 끄더라도 그값은 기억되있다.
물론 기계전원을 키더라도 그값은 살아있다.
#500=#4120 (공구번호 시스템변수)
전원OFF
전원ON
T#500
M6
라고 한다면 분명 에러를 유발할것이다
======================================================================
SYSTEM(#1000 ~ )
: 기계의 좌표,및 시스템적인 값을 읽거나 입력할수있다
: 때로는 읽기만 허용되는 변수도 있다
: 확실히 알고쓰는것이 좋다
위에서와 마찬가지로 공구번호을 알고자한다면
#500=#4120 이라고 하면 된다
만약 주축에 5번 공구가 물려있다면 #500=5 가 입력될것이다.
(그러나 #4120의 실제값은 주축공구가 아니라 T 값이다
T6으로 대기포트에 공구를 위치시켰다면 이값은 6 이 입력된다)
현제의 좌표계를 알고싶다면
#100=#4014 (#4014는 G54~G59 좌표계 정보를 가지고있다)
현제 프로그램좌표계의 X위치를 입력받고자 할때는
(#5041:X,#5042:Y,#5043:Z......현제의 워크좌표계)
#100=#5041
G54 옵셋에서 X 옵셋치를 입력한다면
(#5221:G54의 X오셋,#5222:G54의 Y오셋,#5223:G54의 Z오셋)
#5221=-100. (확인해보면 G54 의 X옵셋에 -100 이 입력되있음을 볼수있다)
(#5021:기계좌표 X,#5022:기계좌표 Y,#5023:기계좌표 Z)
#5221=#5021 (확인해보면 G54 의 X옵셋에 현제의 기계좌표가 입력되있을것이다)
등등.. 거의 모든 시스템요소를 건들수 있게된다.
위의 요소들은 마크로에 있어서 필수항목이며
이것들을 이해못한다면 다음의 진도는 무의미 하다.
그러므로 배우고자 하는 뜻이 있다면 반드시 이해를하고 넘어가도록 해야겠다.
참고로 더많은 시스템 변수를 알고자 한다거나 자세히 알고싶으면
화낙 메뉴얼의 커스텀마크로 항목을 찾아보기 바란다
분명히 말하지만 위에 열거한 시스템 변수는 머시닝의 일부에 지나지 않으며
문헌을 찾아 더 많은 정보를 익히기를 강력 추천한다.
아!!! 힘들다 강좌라는 것이
여기까진 필자나름대로 설명하고자 하였으나 더욱필요하다면
화낙 사용자설명서를 참고하기 바란다
이상으로 2번째 강좌를 마치고 3부에서 만나요.
3부
3부가 좀 늦었읍니다. 일이 바쁘다는 핑계로. ㅎㅎㅎ
리플달아주신 분들께 무척 고맙게 생각합니다.
그리고 예전대로 존칭은 생략하겠읍니다. 습관상
========================================================
강좌 3부 [마크로로 머신을 찜쪄먹자] 문법과 함수에 대하여.
========================================================
먼저번 2부 강좌에서는 변수에대하여 알아보았다.
이번 강좌에서는 프로그램의 흐름과 제어에 대하서 공부해보자.
흐름제어란 무언인가에 대해 잠시 예기를 해보자.
우리는 우리가 작성한 프로그램에 대해 프로그램 스스로가 해석하고
판단하여 적절한 루틴을 실행하기를 원한다.
먼저번 강좌에서도 예기했지만 어떤 판단조건을 주고 그조건에 맞으면 ~을 하고
안맞으면 다른 무었을 하라는것이 바로 흐흠제어 이다.
이것을 통해 우리는 좀더 많은가능성의 조건들을 부여하고
좀더 정확하고 확실한 결과를 가져오는 프로그래밍을 할수있을것이다.
그럼 이제 본격적으로 프로그램을 제어할수있는 문법을 배워보자.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
읽는 독자 스스로가 도대채 난 얼마만큼의 마크로에대한 내공을 쌓았을까 하고
스스로에게 묻는다면 필자가 대답하길
2부를 마스터했다면 50%의 내공을 이 3부를 마스터 한다면 80% 의 내공을 쌓았다고 확신한다.
그리고 나머지 20%로는 경험에 의해 또는 더많은 공부를 통해 이룰수 있을것이다.
참고로 이말을한것은 더많은 내공소유 의욕을 북돗아 주는 의미로 말하였다. !!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
우리가 마크로로 제어할수있는 명령어는 3가지가 있다.
GOTO (무조건 분기)
IF (조건분기, 만약 ~ 이라면) [IF~GOTO, 와 IF ~ THEN 으로 나눌수있다]
WHILE (반복)
이것 3가지뿐이다 그렇니 힘을내서 사용법을 익혀보자.
사용법을 살펴보자면
================================================================================
GOTOn (여기서 n은 시??스 번호이다)
이 제어분은 무조건 n 번으로 이동하라는 뜻이다
EX) GO G90 G40 X10. Y20.
Y10.
GOTO1 (N1 으로 분기)
Z-10.
X100. Y100.
.
.
N1 Z50. (이곳부터 시작)
M30
GOTO 문은 간단하다 더이상 설명하이 필요없을듯 하다.
================================================================================
IF [조건] GOTOn
미 제어문은 이동하긴하는데 만약 조건이 맞으면 이동하란 명령이다.
GOTO 문 앞에 IF (만약) 이란말이 덧붙여졌음을 볼수있다.
다시말하면 조건을 검사하여 조건이 합당하다면 n 으로 분기하고
조건이 맞지않다면 무시하고 다음라인을 실행한다.
EX)
#1=100
IF [#1 EQ 100] GOTO2 (조건식인 #1=100 이 이성립한다면 N2 로 분기하라)
GO G90 X100. Y10.
.
.
. ( 만약 조건식인 [#1=100]이 성립하지 않는다면 제어문은 무시되고
. 순차적으로 다음라인들을 실행하게 된다.
. 이프로그램 에서는 이곳 라인들이 실행되지 않는다 )
.
.
N2 Z50. (이곳으로 점프된다)
M30
우리는 여기서 추가로 알아야 할것이 있는데 그것은 비교연산자 이다.
위에서는 비교연산자로 EQ(같으면) 이 쓰였는데 추가로 비교연산자를 알아보자.
EQ : 같으면 (=) (EX) IF [#1 EQ #2] GOTO5
설명: [#1 = #2] 가 같으면 N5로 분기
NE : 같지 않으면 (≠) (EX) IF [#1 NE #2] GOTO5 설명: [#1 <> #2] 가 같지않으면 N5로 분기
GT : 보다 크면 ( > ) (EX) IF [#1 GT #2] GOTO5 설명: [#1 > #2] #1 이 #2 보다크면 N5로 분기
GE : 같거나 크다 ( >= ) (EX) IF [#1 GE #2] GOTO5 설명: [#1 >= #2] #1 이 #2 보다크거나 같으면 N5로 분기
LT : 보다작다 ( < ) (EX) IF [#1 LT #2] GOTO5 설명: [#1 < #2] #1 이 #2 보다작으면 N5로 분기
LE : 같거나 작다 ( <= ) (EX) IF [#1 LE #2] GOTO5 설명: [#1 <= #2] #1 이 #2 보다작거나 같으면 N5로 분기
이상이며 이 비교연산자만으로도 대부분의 조건을 비교해서 처리할수있을것이라 생각된다.
================================================================================
IF [조건] THEN 할일들
만약 ~라면
이 제어문은 위의 IF [조건] GOTOn 문과 비슷한데 다른점은 분기를 하지않고
하고자 하는것을 바로 처리할수있다는것이다.
EX)
#1=100
IF [#1 EQ 100] THEN #1=#1+200 (만약 #1 은 100 과 같으면 #1에 200을 더해서 #1=300 이 된다)
GO G91 X#1 Y0. (X 방향으로 300 만큼 이동한다.)
N2 Z50.
M30
여기서 주목할것는 2번째 라인인데 조건식이 맞으면 분기하는것이 아니고
더하기 연산을 했다는것이다.
1) IF [#1 EQ #2] GOTO5
2) IF [#1 EQ 100] THEN #2=#3 * 200
이상 위의 2가지 의미를 다시한번 새겨보길 바라며 이것으로 IF문의 사용에대해서는
마치도록 하겠다.
================================================================================
WHEEL [조건] DO m
.
.
END m (여기서 m은 숫자이고 DO 와 END가 쌍을 이루어야 한다.
번호를 붙이는이유는 다중 WHEEL 문에서 이루고있는 쌍을 분간하기 위해서다.)
조금 복잡하다
이것은 조건식이 성립한다면 DO 에서 END 사이의 프로그램을 수행하는데
수행 횟수는 조건이 성립하지 않을때까지 무한 반복으로 수행한다.
조건이 성립하지 않는다면 DO 에서 END 사이의 문장을 뛰어넘는다.
일단 예제를 보자
EX) #1=10 :#1 변수를 10 로 초기화 했다
GO G90 X0. Y0. Z50.
G1 Z10. F100
WHEEL [#1 GT 0] DO1 ( #1 > 0 보다크면 END1 까지 실행한다 처음 #1은 10 이므로 당연 루틴을 실행한다)
G1 Z#1 F50
G3 I-10. J0.
#1=#1-1 ( 한번 실행될때마다 #1자기자신에-1 씩 빼나간다
END1 :WHEEL문으로 되돌린다
N3 M30
위의 마크로는 #1 이 10 에서 순차적으로 1씩 빼나가다가 0 에 이르면 조건식이
성립되지 못하므로 WHEEL 문을 빠져나가 N3 을 실행한다.
그러므로 위에서는 Z1 까지 총 9 번이 실행된다.
또한 WHEEL 문은 다중으로 사용할수가 있다
WHEEL [#1 GT -10] DO 1
WHEEL [#2 GT -10] DO 2
WHEEL [#3 GT -10] DO 3
END 3
END 2
END 1
주의할것은 DO 와 END 가 짝을 이루고 있다는 것이다.
이것으로 제어문을 마치고 이제부턴 연산지령(함수)를 알아보기로 하자.
자 힘을 내자 눈앞에 고지가 있으니.
연산지령이라는것은 빈번히 사용하는 수학적 루틴들을 사용하기좋게 만들어놓은것이라 할수있다.
만약 어떤수의 제곱근을 구한다던가 ,-값을 +로 바꾼다든가,반올림,등등 을 할때
우리는 이 함수를 호출함으로써 간단히 해결할수 있을것이다
연산지령
더하기 : EX) #5=#6+#7
빼기 : EX) #5=#6-#7
곱하기 : EX) #5=#6*#7
나누기 : EX) #5=#6/#7
싸인 : EX) #5=SIN[#7]
아크싸인 : EX) #5=ASIN[#7]
코사인 : EX) #5=COS[#7]
아크코싸인 : EX) #5=ACOS[#7]
탄젠트 : EX) #5=TAN[#7]
아크탄젠트 : EX) #5=ATAN[#7]
제곱근 : EX) #5=SQRT[#7]
절대값 : EX) #5=ABS[#7]
반올림 : EX) #5=ROUND[#7]
소수점이하 절사 : EX) #5=FIX[#7]
소수점이상 절상 : EX) #5=FUP[#7]
등등 (나머지는 크게 쓸일이 없을것으로 판단되어 생략함)
좀더 자세한 사용법은 화낙 메뉴얼을 참조하는것이 좋을듯싶다.
(아 재주좋게 떠넘기는 방법~~~ 공부하세요)
이로써 3부 강좌를 마치기로 한다.
3부 강좌는 좀 부실한것도 같네요 시간도 그렇고 뭐 바쁘다는 핑계로
근데 3부에서 다룬 내용들은 마크로의 핵심이므로 강좌가 부실해도
화낙 매뉴얼에서 더 깊게 공부하시기 바랍니다.
여기까지 오셨다면 마크로의 80%는 정복하신거나 다름 없읍니다
이제 4,5 부가 남았는데 거기에선 좀 가볍게 넘어갈수 있으리라 봅니다
쉽다는 예기죠
그럼 다음 강좌에서 만나요.
4부
4부가 많이늦었지요. 일하랴. 프로젝트 진행하랴.
또 마누라두 챙겨줘야되구 에구 하여간 많이 바쁩니다.
오늘은 맘먹구 4부 올립니다
========================================================
강좌 4부 [마크로로 머신을 찜쪄먹자] 나만의 G,M 코드 등록법.
========================================================
여직까지 우리는 마크로의 변수들과 기본문구들을 익혔다.
이제부터는 이것들을 이용하여 좀더 윤택하게 살아보도록 하겠다.
필자의 경우에는 셋팅용툴인 아큐센타를 이용해서 좌표셋팅을 한다.
보통은 셋팅을 할라치면 일단 원점복귀하고(기계에 따라서)
툴 불러서 툴첸지하고
회전을 시키고 의 과정을 밟을것이다. 그러나 필자는 G100 으로 다한다.
보통유저들의 코드를보자면
G91 G28 Z0.
T20
M6
M3S800 이렇게 될 것이다. 조금 더 편하게하는 유저도 있겠지만은 (M98 P~~~)
크게 안벗어날듯 싶다.
그런데 하루에 ?p십번씩 셋팅을 한다고 치자.
위의 코드만도 MDI 경우 24번의 키입력이 필요하고 10 번셋팅한다면 240번이다.
그리고 프로그램으로 저장해놓고 쓴다하더라도 귀챦기는 마찬가지다.
적어도 필자는 환장하고 돌아버린다. 바복적인걸 실어하는까닭에.
그런데 다행히 해결책이 있으니 그것은 다름아닌 G코드 등록으로 가능하다.
이제 위의 프로그램을 나만의 G코드인 G100 으로 만들어 보자.
G100 코드만으로 위의과정을 수행한다면 조금 덜 환장할것이다.
(적어도 화면을 째려보지 않아도 된다)
쉽게말하자면 G100 으로 위의 프로그램을 호출한다는 예기다.
자 그럼 지금부터 등록을 해볼까나?
잠깐! 등록을 하기전에 자신의 기계 설정파라메타 확인하기 바란다.
먼저 8000 과 9000 번대의 프로그램이 보이고 편집가능하도록 파라메타를 수정해야 한다.
파라메타 수정방법을 모르시는분은 가까운 이웃한테 물어보기 바란다
(참고로 이강좌는 이정도의 능력이있는 유저들을 대상으로한다.)
파라메타번호 3202 의 NE8 , NE9 를 0 으로 셋팅한다.
그러면 8000번과 9000번대의 프로그램이 편집가능해진다.
그리고 편집이 다끝난후에는 다시 1로 변경한다.
이것은 다른사람이 실수로 프로그램을 지우는것을 방지하기 위함이다.
이제 기본준비는 끝났고 G100으로 호출당할 프로그램을 만들어보자.
O9010
M5
G91 G28 Z0. M9
T24 (이것은 사용자에맞게끔 고치세요)
M6
M3S800
M99
(참고로 마크로를 쓸경우에는 T 와 M6 을 구분하는것이 좋습니다.)
이렇게 O9010 에 저장한다. 프로그램은 끝났고
이제 G100 으로 어떤프로그램을 호출할건지 시스템에게 알려주는작업이 필요하다.
다시파라메타 6050 으로가서 100으로 입력한다
셋팅 종료하구 나와서 리셋한번 눌러주면 끝난다.
이제 확인해보자
MDI 에서 G100 입력하고 싸이클스타트 한다.
덜거덕 덜거덕 돌아가다 에어빠지는소리를 듣는 즉 성공한 분들은 희열을 느낄것이다. 축하!!
이제는 아마 눈치챈 독자도 있겠지만
위의 파라메타 6050 과 G100 과 프로그램 9010 의 관계가 궁굼할것이다
그건 다음과같이 규정되어 있다
O9010 에 G 코드를 설정할려면 파라메타 6050 에 등록코자하는 G코드번호를 입력한다
O9011 에 G 코드를 설정할려면 파라메타 6051 에 등록코자하는 G코드번호를 입력한다
O9012 .. 6052 G
O9013 .. 6053 G
O9014 .. 6054 G
O9015 .. 6055 G
O9016 .. 6056 G
O9017 .. 6057 G
O9018 .. 6058 G
O9019 .. 6059 G
위의 프로그램은 O9010 을 파라메타6050 에 100 을 입력함으로써 G100 으로 등록되었다.
알구보면 쉽다.
그렇다면 M 코드는 등록할수 없느냐.. 아니다 할수있다
O9020 에 M 코드를 설정할려면 파라메타 6080 에 등록코자하는 M코드번호를 입력한다
O9021 에 M 코드를 설정할려면 파라메타 6081 에 등록코자하는 M코드번호를 입력한다
O9022 .. 6082 M
O9023 .. 6083 M
O9024 .. 6084 M
O9025 .. 6085 M
O9026 .. 6086 M
O9027 .. 6087 M
O9028 .. 6088 M
O9029 .. 6089 M
또한가지
인수를 지정할수없는 M코드들도 있는데
아래의 번호에등록하면 인수를 사용할수없다.
인수라는것은 앞 강좌에서 설명하였으니 참고하기 바라며
================================================================
O9001 에 M 코드를 설정한다면 파라메타 6071 에 등록코자하는 M코드번호를 입력한다
O9002 .. 6072 M
O9003 .. 6073 M
O9004 .. 6074 M
O9005 .. 6075 M
O9006 .. 6076 M
O9007 .. 6077 M
O9008 .. 6078 M
O9009 .. 6079 M
================================================================
이것들은 인수지정이 불가능하다.
인수지정에 대해 잠시 설명을 하자면.
위에서 우리는 G100 으로 인수없이 호출했었다.
그런데 G100 X10. 이런식으로 호출할수가 있다
그럼 X10은 #24 의 변수에 담겨서 O9010 에 넘겨진다
#24를 받은 O9010은 #24 를 가지고 어떤짓이라도 할수있을 것이다.
이것을 설명하는 이유는 바로위의 인수지정이
가능한 G,M 코드와 불가능한 M 코드를 설명하기 위해서 이다.
그리고 M6 처럼 툴첸지 코드에 의해서도 마크로를 호출할수있다
만약 M6 코드에 O9001 이호출되길원한다면
파라메타 6071 번에 6 이라고 입력하면 된다.
그러면 툴첸지코드인 M6 이 실행되면 O9001 이 실행될것이다.
또한 T코드에 의해서도 9000 을 호출할수가 있는데
파라메타 6001 #5 TCS 를 1로두면
T1,T2,T3..... 등이 실행될때 O9000 을 호출한다.
우리는 이런 기능들을 두려워하지말고 실컨두둘겨서
말잘듣게 만들 필요가 있다.
길들이기가 힘들지 한번 길들이면 우리가의도하는대로 머신은 달릴것이다.
이상으로 4부 G코드 등록법강좌를 끝...
강좌 5부
[마크로로 머신을 찜쪄먹자] 실용예제.
마지막입니다..아...우선..제가 이렇게 글쓰게 된점 무자게 죄송하게
생각하고요...
다른 고수님들 이글을 보시게 되신다믄 너무 욕은 말아주세요...
조금이나마 정보공유를 위해서 쓴것이니까요...
죄송합니다!! 그래도 끝까지 읽어주시면 감사하겠네요....
하늘달님에게 위임받아서 하는거라 욕은 받아들이겠으나..돌은사양합니다 ㅎ
그리고 저에게 기회를 준 하늘달님에게 감사하다는 말씀 여기서
다시 한번 올립니다 ^^
엄청 늦었지요?? 그럼 시작하겠습니다..
강좌 5부 [마크로로 머신을 찜쪄먹자] 실용예제.
실용예제라고 해서 별다를꺼 없다는거 다들 알고 계시리라 믿고 시작
하겠습니다...
실용예제는 어느한가지를 기준으로 삼아 다루기 힘들어서..
저희 회사에서 쓰는..G104번을 가지고 다루겠습니다..
G104...요것이 무엇이냐... 저희회사에서 쓰는 XY SENTER 셋팅할때 쓰는겁니다.
강좌 4부에서 나와있듯이..
G100을 등록시키듯이..파라메터에서 등록시켜주시면 되고요.
저희는 이 104번을 프로그램번호 O9014에 연결시켜 쓰는법을 배워보고
예제 풀이를 하는것으로 강좌를 마칠까 합니다...
자~ 그럼 들어갑시다!!~~
우선 첨해줘야할것이..파라메터 설정입니다..
강좌4부에서 나와있듯이..9000번대플그램을 수정편집가능하게 설정해놓으시고요
O9010 에 G 코드를 설정할려면 파라메타 6050 에 등록코자하는 G코드번호를 입력한다
O9011 에 G 코드를 설정할려면 파라메타 6051 에 등록코자하는 G코드번호를 입력한다
O9012 .. 6052 G
O9013 .. 6053 G
O9014 .. 6054 G
O9015 .. 6055 G
O9016 .. 6056 G
O9017 .. 6057 G
O9018 .. 6058 G
O9019 .. 6059 G
여기서 보면 알수 있듯이..파라메터 번호 6054에 104만 쓰면 되겠죠??
이리하게되믄 G104라는 코드를 만나게 되면 프로그램번호 O9014번을
호출할수 있겠끔 됩니다...
아중요한거...화낙컨트롤러의 18,21M 기준이라는거 다들 알고 계시죠??
음음...그럼 모든 준비는 끝났습니다...
마크로 플그램을 만들고 전송시켜서 사용하면 됩니다...
그럼 저희가 쓰는 O9014번의 플그램을 소개하겠습니다..
O9014 G#4S1200M3
IF[#4EQ54]THEN#100=5220
IF[#4EQ55]THEN#100=5240
IF[#4EQ56]THEN#100=5260
IF[#4EQ57]THEN#100=5280
IF[#4EQ58]THEN#100=5300
IF[#4EQ59]THEN#100=5320
IF[#24EQ0]GOTO2
N1 #131=#5021
G91G0Z#26
#132=#5021
#[1+#100]=[[#131+#132]/2]
#1=ABS[#131-#132]-10
G0Z#26
G90X0.
N2 IF[#25EQ0]GOTO3
#131=#5022
G91Z#26
#132=#5022
#[2+#100]=[[#131+#132]/2]
#2=ABS[#131-#132]-10
Z#26
G90Y0.
#101=#2
#100=#1
N3 M99
뭐 희한한 문자도 들어가 있고 연산도 들가있고..영문자도 들가있고...
쩝...저도 한때 이거 첨들어다 볼때..이것이 다 뭐다냐...하는 식으로
들여봤으니..너무 걱정마시고..
그리고 강좌1부에서 4부까지...모두다 독파하시고..연습하시고 응용하시분들이라면
조금만 보면 이해하시리라 믿습니다..
그럼 정말 중요한거 시작!~~ ㅎㅎ
저 플그램이 호출될때에는 저희는 이런식으로 호출을 하게합니다..
G104 I54 Z50. X1.Y1.
M0
이것이 저희는 포스트를 수정해 항상 프로그램 선두에 나오게끔 했고요..
그럼 해석들갑니다..
G104 (O9014를 호출하게끔 한다)
I54 (숫자는 보정값에 해당하는 54~59를 의미합니다..
55번 좌표에 잡고 싶으시다면 I54를 I55로 바꾸어주면 되겠죠?
그리고 I라는 영문자는 인수지정1에 해당하는 #4라는 변수의 의미를
가지고 있습니다..해서 I라는 변수의 영문자를 바꾸어줘도 상관
없겠지만서도 마크로 플그램의 I와 관련된것들도 수정해야 하니..
이건 회원님들이 바꾸어 쓰셔도 무관합니다.)
Z50 (이 문구보니까 생각나시는 없으십니까? 이것도 마찬가지로 I54라는 것과
똑같다고 보면됩니다..단지 사용되는 의미만 다를뿐이지요..
이건 해석 하지 않겠습니다..여러분들이 알아보시기 바랍니다)
X1.Y1. (이거 역시 비슷하지만 한가지 ?E붙인다면 여기서 숫자 1들을 0으로
바꿀시 어는하나만 셋팅하게됩니다..그건 밑에가서 더 설명하기로 하고..
넘어가겠습니다)
호출하는 플그램의 설명은 끝이났고요...
호출당한놈을 풀이해봅시다...
O9014 G#4S1200M3 (G#4 호출한놈의 I값을 받아들여와 G54~59가 되겠죠?)
S1200M3 회전하라는 의미겠죠 )
IF[#4EQ54]THEN#100=5220 (만약 I값이 54와 같으면 #100은 5220이다
뭔말이더냐? 이것이..
쉽게 설명하겠습니다. 그러니까 호출한놈의 I값이
54이면 이문구가 실행이 됩니다..
#100=5220 이거는 #100이라는 COMMON변수에
5220이라는 숫자를 넣어놓으라는 얘기져..
그럼 이 5220은 뭐냐? 그건 밑으로 내려가서
설명 하도록 하겠습니다.)
IF[#4EQ55]THEN#100=5240 ---
IF[#4EQ56]THEN#100=5260 ㅣ
IF[#4EQ57]THEN#100=5280 ㅣ 위와 같습니다.다만 좌표계 55~59를 행하는 문구입니다.
IF[#4EQ58]THEN#100=5300 ㅣ
IF[#4EQ59]THEN#100=5320 ---
IF[#24EQ0]GOTO2 (만약 #24 나왔네요..얼렁책찾아보십시요..#24가 인수지정에
뭐라고 나왔는지요..바로 X로 나와있을껍니다..
#24가 0하고같으면 2번으로 가라는 문구죠..
나머지는 2번으로 가서 설명드리겠습니다..)
N1 #131=#5021 (#131이라는 변수에 #5021값을 저장합니다..#5021은 무엇이냐.
현재의 기계좌표값을 의미합니다.
책에 보시면 아시겠지만.
#5021=기계좌표 x위치 시스템변수
#5022=기계좌표 y위치 시스템변수
#5023=기계좌표 z위치 시스템변수
이런식의로 #5028까지 이루어집니다..
이때..공작물의 X방향의 첫번째를 터치했을경우입니다..)
G91G0Z#26 (터치했으니..뜬담에 두번째 터치하로 가야겠죠?
G91G0은 아실테고..Z#26 여기의 Z하고 호출한놈의 Z하고
다른 Z입니다..왜냐하면 호출한놈의 Z는
호출당한놈한테 그 값을 넘겨줄려고..임의의 인수지정을 이용해
써준거 뿐입니다..고로 호출한놈의 Z를 아무거나 써도 무난하다는
얘기겠죠...허나..우리가 보기 편하게 이해하기 편하게...
실제로 사용하는 Z값처럼 보이게끔..그렇게 만들어줬을뿐입니다..
해서 다시 해석으로 넘어가면 Z#26 ㅡㅡ>#26이 가지고 있는값을
달라는 소리죠..위에 호출한놈의 Z값..즉 #26의 값을 가지고 오게되믄
프로그램은 이렇게 인식을 하게 됩니다.
G91G0Z50.
이렇게 되서 터치한후 터치한곳에서 50만큼 뜨게 되는것이죠. )
#132=#5021 (#132이라는 변수에 #5021값을 저장합니다 위내용과 동일합니다
다만 #131이 #132로 바뀐거 빼고는요..
이건 공작물의 X방향 2번째를 터치했으니..그값이 #131에 저장
이 되믄 첫번째 터치한곳에 좌표는 없어지므로..밑에 계산이
이루어 지지가 않겠죠? 해서 다른변수를 써서 그변수안에 임의로
저장을 시키는겁니다..)
#[1+#100]=[[#131+#132]/2]
(어라? 이번에는 터치했는데 안뜨네여? 뜨는건 보시면 알겠지만
밑에 밑에 있습니다..이유는 두곳을 터치해서 그값을 알았으니
계산하고 떠도 상관없으니...이문구들을 먼저 넣어준것입니다.
사용하시는 님들 뜻대로 수정하셔도 상관은 없습니다.
먼저 뜨고 계산해도..요..^^
그럼 문구를 해석하게되면..
#[1+#100] 연산들어갑니다..정신바짝 차리세요!!! 농담이고요..
이렇게 되믄 아까 위에 #100이 뭐였습니까? (좌표계가 54라는
가정하에...) 5220이였죠?
그럼 5220+1이 되겠죠...해서 나오는 변수는 #5221이 됩니다.
왜 구지 저렇게 머리아프게 연산을 써가면서 해놨을까는
여러분들 몫입니다...생각하시고 공부하셨으면 하는 작은 바램입니다.
#5221 이 시스템변수 나오자마자 책찾아보시는 분 분명 계셨을껍니다.
#5221 시스템변수는 G54에 해당하는 X WORK원점 OFFSET량이
되겠습니다 ^^
해서 #5221=[[#131+#132]/2] 이런식이면 변수131번에 있는 값더하기
132번을 한값에 2로 나누어주게 되면 공작물 X의 정중앙의 값을
구할수 있겠죠?? 그값을 시스템변수 #5221번에다가 넣어주게되는
겁니다..해보시면 아시겠지만 G54값에 그값이 들어가 있습니다)
#1=ABS[#131-#132]-10
(이건 무엇이더냐...사실 없어도 되는 문구 이기는 하나
있음 요긴하게 쓰입니다..
#1에 ABS 말그대로 절대값이죠 -값도 +값으로 나오게끔해주는
그런겁니다..암튼...
131값에132값을 빼고 10은 뺀다? 10은 아큐센터의 Ø겠죠...
이리하게되믄 그 공작물의 크기를 알수 있습니다..
왜 그리되는지는 설명않겠습니다.
저보다 고수분들도 많으신데..너무 건방떤다고 생각하시면 안되니..
죄송하네요~^^~ 조금만 생각해보세요..)
G0Z#26 (이제야 뜨네요...설명이 길다보니 ㅡ.ㅡ;;;
말 주변이 없어서 그런니다..이해부탁합니다 )
G90X0. (어라 요놈은 왜 들어가 있지? 솔직히..저희는
사람입니다..눈으로 보지 않고서여 어찌 믿을수
있겠습니까?
나 못믿겠다.너 가봐라..이겁니다..0점인 X좌표로..)
N2 IF[#25EQ0]GOTO3
(어렵게 어렵게 2번으로 왔습니다.. 얼레리 위에서
2번에 가서 설명한다더니..이건 또 무엇입니까?
생각해보세요 첨에 #24가 0이였음..그니까..
호출한놈의 X1.Y1 에서 X0.Y1.이면 바로 2번으로분기가
되서 밑에 문구를 실행하겠죠? Y은 1이니까.. 저 IF문
하고는 맞지가 않으니까요..
여기서~! 아~하고 탄성을 지르시는 분이 있으시다면
그 분 마크로 공부 열심히 하신겁니다...^^
맞습니다..자신이 X값만 센터로 잡고 싶으면 구지 Y에다가
터치터치하고 할필요 없지 않습니까? 이럴때 호출한놈의
X1.Y1.이라는 기본문구에서 저희가 수정해서 사용하는거지요
X센터만 잡고싶으시다면 Y0으로 Y만 잡고 싶으시다면
X0.으로 이런식이면 됩니다..
그렇담 이문구도 이해가 되시죠???
그럼 넘어가겠습니다...)
#131=#5022 (이 밑으로는 위에설명한거하고 다 똑같습니다..
다만 시스템변수 X값에서 Y값으로 바뀐거 빼고는요..
당연 X잡았으니..Y 잡아야겠죠..^^
Y첫번째 터치합니다)
G91Z#26 (Y한번 터치후 뜹니다)
#132=#5022 (Y 두번째 터치합니다)
#[2+#100]=[[#131+#132]/2] --
ㅣ 계산합니다 ^^ 물론 재료크기도나옵니다.
#2=ABS[#131-#132]-10 --
Z#26 (뜹니다..)
G90Y0. (못 믿겠어요!!! 가운데로 와주세요~!!! 갑니다~ )
#103=#2 --
ㅣ-- 있어도 그만 없어도 그만입니다..#1,#2 에 저장해 있던 재료크기를
#104=#1 -- #103,#104에다가 다시한번 넣어준겁니다..
N3 M99
(다했으니 끝내야죠 ^^ G104 밑에 문구 M0를 만나
회전등 암튼 STOP하게 되겠죠?)
!! 아 정말 중요한거..이 G104을 쓰실경우는 싱글블럭을 ON상태에 두셔야합니다...
안그럼 지맘대로 움직이다가 끝나죠 ㅎㅎ
해서 여러분들에게 공부조금만 더 하시라고 숙제 하나 내드릴라고 합니다..
저희는 참고로 싱글블럭 안넣습니다..
않넣어도 멈추게끔 만들어주는 시스템 변수가 있습니다...
그 변수문구를 중간중간마다 넣어주면 되는것이죠 ^^;;
그럼 한번 찾아보시길 바랍니다..
!! 어느 곳에서 터치가 이루어지는것인가를 설명으로 길었던 마크로강좌를 마칠까 합니다...
자!! 마지막!!들어갑시다!!~~
O9014 G#4S1200M3 (O9014가 호출하게 되믄(싱글블럭 ON상태) 바로 X첫번째 터치하세요.)
IF[#4EQ54]THEN#100=5220
IF[#4EQ55]THEN#100=5240
IF[#4EQ56]THEN#100=5260
IF[#4EQ57]THEN#100=5280
IF[#4EQ58]THEN#100=5300
IF[#4EQ59]THEN#100=5320
IF[#24EQ0]GOTO2
N1 #131=#5021 (터치했음 다시 자동으로와 스타트~!!)
G91G0Z#26 (누름과 동시에 뜨겠죠?)
#132=#5021 (두번째 터치하러 가세여~수동으로~~!!)
#[1+#100]=[[#131+#132]/2]
#1=ABS[#131-#132]-10
G0Z#26 (자동놓고 스타트~!! 뜨겠죠? 순식간에 계산해버리고 뜹니다.)
G90X0. (다시한번 스타뜨~~ 가운데로 옵니다)
N2 IF[#25EQ0]GOTO3
#131=#5022
G91Z#26
#132=#5022
#[2+#100]=[[#131+#132]/2]
#2=ABS[#131-#132]-10
Z#26
G90Y0.
#101=#2
#100=#1
N3 M99 (Y는 똑같으니..설명 안할께요~ ^^)
그럼...다 끝이난거 같은데...음...내가 다시한번 읽어봐도 참 정리 안되네요...
이해하시고 봐주시면 감사하겠습니다...
2004년 다 지나가고 있습니다....
모두들 마무리들 잘하시고~~~
내년에는 모두들 대성하시기를 꼭 빌겠습니다...그럼
전..이만..글 길어지면 싫어하시잖아요 ㅎㅎ
아 다시한번 무엇보다도 제가 이런글 쓰게 되서 정말 죄송하게 생각하고요...
고수님들이 보시고 잘못된게 있으시면 따끔한 질책바랍니다...
정말이지...창피하네요...너무 건방지다고 생각안하셨으면 합니다..
그럼 정말 끝!!입니다... 긴글 읽어주셔서 감사합니다..
HAPPY NEW YEAR~~!!!