none
Запись в COM-порт(WriteFile) С++ builder RRS feed

  • Вопрос

  • Есть функции записи и чтения данных с ком-порта, которые вызываются при нажатии кнопки. На ком порту стоит платформа arduino. С чтением данных проблем нет. А вот запись  не получается.

    код

    void COM_Port_Data_Writing()
          {
          bool bPortReady;
          DCB dcb;
           COMMTIMEOUTS CommTimeouts ;
             HANDLE hCom;


       hCom = CreateFile("COM5", GENERIC_READ | GENERIC_WRITE, 0, // exclusive access
                                                NULL, // no security
                                                OPEN_EXISTING,
                                                0, // no overlapped I/O
                                                NULL); // null template


       bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes
        bPortReady = GetCommState(hCom, &dcb);
         dcb.BaudRate = 9600;
          dcb.ByteSize = 8;
           dcb.Parity = NOPARITY;
            // dcb.Parity = EVENPARITY;
             dcb.StopBits = ONESTOPBIT;
              dcb.fAbortOnError = TRUE;
               // set XON/XOFF
                dcb.fOutX = FALSE; // XON/XOFF off for transmit
                 dcb.fInX = FALSE; // XON/XOFF off for receive
                  // set RTSCTS
                   dcb.fOutxCtsFlow = TRUE; // turn on CTS flow control
                    dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; //
                     // set DSRDTR
                      dcb.fOutxDsrFlow = FALSE; // turn on DSR flow control
                     dcb.fDtrControl = DTR_CONTROL_ENABLE; //
                    // dcb.fDtrControl = DTR_CONTROL_DISABLE; //
                   // dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; //
                  bPortReady = SetCommState(hCom, &dcb);
                 // Communication timeouts are optional
                bPortReady = GetCommTimeouts (hCom, &CommTimeouts);
               CommTimeouts.ReadIntervalTimeout = 2500;
              CommTimeouts.ReadTotalTimeoutConstant = 2500;
             CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
            CommTimeouts.WriteTotalTimeoutConstant = 3000;
           CommTimeouts.WriteTotalTimeoutMultiplier = 1000;
          bPortReady = SetCommTimeouts (hCom, &CommTimeouts);

          char s[3] = "111";
            DWORD iBytesRead;
             WriteFile(hCom, &s, 3, &iBytesRead, NULL);

                  }

    7 июля 2013 г. 10:17

Ответы

Все ответы

  • Здравствуйте,

    А что именно не получается? Создается пустой файл? Или файл вообще не создается? Выдает ошибку?


    Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"

    Модератор
  • По-моему, ошибка в вызове функции WriteFile.

    Для выдачи трёх байт из строки s вместо вызова:

    WriteFile(hCom, &s, 3, &iBytesRead, NULL);

    надо писать:

    WriteFile(hCom, s, 3, &iBytesRead, NULL);

    16 июля 2013 г. 19:44