В разрабатываемом программном обеспечении используется второй способ - последовательный опрос. При этом проблема отсутствия при этом возможности выполнения других программ решается элементарно при помощи многозадачной концепции операционной системы 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.
Читайте также
Проект внутризоновой ВОЛП на участке Новосибирск—Карасук
Научно-технический
прогресс во многом определяется скоростью передачи информации и ее объемом.
Возможность резкого увеличения объемов передаваемой информации наиболее полно
реализуется ...
Проект участка сети доступа по технологии PON г. Новосибирска
Современное
общество - информационное общество. Жизнь и деятельность человека неразрывно
связана с информацией, ее хранением, передачей и обработкой, Объем данных
передаваемых по канала ...
Разработка компьютерных аналогов схем исследования биполярных транзисторов
компьютерный программа полупроводниковый моделирование
В
данной работе исследуются возможности применения компьютерного моделирования
для изучения характеристик традиционных полупроводник ...