Другие языки программирования и технологии

Какой принцип обращения в c++ builder 6 к com порту для приема/передачи пакетов информации от внешнего устройства?

Как сделать, где посмотреть, научиться
> Какой принцип обращения в ...к com порту
Все зависит от протокола передачи данных. Наиболее распространен следующий принцип: посылка запроса, чтение ответа.

> в c++ builder 6
Компилятор не важен, в программе для ОС Windows можно использовать WinAPI.

Вот у меня на столе валяется железка, которая кроме последовательных портов, имеет Ethernet интерфейс. Попробую узнать ее IP-адрес, послав запрос в порт:

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

int main() {
// ОТКРЫТИЕ И НАСТРОЙКА ПОРТА
HANDLE port = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DCB dcb;
GetCommState(port, &dcb);
dcb.BaudRate = BAUD_115200;
dcb.ByteSize = DATABITS_8;
dcb.Parity = (BYTE)PARITY_NONE;
dcb.StopBits = STOPBITS_10;
SetCommState(port, &dcb);

COMMTIMEOUTS timeouts;
GetCommTimeouts(port, &timeouts);
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 1000;
SetCommTimeouts(port, &timeouts);

// ПОСЫЛКА ЗАПРОСА
char request[] = "ip\n";
DWORD n;
WriteFile(port, request, strlen(request), &n, 0);

// ЧТЕНИЕ ОТВЕТА
char answer[128];
ReadFile(port, answer, 128, &n, 0);

answer[n] = 0;
char *ipbeg = strstr(answer, "=");
char *ipend = strstr(ipbeg + 1, "\n");
*ipend = '\0';
printf("Device IP: %s\n", ipbeg + 1);

return 0;
}

Вот, собственно и все:


ВНИМАНИЕ: в реальную программу нужно добавить реакцию на ошибки открытия, конфигурирования, записи и чтения порта, а также проверку корректности ответа от устройства!! ! Здесь их нет для уменьшения размера этого сообщения.

Описание функций использованных в данном примере и всех остальных функций для работы с коммуникационными ресурсами доступно в MSDN.
Степан Александров
Степан Александров
85 397
Лучший ответ
средствами WinAPI