2014-03-19 135 views
2

我试图从传感器读取数据。传感器控制器使用db9头(com1),因为我会用com1,我用db9转换usb转换器并得到com 11.为什么我的程序打开COM1而不是COM11?

我有程序读写串口,它工作的时候我用com1 ,但是当我更改为COM 11,程序无法打开COM,因为它达到ERROR_FILE_NOT_FOUND

这里是我的串口编程程序:

Serial::Serial(char *portName) 

{ 

this->connected = false; 

wchar_t wcPort[64]; 
size_t convertedChars = 0; 
mbstowcs_s(&convertedChars, wcPort, strlen(portName), portName, _TRUNCATE); 

this->hSerial = CreateFile(wcPort, 
GENERIC_READ | GENERIC_WRITE, 
0, 
NULL, 
OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL, 
0); 

//Check if the connection was successfull 
if(this->hSerial==INVALID_HANDLE_VALUE) 
{ 
    //If not success full display an Error 
    if(GetLastError()==ERROR_FILE_NOT_FOUND){ 

     //Print Error if neccessary 
     printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName); 

    } 
    else 
    { 
     printf("ERROR!!!"); 
    } 
} 
else 
{ 

    DCB dcbSerialParams = {0}; 


    if (!GetCommState(this->hSerial, &dcbSerialParams)) 
    { 

     printf("failed to get current serial parameters!"); 
    } 
    else 
    { 


    dcbSerialParams.BaudRate=CBR_38400; 
     dcbSerialParams.ByteSize=8; 
     dcbSerialParams.StopBits=ONESTOPBIT; 
     dcbSerialParams.Parity=NOPARITY; 
     dcbSerialParams.fOutX=TRUE; 
     dcbSerialParams.fInX=TRUE; 



     if(!SetCommState(hSerial, &dcbSerialParams)) 
     { 
      printf("ALERT: Could not set Serial Port parameters"); 
     } 
     else 
     { 

      this->connected = true; 


     } 
    } 
} 

}

难道是因为软件/程序或硬件问题LEM?

,当我尝试使用超级终端,它可以读取和写入COM 11

回答

3

要打开COM端口编号为10或更高,则需要使用\\.\前缀名称。

现在,在C中,您必须避开所有反斜杠。所以你需要打开的端口是"\\\\.\\COM11"

+0

谢谢,我没有意识到C无法接受Com超过9 – Limavolt

+0

@Limavolt这与C无关。它只是Win32 API的工作方式。请参阅http://support.microsoft.com/kb/115831 – paddy

+0

谢谢,我的程序可以识别com 11,但它无法读写com端口。并且如果我将连接更改为com 1,并且仍然使用“\\\\。\\ COM11”并正常工作(但连接仍在com1中) – Limavolt

相关问题