|
권기식.with☆ 님이 쓰신 글 :
: 안녕하세요?
:
: RS232 통신 프로그램을 비교적 자주 짜오면서 항상 이상하게 생각되는 부분이 있어 문의드립니다.
:
: CPort 라이브러리를 이용하고 있는데...
:
: 장치로 어떤 명령을 날리면 그 반응을 보고 다음 동작을 취하도록 해야 합니다.
:
: 이럴 경우 WriteStr로 명령을 날리고 약간의 지연을 준 다음 입력 버퍼에서 데이터를 읽어오는데요..
:
: 이 약간의 지연을 어떻게 줘야 할지 잘 모르겠습니다.
:
: Sleep 함수도 이용해봤지만..
:
: 필요없는 긴 지연을 주게 되더군요.
:
: while로 루프를 만들어 돌리면서 Application->HandleMessege() 함수를 쓰니 수신이 잘 되는데...
:
: 잘못하면 이것 때문에 프로그램이 꼬일 수 있더군요.
:
: 어떤 방법이 가장 적절할까요?
음 혹시 RxChar 이벤트를 아시는지요?
RxChar 를 세팅해 놓으면 데이타가 도착할때마다 이벤트를 띄워줍니다.
그때 버퍼에 들어온 갯수를 체크하며 프로토콜에 맞게 읽어들이시면 됩니다.
만약 동작에 따른 프로토콜 플로우 차트가 있다면
RxChar 이벤트에서 올바른 응답이 오면 다음단계의 명령을
WriteStr해주면 될거 같습니다. ^^;
제가 질문의 요지를 잘 파악하지 못한거 같기도 한데...
void __fastcall OnRxChar(TObject *Sender, int Count)
{
if ( Count > 응답받아야 하는 길이)
{
AnsiString result = ComPort1->Read~~;
if ( result == "1" ) ComProt1->WriteStr(XXX);
else if (result == "2" ) ComPort1->WriteStr(~~~);
}
}
|