Получение измерительной информации из аппаратуры “Контроль”

В разрабатываемом программном обеспечении используется второй способ - последовательный опрос. При этом проблема отсутствия при этом возможности выполнения других программ решается элементарно при помощи многозадачной концепции операционной системы Windows. За получение последовательности байт информации из аппаратуры “Контроль” отвечает дополнительная запускаемая нить (процесс), которая работает с не очень высоким приоритетом и осуществляет постоянный последовательный опрос COM-порта. В случае обнаружения события «Готовность байта данных», эта нить записывает принятый байт во внутренний буфер и по окончании приема всей последовательности, состоящей, как было сказано ранее, из 32 байт, осуществляет вызов функции раскодирования принятой последовательности.

Для создания дополнительной нити используется абстрактный класс Tthread, который позволяет создавать отдельные нити выполнения в приложении. В разрабатываемом программном обеспечении создается класс, производный от Tthread - SerialLink:

class SerialLink : public Tthread

{:: fastcall Execute();:

fastcall SerialLink(bool CreateSuspended); fastcall DecodePacket(void);

};

В конструкторе полученного класса производится установление приоритета дополнительной нити:

fastcall SerialLink::SerialLink(bool CreateSuspended)

: Tthread(CreateSuspended)

{= true;= tpIdle;

}

В методе класса SerialLink - унаследованной от Tthread функции Execute() происходит открытие, начальная инициализация и установка таймаутов последовательного порта COM1. Для открытия используется функция CreateFile:

HANDLE hCom; BOOL fSuccess; hCom = CreateFile(«COM1», // порт COM1 GENERIC_READ, // на чтение 0, /* устройства связи должны быть открыты с эксклюзивным доступом */ NULL, /* без атрибутов безопасности */ OPEN_EXISTING, /* устройства связи должны использовать OPEN_EXISTING */ 0, /* без пересеченного ввода-вывода */ NULL /* параметр hTemplate должен быть NULL для устройств связи */);

Начальная инициализация COM-порта происходит в соответствии с параметрами выходных сигналов аппаратуры “Контроль”. Для инициализации используются функции GetCommState и SetCommState:

fSuccess = GetCommState(hCom, &dcb); /* Заполняем структуру DCB:

скорость = 9600,

битов данных,

без контроля четности,

стоп-бита. */ dcb.BaudRate = 9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = TWOSTOPBITS; fSuccess = SetCommState(hCom, &dcb);

Установка таймаутов производится при помощи функций GetCommTimeouts и SetCommTimeouts:

GetCommTimeouts(hCom, &TimeOuts);.ReadIntervalTimeout = 100;.ReadTotalTimeoutMultiplier = 1;.ReadTotalTimeoutConstant = 100;(hCom, &TimeOuts);

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

Далее, в основном цикле работы функции Execute() происходит чтение последовательности байт через порт COM1:

unsigned long g=1;work1[2], work2[2];(!Terminated)

{= ReadFile(hCom,work1,g,&g,0);((fSuccess)&&(g>0))

{

{= ReadFile(hCom,work2,g,&g,0);((fSuccess)&&(g>0))

{[index] = work1[0]|(work2[0]<<8);++;(index==16)

{();=0;

}

}

} while ((fSuccess)&&(g>0));

}

}

Чтение производится функцией ReadFile. В соответствии с работой аппаратуры “Контроль”, сначала считывается младший байт информационного слова, затем - старший. По пришествии 16 информационных двухбайтовых слов происходит вызов функции-члена класса DecodePacket, осуществляющей раскодирование принятой информации в соответствии с таблицей 2.1.

Перейти на страницу: 1 2 

Читайте также

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

Проектирование САУ приводом наведения реактивной бомбометной установки РБУ-6000
Реактивные бомбометные установки РБУ-1000 "Смерч-2" и РБУ-6000 "Смерч-3" предназначенные для залповой и одиночной стрельбы реактивными глубинными бомбами РГБ-60 ...

Проектирование междугородной магистрали между г. Кемерово – г. Лениск-Кузнецкий с использованием симметричного кабеля
Наше время, в особенности последние десять лет, характеризуется бурным развитием телекоммуникационных технологий. Наряду с появлением новых форм передачи информации, совершенствуются тра ...

Основные разделы

Все права защищены! (с)2025 - www.generallytech.ru