|
답변 감사합니다.
김시환 님께서 조언해주신데로 공부해보도록 하겠습니다.
제가쓰는 장치는 기술적인 부분에 대한 설명이 거의 없는 설명서라 부탁드리고 싶지만... 안타까울 따름입니다.
다음에도 좋은 조언 부탁드리겠습니다.
김시환 님이 쓰신 글 :
: 무엇보다 먼저 시리얼 포트의 경우 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) ;
: //--------------------------------------
: 뭐 이런식이죠
:
: 장비의 프로토콜을 올려 주시면 제가 사용하는 라이브러리와 함께
: 간단한 사용방법도 알려 드리겠습니다.
|