T32 - 특정 이벤트 발생 시 특정 스크립트 실행하기
참고 문서 :
Interrupt Service Routine 처럼
T32가 특정한 이벤트를 감지했을때만 특정 스크립트가 실행되도록 구성할 수 있다
'ON' 이라는 커맨드를 사용하는 것이다.
아래와 같은 양식으로 cmm을 작성하면된다.
ON <Event> <Action>
어떤 <이벤트>를 감지할 수 있는지, 어떤 <액션>들을 실행할 수 있는지를 스터디하고 cmm을 구성하면 된다.
일단 간단한 예시를 보자.
(참고로 cmm커맨드는 대소문자 구분하지 않음)
ON SYSUP GOSUB Fun_GoSub ; System Up 상태가되면 Fun_GoSub라는 서브루틴을 실행해라
Fun_GoSub:
print "System is Up"
return
위 커맨드를 해석해보면,
T32 시스템 메뉴중에 System Up 이라는 버튼이 있는데. 유저가 이걸 눌러서 System Up 상태가되면
위 스크립트에 정의된
Fun_GoSub 라는 루틴이 실행되서 area 창에 System is Up 이라는 메세지가 출력되는 Cmm 이다.
SYSUP은 시스템 업이라는 <이벤트>를 의미하고
GOSUB 커맨드는 특정 루틴을 실행하라는 <액션>이다.
뒤에 Fun_GoSub는 내가 cmm에 정의한 서브루틴이다.
한가지 예시를 더 들어보자.
ON SYSUP GOSUB Fun_GoSub
ON PBREAK GOSUB Fun_Pbreak
Fun_GoSub:
print "System is Up"
return
Fun_Pbreak:
print "Target Sw is Stopped"
return
위 cmm은 이제 2개의 이벤트를 감지한다.
SYSUP은 앞에서 설명했고, PBREAK는 타겟SW(제어기에서 실행중인 SW)가 멈췄을때 감지되는 <이벤트>이다.
유저가 Stop 버튼을 눌렀거나, Break Point 등에 의해 SW 실행이 멈췄을때 위 이벤트가 감지된다.
이벤트가 감지되면 GOSUB 액션을 통해 Fun_preak라는 내가 정의한 서브루틴이 실행될 것이다.
유용한 이벤트 예시를 하나만 더 들어보겠다.
ON PBREAKAT 0x80001000 GOSUB Fun_Break1
ON PBREAKAT Test_MainFunction Fun_Break2
Fun_Break1:
print "Target SW is stopped at 0x80001000"
return
Fun_Break2:
print "Target Sw is Stopped at MainFunction"
return
PBREAKAT <이벤트>이다.
앞에서 봤던 PBREAK 이벤트는 Target SW가 어느 위치에서 멈췄는지랑 상관없이 멈추기만 하면 인식되는 이벤트이고,
PBREAKAT 이벤트는 Target SW가 멈췄는데, 특정 메모리주소에서 멈췄을때만 인식되는 이벤트이다.
위 예시에서 내가 2개의 이벤트를 셋팅했는데, 직접 메모리 주소를 숫자로 적어도되고
만약 Symbol이 다운로드 돼있는 상태라면 저렇게 그냥 Symbol의 이름을 그대로 적어도 된다.
유용한 이벤트 예시 마지막으로 하나만 더 들어보자면, 지정된 시간이 소요됐을때(타이머 인터럽트)가 있다
아래 cmm을 실행한다면, cmm 실행 후 5초 후에 서브 루틴이 실행될 것이다.
ON TIME 5.0s GOSUB Timeout_5sec
Timeout_5sec:
print "5sec is timeout"
return
그리고 또 한가지 유용한 명령어는
위 CMM 파일을 실행했을때, 현재 T32에 활성화 돼있는 이벤트들의 종류를 보거나 삭제할 수 있는 명령어다.
PMACRO.list ; 현재 활성화돼있는 이벤트 종류 볼 수 있음
PMACRO.reset ; 현재 활성화 돼있는 이벤트 제거
이외에 어떤 이벤트,어떤 액션들이 있는지는 이 문서에 첨부해둔 참고문서를 보면 나와있다.
그 중에 일부 주요한 이벤트, 액션만 캡쳐해놓는다.
▶인식 가능한 이벤트 종류
▶실행 가능한 액션 종류