0

Я пишу код последовательной связи в C++ в Visual Studio 2010. Для этого примера I try this, который работает нормально. Теперь я пытаюсь отправить строку и прочитать ее, закоротив Rx и Tx контакты моего оборудования. Вот мой код для отправки строки: -Невозможно прочитать запись на последовательном порту в C++

char *buffer ="hello"; 
    DWORD bytesSend; 
    DWORD errors; 
    COMSTAT status; 
    DWORD numWritten; 
    WriteFile(hCom, buffer, strlen(buffer), &numWritten, NULL); 
    printf("send succesfully\n"); 

и вот мой приемный код: -

DWORD numRead; 

    BOOL ret = ReadFile(hCom, buffer, 5, &numRead, NULL); 

    if(!ret) 
    { 
     printf("Read Fail\n"); 
    } 
    else 
    { 
     printf("%s\n",buffer); 
    } 

На мой код работает, получают становится не удалось. Итак, пожалуйста, скажите мне, где проблема. вот мой полный код.

#include "stdafx.h" 

#include <windows.h> 
#include <tchar.h> 
#include <stdio.h> 

void PrintCommState(DCB dcb) 
{ 
    // Print some of the DCB structure values 
    _tprintf(TEXT("\nBaudRate = %d, ByteSize = %d, Parity = %d, StopBits = %d\n"), 
       dcb.BaudRate, 
       dcb.ByteSize, 
       dcb.Parity, 
       dcb.StopBits); 
} 


int _tmain() 
{ 
    DCB dcb; 
    HANDLE hCom; 
    BOOL fSuccess; 
    TCHAR *pcCommPort = TEXT("COM1"); // Most systems have a COM1 port 

    // Open a handle to the specified com port. 
    hCom = CreateFile(pcCommPort, 
         GENERIC_READ | GENERIC_WRITE, 
         0,  // must be opened with exclusive-access 
         NULL, // default security attributes 
         OPEN_EXISTING, // must use OPEN_EXISTING 
         0,  // not overlapped I/O 
         NULL); // hTemplate must be NULL for comm devices 

    if (hCom == INVALID_HANDLE_VALUE) 
    { 
     // Handle the error. 
     printf ("CreateFile failed with error %d.\n", GetLastError()); 
     return (1); 
    } 

    // Initialize the DCB structure. 
    SecureZeroMemory(&dcb, sizeof(DCB)); 
    dcb.DCBlength = sizeof(DCB); 

    // Build on the current configuration by first retrieving all current 
    // settings. 
    fSuccess = GetCommState(hCom, &dcb); 

    if (!fSuccess) 
    { 
     // Handle the error. 
     printf ("GetCommState failed with error %d.\n", GetLastError()); 
     return (2); 
    } 

    PrintCommState(dcb);  // Output to console 

    // Fill in some DCB values and set the com state: 
    // 57,600 bps, 8 data bits, no parity, and 1 stop bit. 
    dcb.BaudRate = CBR_57600;  // baud rate 
    dcb.ByteSize = 8;    // data size, xmit and rcv 
    dcb.Parity = NOPARITY;  // parity bit 
    dcb.StopBits = ONESTOPBIT; // stop bit 

    fSuccess = SetCommState(hCom, &dcb); 

    if (!fSuccess) 
    { 
     // Handle the error. 
     printf ("SetCommState failed with error %d.\n", GetLastError()); 
     return (3); 
    } 

    // Get the comm config again. 
    fSuccess = GetCommState(hCom, &dcb); 

    if (!fSuccess) 
    { 
     // Handle the error. 
     printf ("GetCommState failed with error %d.\n", GetLastError()); 
     return (2); 
    } 

    PrintCommState(dcb);  // Output to console 

    _tprintf (TEXT("Serial port %s successfully reconfigured.\n"), pcCommPort); 

    char *buffer ="hello"; 
    DWORD bytesSend; 
    DWORD errors; 
    COMSTAT status; 
    DWORD numWritten; 
    WriteFile(hCom, buffer, strlen(buffer), &numWritten, NULL); 
    printf("send succesfully\n"); 

    DWORD numRead; 
    BOOL ret = ReadFile(hCom, buffer, 5, &numRead, NULL); 

    if(!ret) 
    { 
     printf("Read Fail\n"); 
    } 
    else 
    { 
     printf("%s",buffer); 
    } 



    return (0); 
} 

Вот мой результат: - enter image description here

+0

Необходимо больше узнать о вашем коде. На вашем снимке экрана отображаются два открытых порта: один на скорости 9600 бод, а другой на 57600, и вы не показываете код, который его выполняет. Вы используете один процесс или два процесса? –

+0

Вы только что изменили крышку экрана, чтобы показать 57600 дважды. Если вы пытаетесь открыть порт дважды, это проблема. Вы можете открыть порт только один раз. –

+0

Почему? Вы можете изменить его снова. –

ответ

Смежные вопросы