사용자 도구

사이트 도구

English

cubloc:on_recv:index

On Recv

On Recvx Gosub 라벨명

Recvx : Recv1, Recv2, Recv3 중 하나
라벨명 : 인터럽트 발생시 점프할 곳

설명

RS232c수신 인터럽입니다. 1,2,3중 원하는 채널을 사용할 수 있으며, Opencom명령으로 해당 채널이 Open된 후에 사용가능합니다. 해당 채널에 데이터가 수신되면 곧바로 On Recv에서 지정한 <라벨명>으로 점프합니다. 그곳에 가서 수신된 데이터를 읽어서 처리하는 방법으로 프로그램을 작성하십시오.

주의사항

기존에 MCU를 써보셨던분들이 인터럽트와 관련해서 많은 시행착오를 하고 있습니다. 큐블록은 MCU만큼 빠르지 않습니다. 명령어 하나의 수행시간이 짧게는 50mS에서 길게는 수백mS에 달합니다. 특히, On Recv수신 인터럽트 루틴안에서 수신된 데이터를 분석하는 일은 피하세요. 다음과 같은 사항에 주의하셔서 프로그램하시기 바랍니다.

  1. 꼭 필요한 상황이 아니라면, 인터럽트를 사용하지 마세요.
  2. 인터럽트 루틴안에서는 빠르게 수행을 마치고, 메인프로그램으로 복귀하세요.
  3. 수신데이터 분석은 하지마세요. 가능한한 MODBUS프로토콜을 이용하세요.

사용예

    Dim A(5) As Byte
    Opencom 1,19200,0, 100, 50
    On Recv1 Gosub DATARECV_RTN   ' RS232 채널1에 데이터가 수신되면 DATARECV_RTN으로
 
    Do
    Loop    ' 무한루프
 
  DATARECV_RTN:
 
    If Blen(1,0) > 4 Then 
         A(0) = Get(1,1) ' 5바이트만 읽습니다.
         A(1) = Get(1,1) 
         A(2) = Get(1,1) 
         A(3) = Get(1,1) 
         A(4) = Get(1,1)
    End If
    Return          ' 인터럽트 루틴을 종료

사실 이렇게 하면, 데이터가 1바이트 수신될 때마다 매번 인터럽트 루틴을 가게 됩니다. 하지만, 원하는 데이터수 5바이트가 쌓이지 않았으므로 그냥 리턴하는일이 자주 발생하게 됩니다.

이럴때에는 Set Until을 사용해서 패킷관리를 해주는 것이 좋습니다.

명령어 목록으로 가기

cubloc/on_recv/index.txt · 마지막으로 수정됨: 2020/08/19 00:33 저자 Comfile Technology