Консультация № 144459
20.09.2008, 11:12
0.00 руб.
0 2 1
Здравствуйте. Помогите новичку. В работе с Visual Studio 2008,при работе с компонентом serialPort, в языке Visual Basic,для отправки 2 байтов вводится код:
SerialPort1.Open()
SerialPort1.Encoding = System.Text.Encoding.Default
Dim b As Integer, c As Integer
SerialPort1.Write(Chr(b) & Chr(c))
Здесь байты отправляются как символы, коды которых указаны в b и c.

На я зыке C++,той же среды разработки, для того чтобы отправить строку достаточно выполнить команду:
SerialPort1->Write(“Hello Word”);

Мой вопрос- каков синтаксис на языке C++,чтобы вместо строчного выражения отправить как символы кодов.
Приложение необходимо для связи компьютера с микроконтроллером,для обмена 8-битными байтами.

Обсуждение

Неизвестный
20.09.2008, 12:33
общий
это ответ
Здравствуйте!
Работа портами внешне похожа на работу с бинарными файлами, т.е. используются API функции ReadFile, ReadFileEx, WriteFile, WriteFileEx. Эти функции хорошо описаны в MSDN. Я приведу пример записи буфера в порт.

Приложение:
#include <windows.h>
#include <stdio.h>

#define BUFSIZE 4096

int main(int argc, char *argv[])
{
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
char *pcCommPort = "COM2";

// создание хендлера для работы с портом
hCom = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no 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)
{
// создать не удалось
printf ("CreateFile failed with error %d.\n", GetLastError());
return (1);
}

// получаем текущие настройки порта, что бы можно было поменять интересующие
fSuccess = GetCommState(hCom, &dcb);

if (!fSuccess)
{
// получить настройки не удалось
printf ("GetCommState failed with error %d.\n", GetLastError());
return (2);
}

dcb.BaudRate = CBR_57600; // скорость обмена
dcb.ByteSize = 8; // размерность данных
dcb.Parity = NOPARITY; // без бита четности
dcb.StopBits = ONESTOPBIT; // один стоп-бит

// записываем настройки обратно
fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess)
{
// изменить настройки не удалось
printf ("SetCommState failed with error %d.\n", GetLastError());
return (3);
}

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

// это пример данных, у вас будут, конечно свои
char buffer[BUFSIZE];
for(int i = 0; i < BUFSIZE; ++i)
buffer[i] = i % 255;

// теперь непосредственно запись данных
DWORD dwBytesWritten;
WriteFile(hCom, buffer, BUFSIZE, &dwBytesWritten, NULL);

// закрываем порт
CloseHandle(hComm);
}
Неизвестный
20.09.2008, 15:16
общий
Спасибо всем кто откликнулся.Промучался целую неделю,и вот как опубликовал вопрос,сразу нашёл ответ:
искал типа того
array<unsigned char>^bytes = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE};
serialPort1->Write(bytes, 0, 5);
данная команда отсылает через порт массив из 5 байтов


Форма ответа