我在机子上装了多串口卡以及它的驱动(MOXA C320Turbo/PCI Series(PCI Bus)),扩展了16个串口(从4到19),可是用下面的代码打开串口的时候,总是报错:系统找不到指定的文件,我应该怎么办? HANDLE hFile = NULL;
hFile = ::CreateFile(
"COM10",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
// Display error
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
GetLastError(),
0,
(LPTSTR) &lpMsgBuf,
0,
NULL);
MessageBox((LPTSTR) lpMsgBuf, "错误", MB_OK | MB_ICONERROR); LocalFree(lpMsgBuf);
return NULL;
}
hFile = ::CreateFile(
"COM10",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
// Display error
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
GetLastError(),
0,
(LPTSTR) &lpMsgBuf,
0,
NULL);
MessageBox((LPTSTR) lpMsgBuf, "错误", MB_OK | MB_ICONERROR); LocalFree(lpMsgBuf);
return NULL;
}
你可以用这个函数打开串口1,2吗?如果可以的话,问题应该还是出在驱动上.你的型号和你装的卡匹配吗?重新装一次试试.
还有,换台机器再试试.我用过moxa的4串口卡,没有如何问题.就是不能用_inp得到状态而已了
{
if( m_bOpened ) return(true ); char szPort[15];
// char szComParams[50];
DCB dcb; wsprintf( szPort, "%s", &mport[0] );
m_hIDComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
if( m_hIDComDev == NULL ) return( FALSE ); memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) );
memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) ); COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 10;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 2000;
//CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
//CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts( m_hIDComDev, &CommTimeOuts ); //wsprintf( szComParams, "COM%d:%d,n,8,1", nPort, nBaud ); m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); dcb.DCBlength = sizeof( DCB );
GetCommState( m_hIDComDev, &dcb );
dcb.fParity=FALSE;
// dcb.fOutxCtsFlow=FALSE;
// dcb.fOutxDsrFlow=FALSE;
// dcb.fDtrControl=DTR_CONTROL_ENABLE;
// dcb.fRtsControl=RTS_CONTROL_ENABLE;
dcb.BaudRate =nBaud;
dcb.ByteSize = nData;
dcb.StopBits =nStop;
dcb.Parity =parity;
unsigned char ucSet;
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_DTRDSR ) != 0 );
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_RTSCTS ) != 0 );
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_XONXOFF ) != 0 ); if( !SetCommState( m_hIDComDev, &dcb ) ||
!SetupComm( m_hIDComDev, 3000, 512 ) ||
m_OverlappedRead.hEvent == NULL ||
m_OverlappedWrite.hEvent == NULL ){
DWORD dwError = GetLastError();
if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );
if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );
CloseHandle( m_hIDComDev );
return( false );
} m_bOpened = true; return(m_bOpened );
{
CString ComName;
DCB lpDCB; switch( m_ComParameter.ComPort){
case 1: ComName="Com1";break;
case 2: ComName="Com2";break;
case 3: ComName="Com3";break;
case 4: ComName="Com4";break;
case 5: ComName="Com5";break;
case 6: ComName="Com6";break;
case 7: ComName="Com7";break;
case 8: ComName="Com8";break;
default : return FALSE;
}
hCom = CreateFile(ComName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if ( hCom== INVALID_HANDLE_VALUE )
return FALSE;
SetupComm(hCom,m_ComParameter.BufferSize,m_ComParameter.BufferSize);
GetCommState(hCom, &lpDCB);
lpDCB.BaudRate = m_ComParameter.BaudRate;
if(m_ComParameter.StopBit==0) lpDCB.StopBits=ONESTOPBIT; //1
if(m_ComParameter.StopBit==1) lpDCB.StopBits=ONE5STOPBITS;//1.5
if(m_ComParameter.StopBit==2) lpDCB.StopBits=TWOSTOPBITS;//2
lpDCB.ByteSize = m_ComParameter.DataBit;
//0-4=no,odd,even,,space
if(m_ComParameter.ParityBit==0) lpDCB.Parity=NOPARITY;
if(m_ComParameter.ParityBit==1) lpDCB.Parity=ODDPARITY;
if(m_ComParameter.ParityBit==2) lpDCB.Parity=EVENPARITY; if( !SetCommState(hCom, &lpDCB) )
return FALSE;
return TRUE;
}
当COM口号>=10的时候要用以下的方式打开CreateFile("\\\\.\\com10",.......否则...."总是报错:系统找不到指定的文件!"
快去试试吧!
关注!
是不是用WinAPI CreateFile会不稳定?当COM口号<10也可以用lin6194说的方法打开,为什么?
是不是用WinAPI CreateFile会不稳定?当COM口号<10也可以用lin6194说的方法打开,为什么?
CreateFile不稳定?应该不会吧,用到的地方太多了,如果不稳定的话,肯定早就发现了吧!打开失败,还是要检查一下软硬件的设置。
另外,当你用串口接收数据时,是否用的多线程呢?假如是的话请指教一点,我用readfileex中的OVERLAPPED 结构创建事件,单步调试的时候能正确接收数据,而且创建事件也是成功的,可我在辅助线程中就是等不到事件。我用的是waitvomment函数?能指点一下吗?可不可以把你们的接受到数据后的创建事件部分的程序贴出来教教我呀,还有串口线程的查询部分.谢谢啦.由于我家不能上网,所以不能贴出代码来,遗憾
是不是用WinAPI CreateFile会不稳定?当COM口号<10也可以用lin6194说的方法打开,为什么?