티스토리 뷰
지난글에서 포스트 수정을 위한 프로그램과 기본적인 내용에 대해 이야기 했습니다.
VSCode Extension에 대한 내용과 변수 관련 내용은 지난글 참조 바랍니다.
G-Code 행 번호 처리
행 번호[N] 사용 유무와 옵션에 대해
G-Code에 행번호 N001,, 와 같은 행 번호에 대한 컨트롤 내용은 대부분 GPP파일의 초반부 변수할당 이후에 있습니다.
blknum_gen = false
blknum_f = '5.0(p)'
blknum_letter = 'N'
blknum_exist = true
blknum = 1
blknum_delta = 1
blknum_max = 3200000
위 코드가 줄 번호와 관련된 코드입니다. 사용하시는 GPP파일에서 없는 코드가 있을수 있습니다.
- blknum_gen = false
- 행 번호의 사용 유무를 나타냅니다.
- false가 되어있으면 동작 하지 않고 true로 되어있으면 행번호를 작성합니다.
- blknum_f = '5.0(p)'
- 행 번호의 숫자 형식에 대한 설정입니다.
- 이 부분은 자릿수 표현 부분에서 상세히 다루겠습니다.
- blknum_letter = 'N'
- 행 번호 앞 문자를 어떤 문자로 쓸지 정합니다.
- N 이 외에 문자를 쓸수 있으며 N이 기본값이라 이 코드가 없으면 N으로 출력 됩니다.
- blknum_exist = true
- 이 코드를 false로 쓸일이 없을것 같은데 행 번호의 동작여부를 담당합니다.
숫자의 증가를 일시적으로 억제할때 사용합니다.
- 이 코드를 false로 쓸일이 없을것 같은데 행 번호의 동작여부를 담당합니다.
- blknum = 1
- 시작번호를 설정합니다.
- blknum_delta = 1
- 증가 번호를 설정합니다.
- 10으로 하면 10씩 증가 됩니다.
- blknum_max = 3200000
- 행 번호의 최대 숫자 입니다.
G-Code로 표현되는 행의 표현방법
컴퓨터가 계산을 하고 결과값을 코드나 문자로 사용자에게 표시하는 방법에 대한 내용입니다.
코드를 보면 {nl, 이 있고 {nb, 가 있습니다. {} 대괄호 내의 내용이 G-Code 파일로 출력 된다고 이해하시면 됩니다.
nl은 NewLine 이고, nb는 NewBlock 입니다.
- nb : 기계에 필요한 코드
- N001 과 같이 행번호가 앞에 붙는 G-Code 내용을 출력할때 사용합니다.
- nl : 사람에게 필요한 내용입니다.
- 설명처럼 행 번호가 붙지 않는 내용들을 출력할때 사용합니다.
- ' ' , " " 문자 앞뒤의 이런 따옴표는 문자를 묶을때 사용합니다.
- 작은 따옴표나 큰 따옴표 아무것이나 사용해도 되지만 혼용할수는 없습니다.
- ' " 이런식으로 작은따옴표로 시작해 큰 따옴표로 혼용하면 오류가 발생합니다.
- 두번째줄 {nb, 'G17 G80 G40 G49 ' } 이렇게 되어있는 줄을 다시 보자면 G17 G80 G40 G49라는 문자를 출력하는 코드입니다. 그 아래 두줄도 마찬가지입니다.
- @start_of_file 이라는 위의 함수 내용은 program_number라는 변수 이외에는 모든 내용이 계산에 의해 작성된 코드 없이 문자를 출력하는 코드만 있습니다.
;는 주석 표시로 행의 ; 세미콜론 이후의 모든 내용은 컴퓨터가 인식하지 않습니다. (지난글 참조)
자릿수 표시 형식
포스트에서 사용하는 표시 형식은 일반적인 프로그램 형식이 아니라 독특한 스타일을 사용합니다. 이 부분이 사전 지식없이 보면 이해하기 어려운 부분이기도 합니다.
위 코드가 자리수 표시에 대한 설정입니다. 실제 사용하는 gpp파일에는 더 긴 코드가 작성되어 있을것이고 내용도 회사마다, 작업자, 혹은 장비마다 다 다르게 적용되어있을 수 있습니다.
xpos_f 가 x좌표 변수입니다. ' < x>5.3' 이 부분이 표시 형식 설정 부분 입니다. 먼저 간단히 설명 하자면 X 좌표값 앞에 공백 한칸이 있고 X라는 문자가 표시 되고, 소숫점위로 5자리, 소숫점 아래 3자리를 표시한다고 정한겁니다. 이는 x좌표값 변수에 실제 값이 아나라 표시 형식에 대한 설정부분입니다.
아래 표시 형식의 설정의 예와 그 설명입니다.
- xpos_f = '5.3'
- 소수 앞자리 5자리, 소수 아래 3자리
- 변수에 123.456 입력시
- 123.456이 출력됨
- ex)99999.999로 표시
- xpos_f = '8/5.7/4'
- 소수 앞자리 총 자릿수 8자리중 최소 5자리 표시, 소수 아래 총 7자리중 최소 4자리 표시
- 변수에 123.456 입력시
- 00123.4560이 출력됨.
- xpos_f = '+5.3'
- 숫자앞 +가 있으면 양수앞에도 + 표시됨.
- 변수에 123.456 입력시
- +123.456 출력됨
- xpos_f = 'z5.5'
- 숫자앞 z가 있으면 공백을 0으로 채움
- 변수에 123.456 입력시
- 00123.456 출력됨
- xpos_f = '5.5z'
- 숫자뒤 z가 있으면 공백을 0으로 채움
- 변수에 123.456 입력시
- 123.45600 출력됨
- xpos_f = '5.3(*2)'
- 해당 수만큼 곱하여 출력
- 변수에 123.456 입력시
- 246.912 출력됨
- xpos_f = '5.3(/2)'
- 해당 수만큼 나누어 출력
- 변수에 123.456 입력시
- 62.728 출력됨
- xpos_f = '5.3(d)'
- 값이 0일때 x값 전체를 삭제할때 사용
- 변수에 123.456 입력시
- 해당 값이 전체 삭제됨.
- xpos_f = '5.3(n)'
- 소수점을 삭제함(미크론 단위로 변환시 이용)
- 변수에 123.456 입력시
- 123456 출력됨
- xpos_f = '5.3(p)'
- 소숫점이 있을때만 소숫점을 표시함
- 변수에 123.0 입력시
- 123 출력
- xpos_f = '5.3(i)'
- 부호 반전에 사용
- 변수에 123.456 입력시
- -123.456 출력
위 예시가 SolidCAM에서 사용하는 대부분의 형식 방법 입니다.
ex)
gcode_f = '<G>3.1(p)'
G라는 문자가 가장 앞에 붙고 소숫점 위로 3자리, 소숫점 아래에 숫자가 있으면 1자리만 표시한다고 설정 한것입니다.
gcode_f = '<G>4/2.1(p)'
4자리중 2자리는 항상 표시하고, 소숫점 아래는 1자리 표시의 설정입니다.
G코드 표현에서 가장 일반적으로 사용되는 표현입니다.
조건문 if
조건의 값이 참이거나 거짓일때 실행할수 있는 코드
;if 사용법1
if <조건>
참일때 실행 코드
endif
;if 사용법2
if <조건>
참일때 실행 코드
else
거짓일때 실행 코드
endif
간단한 예를 하나 들겠습니다. 지난글에서 잠깐 나왔던 추적 정보 출력하는 코드 입니다.
if user_account eq '사용자'
input 'Input the trace Lever (0 ~ 5)' i_TraceLevel
trace'all': i_TraceLevel
endif
위 코드에 user_account는 시스템 변수로 사용자 이름을 가져오는 변수이고, input은 입력상자를 띄우는 코드입니다.
참고로 메세지 상자는 print 입니다.
코드 설명을 하자면 사용자 이름이 "사용자"인지 확인하고 [ eq : Equal의 줄임말로 연산자 부분에서 다시 설명하겠습니다 ] 그리고 입력상자로 사용자에게서 1~5를 입력받아 i_TraceLever라는 변수에 담에 그 변수를 trace'all 코드에 사용하는 코드가 됩니다.
반복문 while
반복은 while만 사용하고, 조건이 참 일 동안 계속 반복하는 코드
while <조건>
참일때 실행코드
endw
아래는 간단한 예로 1부터 5까지 출력하는 코드입니다.
logical integer i
i=1
while i le 5
{nl, 'i= ', i}
i=i+1
endw
지역변수 i를 선언하고, i가 5가 될때까지 한줄씩 1,2,3,4,5를 출력하는 코드입니다.
연산자
논리 연산에서 몇가지 특이한 문자를 사용합니다. <조건> 부분에서 사용됩니다.
- and
- A and B : A값이 참이고 B값이 참일때 참을 반환
- or
- A or B : A와 B중 하나만 참이여도 참을 반환
- not
- not A : A값이 참이면 거짓으로 출력, 거짓이면 참을 출력
- eq
- A eq B : A와 B가 같으면 참을 반환
- A == B 로 사용가능
- ne
- A ne B : A와 B가 다를때 참을 반환
- A <> B 로 사용 가능
- le
- A le B : A가 B보다 작거나 같을때 참을 반환
- A <= B 로 사용 가능
- lt
- A lt B : A가 B보다 작을때 참을 반환
- A < B 로 사용 가능
- ge
- A ge B : A가 B보다 크거나 같을때 참을 반환
- A >= B 로 사용 가능
- gt
- A gt B : A가 B보다 클때 참을 반환
- A > B 로 사용 가능
마치며
대부분은 위 내용을 알고 있으면 포스트를 직접 수정 할수 있습니다.
좀더 깊이 알고 싶으신분은 이전글의 유튜브 링크[솔리드캠 공식채널]을 보시면 상세한 내용이 있습니다.
아래는 제가 사용하는 코드인데 필요하신분은 자신의 컴퓨터에 맞게 수정하여 사용하시길 바랍니다.
;변수 선언부에 우측의 전역 변수 생성 global string sRealFileName sRealPartPath sSufix
;프로세서 시작부위에 추가할내용
;신규 파일설정
call @usr_PathOfCamPart
;파일 생성
call @usr_OperateWithFiles(('open'),sSufix)
;신규파일 설정 함수
@usr_PathOfCamPart
;지역 변수 생성
local integer iRealGfileLength
;part_model_name 경로포함 전체 파일이름(시스템 변수)
iRealGfileLength = strlen(part_model_name) - 7
;현재 파일의 경로
sRealPartPath = left(part_model_name,iRealGfileLength) + '\\'
;하위 폴더 생성
{nl '!! make dir = 'sRealPartPath'!!' }
;G코드 파일이름 글자수(확장자 제외)
iRealGfileLength=strlen(g_file_name) - 3
endp
;파일 생성 함수
@usr_OperateWithFiles(string sFileOperate string sSufixTemp)
{nl,'!!'sFileOperate' file='sRealPartPath,sRealFileName,sSufix'!!'}
endp
위 코드의 내용은 웍스캠 파일이름 기준으로 하위 폴더를 하나 생성하고 그 폴더 내부에 캠 경로 이름으로 nc 파일 생성시키는 코드입니다.
'프로그래밍 > SolidCAM Post' 카테고리의 다른 글
SolidCAM - Post Processor - 1 (1) | 2024.01.06 |
---|