Реферат: Компьютерное моделирование для исследования физических явлений в нефтедобыче
case CH_RFP:
fnmrtLoadGradChannel(ndev+1,(XBPInt16)buf,len,0,0);
break;
default:
return -1;
}
return 0;
}
Организация класса работы с устройствами
Для работы с устройствами был разработан отдельный класс – CHardWare . В связи с имеющимися различными уровнями доступа для удобства было разработано три уровня абстракции работы с устройствами.
1. Ввод/вывод слов в регистры устройств
2. Ввод/вывод команд и данных в память устройств спектрометра
3. Ввод/вывод массивов в память устройств
Пример использования различных уровней абстракции для записи данных в устройство
1. Ввод/вывод слов в регистры устройств
void CHardWare::OUTWORD(WORD adr,WORD val);
void CHardWare::INWORD(WORD adr,WORD *val);
2. Ввод/вывод команд и данных в память устройств спектрометра
DWORD CHardWare::writeword(UINT ndev, WORD val);
DWORD CHardWare::readword(UINT ndev, WORD *val);
DWORD CHardWare::resetaddr(UINT ndev);
DWORD CHardWare::incraddr(UINT ndev);
3. Ввод/вывод массивов в память устройств
int CHardWare::GetMemSize(UINT ndev);
int CHardWare::GetMask(UINT ndev);
int CHardWare::WriteBuf(UINT ndev,PWORD buf,int len);
int CHardWare::ReadBuf(UINT ndev,PWORD buf,int len);
Программная часть
Рисунок 4. Структура программы тестирования спектрометра
Режим 1. Запись данных на устройство, чтение данных с устройства, проверка (сравнение записанных и считанных данных).
Режим 2. Запись данных на устройство, чтение данных с устройства, проверка, повтор до обнаружения первой ошибки.
Режим 3. Запись или чтение на указанный адрес порта ввода/вывода однократно.
Режим 4. Циклическое повторение записи или чтения с интервалом, указанным пользователем.
Если организовать запуск функции тестирования в основном потоке, то во время её выполнения работа с интерфейсом программы, включая кнопку Стоп , будут недоступны, а так же не будет производиться прорисовка результатов выполнения. Режим стресс-тестирования (режим 2) может занять длительное время, а режим циклического тестирования (режим 4) вообще не сможет быть остановлен. Поэтому при нажатии кнопки Пуск в зависимости от указанных пользователем параметров тестирующая функция запускается в отдельном потоке.
void Cmain::OnStart()
{
DWORD ExitCode;
CString pusk; //состояние кнопки пуск