Смекни!
smekni.com

Компьютерное моделирование для исследования физических явлений в нефтедобыче (стр. 3 из 5)

Рисунок 1. Схема основных частей спектрометра

Плата интерфейса использует часть пространства ввода/вывода ЦП. Адресное пространство расположено в диапазоне адресов 0x300-0х31F (64 порта).

Адресное пространство интерфейса распределено между устройствами спектрометра. Для операций ввода/вывода устройства отображают на шину по два регистра (по 16bit): регистр данных (data reg) и регистр команд (cmd reg).

Так, например, операция записи слова выглядит следующим образом:

1. Запись в регистр команд кода команды записи;

2. Запись в регистр данных слова;

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


Рисунок 2. Адресное пространство ввода/вывода ЦП


Рисунок
3. Адресное пространство устройства

Виды обмена данных с устройствами

Существуют команды процессора in и out, которые осуществляют чтение и запись в порт ввода/вывода. С помощью этих команд осуществляется ввод/вывод с устройствами спектрометра. Однако исполнять их из пользовательского уровня («напрямую») разрешено далеко не во всех операционных системах (ОС), например, в WinNT/XP. Помимо этого в многозадачных ОС возможны критические ситуации, когда параллельно выполняются неатомарные операции (подоперации которых разнесены во времени, в течение которого может выполниться операция другого процесса) с одним устройством, что может привести к неверным и неожиданным результатам. Во избежание этого специалистами лаборатории ММФ КазНЦ был разработан драйвер нижнего уровня.

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

Использование драйверов нижнего и верхнего уровня в данной работе позволяет диагностировать спектрометр на ПК с различными ОС.

Сопровождение развивающейся аппаратной части МР-томографа влечет необходимость модификации драйверов. Одной из возможностей программы является диагностика новых версий драйверов (с помощью разных уровней доступа).

Пример использования уровней доступа для записи данных в устройство

Доступ «Напрямую» (дляWin9X)

void CHardWare::dioWrite(WORD adr,WORD val)

{//запись через порты (W9X) слова val в регистр устройства с адресом adr

adr+=DEFAULT_IO_BASE; //Переход к адресному пространству интерфейса

__asm{

movdx,adr //Запись в регистр dx адреса

movax,val //Запись в регистр ax значения

outdx,ax //Выполнение команды записи в порт

}

}

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

void CHardWare::OUTWORD(WORD adr,WORD val)

{

fxbOutWord(IOSession,adr,val,0xffff); //враппер функции записи слова в драйвере низкого уровня

}

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

int CHardWare::WriteBuf(UINT ndev,PWORD buf,int len)

{

switch(ndev)

{

case CH_SYN:

fnmrtResetSynth(0);

fnmrtLoadSynth((XBPInt16)buf,len,0,0);

break;

case CH_PPU:

fnmrtStopPPU();

fnmrtResetPPU(0);

fnmrtLoadPPUCode(buf,len,0,0);

break;

case CH_GX:

case CH_GY:

case CH_GZ:

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; //состояние кнопки пуск

m_start.GetWindowText(pusk);

nTab = m_ctrTab.GetCurSel();

if (nTab==0){ //Если выбрана первая вкладка

…………………

if (pusk == "Пуск"){

…………………

//запускаем поток

PWinThread = AfxBeginThread(fContr,this);

}else{

//если поток не окончен

::GetExitCodeThread(PWinThread->m_hThread,&ExitCode);

if (ExitCode == STILL_ACTIVE){

TerminateThread(PWinThread->m_hThread,0);

delete PWinThread;//удаляем

…………………

}

};

} else { //если вторая вкладка

if (pusk == "Пуск"){

if(ppage2->m_bRepeatMode.GetCheck()==BST_CHECKED)

{ //если выбран циклический режим

…………………

//запускаем поток

PWinThread = AfxBeginThread(fCikl,this);

} else {//запускаем поток

PWinThread = AfxBeginThread(fAddr,this);

};

}else{

…………………

//если поток не окончен

::GetExitCodeThread(PWinThread->m_hThread,&ExitCode);

if (ExitCode == STILL_ACTIVE){

AfxEndThread (0); //останавливаем поток

TerminateThread(PWinThread->m_hThread,0);

delete PWinThread;//удаляем

}

};

}

}

Пользовательский интерфейс

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

Рисунок 5. Закладка Тест устройств пользовательского интерфейса программы

На вкладке Тест ввода/вывода в блоке Тестирование возможность выбора тестируемого адреса, типа уровня тестирования. В блоке Параметры чтение данных с адреса или запись данных на адрес, а так же формат представления (система счисления) данных поля Содержание записи.

Рисунок 6. Закладка Тест ввода/вывода пользовательского интерфейса программы

Результаты работы программы

При нажатии кнопки Пуск начинается процесс тестирования.

Тест устройств. Внизу окна с вкладкой Тест устройств появляется область с таблицей, в которой выводятся ошибки устройств (Рисунок 7).

Рисунок 7. Окно с результатами тестирования устройств

Следующая таблица описывает основные типы аппаратных ошибок и неполадки, которыми они могли быть вызваны.

Тип ошибки Возможные неполадки
Записываются разные значения, а считываются одинаковые

1. Не проходит строб записи

2. Не проходит строб чтения

3. Устройство не подключено

Считываются значения из соседних ячеек Ошибки инкремента
Записываемые и считываемые данные не совпадают

1. Битые ячейки памяти

2. Ошибки стробов чтения/записи

Таблица 1. Типы аппаратных ошибок

При несовпадении результатов тестирований разными уровнями доступа диагностируются ошибки драйвера.

Тест ввода/вывода. Используется для проверки интерфейсной логики устройств спектрометра с использованием осциллографа. Диагностируются, как правило, ошибки монтажа электронных компонентов.

Заключение

Графический интерфейс разработанной системы реализует удобный механизм диагностирования аппаратных неисправностей блоков радиоспектрометра, а так же отладки драйверов верхнего уровня программного комплекса mrscan. На данный момент программа введена в эксплуатацию и применяется разработчиками в лаборатории для выявления аппаратных неисправностей собранных или эксплуатируемых спектрометров.

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

Моделирование строения атома

Попытка постигнуть основы мироздания с помощью физики - наиболее естественна. Совершается она уже многие тысячелетия. Сначала строение вещества пытались объяснить понятием материи, затем физики пришли к мысли о том, что в основе мира лежат неделимые атомы. Атомы, как оказалось, делятся. Физики стали эксплуатировать идею, что в основе мироздания находятся элементарные частицы. У современной физики возникло серьезное опасение, что и элементарные частицы имеют сложное строение и могут делиться. Основа мира, в этой связи, снова становится призраком, и снова нет достаточно четкого и ясного ответа.