|
무엇보다 먼저 시리얼 포트의 경우 2개의 프로그램에서 동시에 포트를 열어서 사용하는 것은 불가능 합니다.
하이퍼 터미날에서 시리얼 포트를 사용하고 있는 중이라면 BCB 프로그램에서 동일한 포트를 Open 하려고
하면 이미 사용 중인 포트라고하면서 에러가 발생합니다.
그리고 왜 굳이 복잡하게 하이퍼터미날의 써서 명령을 입력하는 방식을 쓰는지 이해가 안갑니다.
일반적으로 통신을 통해 장비를 제어하는 경우 장비와 PC 간의 통신 프로토콜이 있습니다.
PC에서 장비로 특정 명령을 전송하면 장비가 그 명령에 반응해서 동작하고 다시 PC로 리턴을 주게 되죠..
어차피 프로그램을 짜실 계획이라면 하이퍼터미날을 사용하지 않고 프로그램 자체에서 모든 기능이 되도록
프로그램하는 것이 원칙입니다. 그리고 모든 장비가 통신 명령을 잘못 보냈다고 해서 절대 고장나지는 않습니다.
제 경우 예전에는 명령어를 보낸 후 시리얼 입력 이벤트를 처리하는 방식으로 프로그램을 했었는데
요즘에는 명령어를 보낸 후 약간의 delay 를 준 후에 시리얼 포트의 버퍼의 내용을 가져와서 처리하는 방식을
사용하고 있습니다. 필요에 따라 선택해서 사용하시면 됩니다.
첫번째의 경우 쓴 기억이 오래되서 잘 생각이 안나는데 아마 아래와 비슷할 겁니다.
//-------------------------------------
void __fastcall Main::Button1Click(object* sender)
{
ComPort->Send("command", 7) ;
}
void __fastcall Main::ComPortReceive(object* sender, char* data, int size)
{
char *buffer = new char[size] ;
for(int i=0 ; i<size ; i++) buffer[i] = data[i] ; // 데이타를 한번 옮겨 봤습니다. ^^;;
delete[] buffer ;
}
두번째 경우
//--------------------------------------
char buffer[128] ;
sprintf(buffer,"command") ;
comport->send(buffer, sizeof(buffer)) ;
delay(100) ;
memset(buffer,0,sizeof(buffer)) ;
comport->read(buffer) ;
//--------------------------------------
뭐 이런식이죠
장비의 프로토콜을 올려 주시면 제가 사용하는 라이브러리와 함께
간단한 사용방법도 알려 드리겠습니다.
|