사용자 도구

사이트 도구

English

cubloc:inton:index

INTON

INTON s,d

s : 소스 (전송할 값), 상수값 또는 레지스터 (C,T,D,WP,WM 사용가능)
d : 목적지 (전송할 곳), 레지스터 (C,T,D,WP,WM 사용가능)

레더로직에서 베이직으로 인터럽트 요청을 할 수 있습니다.

베이직에서 On Ladderint Gosub Label 이라고 명령어를 입력하면, 레더에서 인터럽트 요청시 Label 루틴을 실행합니다. 레더에서는 특수 릴레이 F40에 1을 써넣는 방식으로 인터럽트 요청을 합니다. 베이직에서 인터럽트 루틴실행이 끝나는 지점에서 F40을 클리어 해주어야 합니다.

상황 1 : 레더 인터럽트 요청이 한개일경우

베이직은 아래와 같이 입력하세요.

Const Device = CB280
Dim i As Integer
Usepin 24,In
i=0
Low 30
Set Ladder On
On Ladderint Gosub msg1_rtn
Do
Loop
 
msg1_rtn: ' 레더에서 인터럽트가 발생하면 Debug 창에 표시
  Debug "ON Ladderint ",Dec i,Cr
  Incr i
  _F(40) = 0
  Return 

레더는 아래와 같이 입력하세요.

실행결과는 다음과 같습니다.

상황 2 : 레더 인터럽트 요청이 여러개일경우

만약 레더로직중 인터럽트 요청하는 곳이 여러곳이 있다면 어떤 인터럽트가 요청되었는지 구분할 필요가 있습니다.

그래서 INTON 명령이 필요합니다.INTON명령은 WMOV 명령과 동일하게 동작합니다. 그리고 명령수행 직후 F40에 1을 쓰는 것입니다.

예를들어 INTON 1,D0 라고 하면 D0 레지스터에 1을 써넣고 F40 을 1로 만드는 것입니다.

그러면 베이직에 인터럽트가 요청되어 Label 루틴으로 점프하게 됩니다. 이 루틴안에서 D0에 어떤값이 들어있는 지 확인해본다면, 레더로직중 어떤부분에서 인터럽트 요청이 있었는지 알 수 있습니다.

실험을 해보겠습니다. 베이직은 다음과 같이 입력하세요.

Const Device = CB280
Dim i As Integer
Usepin 24,In
Usepin 25,In
Low 30
Set Ladder On
On Ladderint Gosub msg1_rtn
Do
Loop
 
msg1_rtn: ' 레더에서 인터럽트가 발생하면 Debug 창에 표시
  If _D(0) = 3 Then
  	 Debug "ON Ladderint #3 ",Cr
  Endif
  If _D(0) = 4 Then
  	 Debug "ON Ladderint #4 ",Cr
  Endif
  _F(40) = 0
  Return 

레더로직은 아래와 같이 입력하세요. 입력소스에 따라서 각기 다른 종류의 인터럽트를 요청하도록 하였습니다.

실행결과는 다음과 같습니다.

CUBLOC 레더로직 목록으로 가기

cubloc/inton/index.txt · 마지막으로 수정됨: 2017/10/02 12:44 저자 Comfile Technology