UnicodeString Msg = "\\\\.\\" + APortName.UpperCase();ComHandle = CreateFile(Msg.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
HANDLE TForm1::OpenAndSetupPort (UnicodeString APortName, int ASpeed, int AByteSize, int AParity, int AStopBits){HANDLE ComHandle;DCB ComDCB;COMMTIMEOUTS ComTimes;UnicodeString Msg = "\\\\.\\" + APortName.UpperCase(); ComHandle = CreateFile(Msg.t_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);if (ComHandle == INVALID_HANDLE_VALUE) { Msg = "Ошибка при открытии порта " + APortName + ":\n" + GetLastError(); goto OnError; } ZeroMemory(&ComDCB, sizeof(ComDCB));ComDCB.DCBlength = sizeof(ComDCB);if (!GetCommState(ComHandle, &ComDCB)) { Msg = "Ошибка при получении параметров порта " + APortName + ":\n" + GetLastError(); goto OnError; }ComDCB.BaudRate = ASpeed;ComDCB.ByteSize = AByteSize;ComDCB.Parity = AParity;ComDCB.StopBits = AStopBits;ComDCB.fBinary = 1;ComDCB.fParity = (ComDCB.Parity != NOPARITY) ? 1 : 0;ComDCB.fOutxCtsFlow = 0;ComDCB.fOutxCtsFlow = false;ComDCB.fOutxDsrFlow = false;ComDCB.fDtrControl = DTR_CONTROL_DISABLE;ComDCB.fDsrSensitivity = false;ComDCB.fNull = false;ComDCB.fRtsControl = RTS_CONTROL_DISABLE;ComDCB.fOutX = 0;ComDCB.fInX = 0;ComDCB.fAbortOnError = false;if (!SetCommState(ComHandle, &ComDCB)) { Msg = "Ошибка при настройке параметров порта " + APortName + ":\n" + GetLastError(); goto OnError; } if (!GetCommTimeouts(ComHandle, &ComTimes)) { Msg = "Ошибка при получении таймаутов порта " + APortName + ":\n" + GetLastError(); goto OnError; }ComTimes.ReadIntervalTimeout = MAXDWORD;ComTimes.ReadTotalTimeoutMultiplier = 0;ComTimes.ReadTotalTimeoutConstant = 300;ComTimes.WriteTotalTimeoutMultiplier = 0;ComTimes.WriteTotalTimeoutConstant = 0;if (!SetCommTimeouts(ComHandle, &ComTimes)) { Msg = "Ошибка при настройке таймаутов порта " + APortName + ":\n" + GetLastError(); goto OnError; } SetupComm(ComHandle, 1024, 1024);PurgeComm(ComHandle, PURGE_RXCLEAR | PURGE_TXCLEAR); ErrorInfo = "Успешно завершено";return ComHandle; OnError:if (ComHandle != INVALID_HANDLE_VALUE) CloseHandle(ComHandle); ErrorInfo = Msg;return NULL;}
DWORD temp; BYTE comanda[4]; comanda[0] = 0x00; comanda[1] = 0x00; comanda[2] = 0x01; comanda[3] = 0xB0; WriteFile(ComHandle, &comanda, 4, &temp, NULL); //Отправляем команду прибору ReadFile(ComHandle, &comanda, 4, &temp, NULL);
ComDCB.fDtrControl = DTR_CONTROL_ENABLE;