|
일전에 2000에서는 시리얼쪽이 좀 불안정 하다 들었습니다.
근거할 만한 문서나 뭐 그런건 없을까요?
아님 밑에 제 코드가 이상 있다면 해결방안 좀 부탁 드리겠습니다.
김동욱 님이 쓰신 글 :
: 저는 윈2000서버에서 태스트했는데 PortReset함수부분외에는 별다른 차이가 없네요.
:
: 속시원한 답변이 되지를 못했네요...참고하세요.
:
: 조병훈 님이 쓰신 글 :
: : 도와주세요~~~
: : 아래 코드는 제가 제작한 여러 단말기들 제어 및 테스트 프로그램에 넣어 쓰던 시리얼 통신관련
: : 코드입니다. 한데 아래 코드를 이용해서 WIN98에서는 지금껏 아무이상없이 잘 동작하던것이
: : WIN2000 에서는 컴 포트가 전혀 열리질 않는군요. 어디가 잘못되었는지 WIN2000과 어떤 점에서
: : 어긋난는지 자세한 설명 부탁 드립니다. 여러 문서들 참조를 해봤는데 잘 해결이 안되네요
: :
: :
: :
: : bool PortOpen(char nPort,char nBaud,char nDataBit,char nStopBit,char nParityBit)
: : {
: : DCB dcb;
: : char szPort[10];
: : HANDLE hThread;
: : PortClose();
: :
: : sprintf(szPort, "COM%d", nPort);
: :
: : hComm = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL );
: : if(hComm == INVALID_HANDLE_VALUE) return false;
: :
: : if(!GetCommState(hComm, &dcb))
: : {
: : CloseHandle(hComm);
: : return false;
: : }else
: : {
: : old_dcb = dcb;
: : }
: :
: : FillMemory(&dcb, sizeof(dcb), 0);
: : dcb.DCBlength = sizeof(dcb);
: :
: : switch(nBaud)
: : {
: : case B2400: dcb.BaudRate = CBR_2400; break;
: : case B4800: dcb.BaudRate = CBR_4800; break;
: : case B9600: dcb.BaudRate = CBR_9600; break;
: : case B19200:dcb.BaudRate = CBR_19200; break;
: : }
: : //ShowMessage(dcb.BaudRate);
: : switch(nDataBit)
: : {
: : case DATA_B7: dcb.ByteSize = 7; break;
: : case DATA_B8: dcb.ByteSize = 8; break;
: : }
: : //ShowMessage(dcb.ByteSize);
: : // dcb.Parity = NOPARITY;
: :
: : switch(nStopBit)
: : {
: : case STOP_B1: dcb.StopBits = 0; break;
: : case STOP_B2: dcb.StopBits = 2; break;
: : }
: : //ShowMessage(dcb.StopBits);
: :
: : switch(nParityBit)
: : {
: : case ODD_P: dcb.Parity = 1;break;//PARITY_ODD; break;
: : case EVEN_P: dcb.Parity = 2;break;//PARITY_EVEN; break;
: : case NONE_P: dcb.Parity = 0;break;//PARITY_NONE; break;
: : }
: :
: : if(!SetCommState(hComm, &dcb))
: : {
: : CloseHandle(hComm);
: : return false;
: : }
: :
: : PurgeComm(hComm, PURGE_FLAGS);
: : SetupComm(hComm, RXSIZE, TXSIZE);
: : /*
: : Reading=1;
: : if((CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)CommReadThread,NULL,0,&id))
: : ==INVALID_HANDLE_VALUE)
: : {
: : ShowMessage(" ERROR Creating COMM_READ thread");
: : return false;
: : }
: : */
: : PortReset();
: :
: : return true;
: :
: : }
: : //---------------------------------------------------------------------------
: : void PortClose(void)
: : {
: : Reading=0;
: : SetCommState(hComm, &old_dcb);
: : PurgeComm(hComm, PURGE_FLAGS);
: : CloseHandle(hComm);
: : CloseHandle(hThread);
: : // CloseHandle(AnalForm->haThread);
: : }
: : //---------------------------------------------------------------------------
: : void PortReset(void)
: : {
: : EscapeCommFunction(hComm, CLRRTS);
: : EscapeCommFunction(hComm, CLRDTR);
: : // Delay(100);
: : EscapeCommFunction(hComm, SETRTS);
: : EscapeCommFunction(hComm, SETDTR);
: : // Delay(500);
: : }
|