Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
2nd
Сен
Чтение данных с COM порта 232
Posted by bullvinkle under Пост-обзор
Код:
#include <vcl.h>
#pragma hdrstop
#include <windows.h>
//---------------------------------------------------------------------------
/*
ZeroMemory (&dcb, sizeof (DCB));// не знает что ето такое
*/
//объявим структуру для асинхронной работы порта
OVERLAPPED over;
//для выделения сигнала
DWORD dwSignal;
//объявим структуру для конфигурации СОМ порта
DCB dcb;
//дескриптор порта
HANDLE hPortDat = NULL;
//переменная для чтения
char Data;
//==================================
//---------------------------------------------------------------------------
class MuClDataOutPort
{
private:
//пишим функцию инициализации порта
bool InnitPort ()
{
//открываем порт СОМ 1
hPortDat = CreateFile ("COM1", GENERIC_READ|GENERIC_WRITE,
0,NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
if (hPortDat == INVALID_HANDLE_VALUE)//если порт не удалось открыть
{
CloseHandle (hPortDat);
return false;//выходим из функции с ошибкой
}
//настраиваем параметры порта
dcb.BaudRate = CBR_19200;//скорость передачи
dcb.ByteSize = 8;//размер передачи
dcb.StopBits = ONESTOPBIT;//один стоповый бит
dcb.Parity = NULL;
//проверяем на правильность настройки
if ( !SetCommState ( hPortDat, &dcb)) //тоже не работает....
{
CloseHandle (hPortDat);
return false;//выходим из функции с ошибкой
}
//если все выполнилось то возвращаем положительный результат
return true;
}
//----------------------------------------------------
//функция чтения одного байта данных
BYTE ReadByteCOM ()
{
if (InnitPort ())
{
BYTE read = 0;
DWORD dwByteRead = 0;
do
{//читаем байт из порта
if (!ReadFile (hPortDat, &read, sizeof (BYTE), &dwByteRead, NULL))
{return 0xFF;}
} while (!dwByteRead);
return read;//возвращаем данные
}
else
{
return 0xFF;
}
}
//------------------------------------------------------
//функция чтения одного байта данных
bool WriteByteCOM (char bufer)
{
if (InnitPort ())
{
DWORD dwByteWrite = 0;
if (!WriteFile(hPortDat, &bufer, sizeof(char), &dwByteWrite, NULL))
{return false;}
return true;//возвращаем сведение о выполнении
}
else
{
return false;
}
}
//=============================================
//функция чтения массива данных
//=============================================
//=============================================
//=============================================
public:
//общая функция для работы с портом
void GeneralCOMRead ()
{
//проверяем сигнал в линии
if (dwSignal & EV_DSR)//данные готовы для чтения
{
//читаем байт из порта
Data = ReadByteCOM ();
//сохраняем байт куда-либо
}
}
//---------------------------------------------------------
void GeneralCOMWrite (char InData)
{
//проверяем сигнал в линии
if (dwSignal & EV_CTS)//данные готовы для записи
{
//пердаем байт из вне и записываем его в порт
WriteByteCOM (InData);
}
}
//---------------------------------------------------------
void CloseCOM ()
{
if (over.hEvent)
{
CloseHandle (over.hEvent);//закрываем объект событие
}
if (hPortDat)
{
CloseHandle (hPortDat);
hPortDat = NULL;
}
}
};
#pragma package(smart_init)
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)