====== AN31004 - 포트입력 인터럽트 확장 ====== 큐블록에서 INT 입력 핀은 4 개밖에 없기 때문에 불편한 경우가 있습니다. MSB시리즈는 아예 INT입력 기능이 없습니다. 외부로부터 갑자기 어떤 처리를 요구하는 입력을 처리하기 위해 INT 인터럽트 기능을 반드시 사용해야 하는 경우에, 본 어플리케이션 노트에서 소개하는 방법을 이용하면 INT 기능을 확장 (INT가 없는 경우에는 추가)하여 사용할 수 있습니다. 바로 LADDER 인터럽트를 이용하는 것입니다. 레더는 10mS 마다 루프를 돌기 때문에 어떤 입력 핀의 변화를 감지할 수 있습니다. 입력 핀이 LOW 에서 HIGH 로 바뀌었을 때 ON LADDERINT 가 발생되도록 하는 것입니다. ===== 결선 방법 ===== 포트0,1에 PUSH스위치를 연결하세요. {{ :cublocapp:an31004:onint.png?nolink |}} ===== 소스 프로그램 ===== 레더 쪽에는 아래와 같은 레더로직을 입력하세요. {{ :cublocapp:an31004:an31004.zip |}} {{ :cublocapp:an31004:an31004.png?nolink |}} 베이직 소스는 다음과 같습니다. Const Device = CB280 Usepin 0,In Usepin 1,In On Ladderint Gosub OCCURINT Set Ladder On Do Loop OCCURINT: If _D(0) = 1 Then Debug "Input P0 Rising Edge",Cr Elseif _D(0) = 2 Then Debug "Input P1 Rising Edge ==!",Cr End If Return ===== 동작 확인 ===== 소스를 입력하고, 다운로드 및 실행시켜 보세요. P0, P1 포트에는 풀다운 저항이 있는 스위치입력을 연결한 뒤 스위치를 눌러보면, 디버그 터미널에 다음과 같은 멧세지가 표시됩니다. {{ :cublocapp:an31004:onint_debug.png?nolink |}} 스위치가 LOW 에서 HIGH 로 바뀌었을 때, ON LADDERINT 가 발생되어 처리된 것입니다. ===== 주의할 사항 ===== 이 방법을 사용할 때 유의할 점은 LADDER LOGIC 의 스캔타임이 10mS 라는 점입니다. 즉, 10mS 보다 짧은 펄스가 발생되는 신호라면 이 방법을 사용할 수 없습니다. 적어도 30mS 이상 되는 신호에 사용하는 것이 좋습니다. 또한 이 방법으로, 동시에 여러 개의 입력신호를 받아들이지 못합니다. 만약 동시에 입력이 들어온다면, 레더로직상의 가장 아래쪽에 위치한 신호만 검출됩니다. 이 프로그램의 경우 P0 과 P1 이 동시에 LOW 에서 HIGH 가 되었다면 P1 인터럽트만 처리됩니다. (가능한한 꼭 필요한 1개만 사용하시를 권합니다.) 이런 점을 감안하고 사용하시기 바랍니다. ===== 폴링에지에서 인터럽트 발생 ===== 폴링에지 (HIGH 에서 LOW 로) 신호를 받아들이고 싶다면, 레더로직에서 A 접점을 B 접점으로 바꾸면 됩니다. {{ :cublocapp:an31004:onint2.png?nolink |}} [[cublocapp:index|큐블록 어플리케이션 노트]]