Устройства измерения и контроля с использованием  последовательного порта

March 30, 2012 by admin Комментировать »

С «точки зрения» операционной  системы Windows последовательный порт компьютерной системы относится к коммуникационным  ресурсам — физическим или логическим  устрой ствам, обеспечивающим обмен данными посредством отдельного двунаправленного асинх ронного потока данных.

В практическом плане последовательный порт персонального компьютера может ис

пользоваться  либо для обмена данными между различными  устройствами, либо для управле ния и контроля другими устройствами. Второй аспект менее известен большинству читателей, поскольку применение последовательного порта для управления другими устройствами тре бует более сложных технических решений, чем в случае стандартного обмена данными.

Начнем с обмена данными между устройствами. Для операционных систем Windows об мен данными по последовательному порту осуществляется посредством стандартных функ ций интерфейса WINAPI операционной системы для работы с объектами файловой системы. Прежде всего, замечу, что для программирования  операций с COM портом используются хо рошо  знакомые   нам   функции   Win  API     CreateFile,  CloseHandle,  ReadFile   и WriteFile, используемые при работе с файлами. Коммуникационные  устройства в опера ционной системе обрабатываются  теми же функциями, что и обычные файлы, при этом они имеют специальные имена, например, «COM1» присвоено первому последовательному порту, а «LPT1» — параллельному порту. Так, для открытия коммуникационного  устройства COM1 можно использовать функцию CreateFile, первым параметром которой будет имя устрой ства, в данном случае, COM1. Полученный после вызова  функции дескриптор  устройства (handle) можно использовать  при последующих операциях с данными в функциях ReadFile, WriteFile и CloseHandle.

Рассмотрим запись и чтение данных из COM порта в операционных системах Windows на практических примерах.

В первом примере выполняется передача 8 битового беззнакового  числа в последова тельный порт. Ниже представлен исходный текст консольного приложения, написанного на языке C++ среды Microsoft Visual Studio .NET.

#include  <windows.h>

#include  <stdio.h>

void  main(void)

{

HANDLE  hCom;

char  *pcComPort = "COM1"; DCB  dcb;

DWORD   bytesWritten;

   int8 i1;

hCom  = CreateFile(pcComPort,

GENERIC_READ  | GENERIC_WRITE,

0, NULL, OPEN_EXISTING,

0, NULL);

if (hCom  == INVALID_HANDLE_VALUE)

{

printf("COM1  opening  error!\n");

return;

}

GetCommState(hCom,  &dcb);

printf("COM1  baud rate is %d\n",  dcb.BaudRate);

{

while  (true)

{

printf("\nEnter value  to  be  outputted at COM1   port:");

scanf("%du",  &i1); WriteFile(hCom,

&i1, sizeof(i1),

&bytesWritten, NULL);

}

}

CloseHandle(hCom);

return;

}

Для читателей, немного знакомых с программированием  на C++ в среде Windows, по казанный  исходный текст не представляет особой сложности. В этой программе  вначале открывается  файл последовательного порта  COM1 с  помощью  функции  WINAPI функции CreateFile. При открытии коммуникационных  портов в Windows необходимо указывать режим монопольного  доступа, установив третий параметр функции CreateFile равным 0 и указав атрибут OPEN_EXISTING.

В случае успешного открытия порта функция CreateFile возвращает дескриптор hCom коммуникационного порта, куда и будет записываться  введенный  с клавиатуры консоли сим вол. Функция GetCommState позволяет получить параметры последовательного порта, та кие как  скорость обмена, наличие бита четности и т. д. Полученные данные записываются в структуру dcb типа DCB. В данном случае для контроля скорости обмена данными последо вательного порта персонального компьютера на экран консоли выводится значение пере менной dcb.BaudRate. Думаю, излишне  напоминать,  что параметры  последовательных портов устройств, обменивающихся данными, должны быть одинаковыми, иначе обмен дан ными будет невозможен.

Далее, программа в цикле while выводит в последовательный порт ПК значение, вве

денное с помощью библиотечной функции scanf. Запись байта данных в последовательный порт осуществляется WINAPI функцией WriteFile.

Чтение данных с последовательного порта обычно выполняется в цикле, который может быть запущен как из основного потока программы, так и из отдельного потока. Далее пока зан исходный текст консольного приложения Windows, выполняющего прием символов из последовательного порта и отображающего  полученный результат на строке дисплея.

#include  <windows.h>

#include  <stdio.h>

void  main(void)

{

HANDLE  hCom;

char  *pcComPort = "COM1"; DCB  dcb;

DWORD   bytesRead;

char  buf[128];

hCom  = CreateFile(pcComPort,

GENERIC_READ  | GENERIC_WRITE,

0, NULL, OPEN_EXISTING,

0, NULL);

if (hCom  == INVALID_HANDLE_VALUE)

{

printf("COM1  opening  error!\n");

return;

}

GetCommState(hCom,  &dcb);

printf("COM1  baud rate is %d\n",  dcb.BaudRate);

printf("Waiting  for   data   from COM1…\n");

do {

ReadFile(hCom, buf, sizeof(buf),

&bytesRead, NULL);

if (bytesRead   > 0)

{

buf[bytesRead]  = ‘\0’; printf(buf); printf("\n");

}

}while  (true); CloseHandle(hCom); return;

}

Здесь, как  и в предыдущем Windows приложении, вначале открывается последователь ный порт COM1 (WINAPI функция CreateFile), затем строка из последовательного порта считывается в буфер buf функцией ReadFile. Если количество bytesRead принятых бай тов не равно 0, то функция printf выводит принятый байт на экран консоли ПК.

При разработке  графических  приложений  в среде Visual Studio.  NET для работы с после довательным портом можно использовать также и компонент  SerialPort, что и будет проде монстрировано в аппаратно программном проекте простейшей системы контроля температу ры с биметаллическим датчиком температуры (термореле).

Аппаратная часть проекта несложная, и ее схема показана  на рис. 4.5.

Рис. 4.18

Вид окна браузера при срабатывании датчика перемещения

Источник:  Магда Ю. С. Компьютер  в домашней лаборатории.  – М.: ДМК Пресс, 2008. – 200 с.: ил.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты