Розробка програмного забезпечення для збору даних по РСІ-платі з використанням драйверів

Синтаксиси, властивості класів, структур та змінних, що надаються драйвером та приклади їх використання. Запуск утиліти для встановлення та тестування карт розширення Device Manager. Меню для вибору та налаштування карти розширення, обробки інформації.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык украинский
Дата добавления 28.01.2016
Размер файла 576,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru//

Размещено на http://www.allbest.ru//

Звіт

з лабораторної роботи

«Розробка програмного забезпечення для збору даних по РСІ-

платі з використанням драйверів»

Мета: Ознайомитися із основними принципами роботи з РСІ- платами збору та обробки інформації для ПК. Отримати навички розробки прикладного програмного забезпечення для обміну даними між зовнішніми пристроями та ПК з використанням драйверів.

Порядок виконання роботи:

Для работи над завданням потрібно:

Ознайомитися із документацією що додається до драйвера пристрою. Розглянути синтаксиси, властивості класів, структур та змінних, що надаються драйвером та приклади їх використання. За замовчуванням до неї можна отримати доступ через меню «Пуск», далі програми, Advantech Automation\Device Manager, або ж C:\Program Files (x86)\Advantech\Adsapi\Manual. програмний плата дані драйвер

Запустити утиліту для встановлення та тестування карт розширення Device Manager (меню «Пуск», програми, Advantech Automation\Device Manager) та ознайомитися з її інтерфейсом та функціями.

Відкрити середовище розробки програмного забезпечення та створити новий проект. Зберегти проект в окрему папку. Для роботи із драйвером пристрою необхідно підключити заголовний файл дравера, котрий доцільно зкопіювати до папки із проектом (знаходиться C:\Program Files (x86)\Advantech\Adsapi\Include ) а також під'єднати бібліотеку драйвера adsapi32bcb.lib (знаходиться C:\Program Files (x86)\Advantech\Adsapi\Lib) для цього у головному меню середовища натиснути Project->Add to project… Програмне забезпечення складатиметься із двох частин. Перша - меню для вибору та налаштування карти розширення, друга - для безпосереднього зчитування аналогового входу та обробки інформації.

Для першої форми необхідно створити наступні об'єкти та події:

TLabel *Label1;

TLabel *Label3;

TLabel *Label4;

TListBox *Dev;

TListBox *Inp;

TListBox *Vol;

TButton *btStart;

TButton *Button2;

void __fastcall FormCreate(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall DevClick(TObject *Sender);

void __fastcall btStartClick(TObject *Sender);

Списки міститимуть назви переліки пристроїв, конфігурацію входів (в залежності від модифікації) та поле для вибору одного із типів уніфікованих синалів, що підтримується конкретним пристроєм. Кнопки керування призначені для ініціалізаації обраного апаратного забезпечення та переходу до другої форми або для виходу з програми. Для реалізації програмного коду нам знадобляться наступні змінні:

const MaxEntries = 255;

long DeviceHandle; // пристрій

DEVLIST DeviceList[MaxEntries + 1]; // *

DEVFEATURES DevFeatures; // **

PT_DeviceGetFeatures ptDevGetFeatures; // *** змінні для

роботи з

PT_AIConfig ptAIConfig; // *** пристроєм через

драйвер

PT_AIGetConfig ptAIGetConfig; // **

DEVCONFIG_AI Devconfig_AI; // *

long ErrCde; // змінні обробкки

char szErrMsg[80]; // помилок

При ініціалізації форми потрібно зчитати список встановлених пристроїв, що підтримуються драйвером:

int i;

short gnNumOfDevices; //кількість пристроїв

short nOutEntries; //список пристроїв

// отримання списку встановлених пристроїв

ErrCde = DRV_DeviceGetList(&DeviceList[0], MaxEntries,

&nOutEntries);

if (ErrCde != 0)

{

DRV_GetErrorMessage(ErrCde, szErrMsg);

Application->MessageBox(szErrMsg, "1_Error!!", MB_OK);

return;

}

// отримання кількості встановлених пристроїв

ErrCde = DRV_DeviceGetNumOfList(&gnNumOfDevices);

if (ErrCde != 0)

{

DRV_GetErrorMessage(ErrCde, szErrMsg);

Application->MessageBox(szErrMsg, "2_Error!!", MB_OK);

return;

}

//заповнюємо таблицю списку пристроїв

for (i = 0; i < gnNumOfDevices; i++)

{

Dev->Items->Add(DeviceList[i].szDeviceName);

}

// деактивуємо списки портів, вхідних сигналів, кнопку

ініціалізації

Inp->Enabled = False;

Vol->Enabled = False;

btStart->Enabled = False;

При виборі пристрою із списку потрібно додати його властивості до інших полів:

int i;

int tempNum;

char tempStr[30];

short nOutEntries;

long dwDeviceNum;

int iMaxSingleChannel;

int iMaxDiffChannel;

Inp->Clear();

Vol->Clear();

//визначення номера пристрою для відкриття із списку

dwDeviceNum

=

DeviceList[Dev-

>ItemIndex].dwDeviceNum;

//відкриття відповідного пристрою

ErrCde

=

DRV_DeviceOpen(dwDeviceNum,

&DeviceHandle);

if (ErrCde != 0)

{

DRV_GetErrorMessage(ErrCde, szErrMsg);

Application->MessageBox(szErrMsg,

"5_Error!!",

MB_OK);

return;

}

// отримання інформації про порти вводу-виводу

ptDevGetFeatures.buffer

=

(LPDEVFEATURES)&DevFeatures;

ptDevGetFeatures.size = sizeof(DEVFEATURES);

ErrCde

=

DRV_DeviceGetFeatures(DeviceHandle,

&ptDevGetFeatures);

if (ErrCde != 0)

{

DRV_GetErrorMessage(ErrCde, szErrMsg);

DRV_DeviceClose((LONG far *)&DeviceHandle);

Application->MessageBox(szErrMsg,

"6_Error!!",

21

MB_OK);

return;

}

ptAIGetConfig.size = sizeof(DEVCONFIG_AI);

ptAIGetConfig.buffer = &Devconfig_AI;

ErrCde

=

DRV_AIGetConfig(DeviceHandle,

&ptAIGetConfig);

if (ErrCde != 0)

{

DRV_GetErrorMessage(ErrCde, szErrMsg);

DRV_DeviceClose((LONG far *)&DeviceHandle);

Application->MessageBox(szErrMsg,

"7_Error!!",

MB_OK);

return;

}

iMaxSingleChannel = DevFeatures.usMaxAISiglChl;

iMaxDiffChannel = DevFeatures.usMaxAIDiffChl;

if ( iMaxSingleChannel > iMaxDiffChannel )

{

tempNum = iMaxSingleChannel;

}

else

{

tempNum = iMaxDiffChannel;

}

if (tempNum > 0)

{

for (i = 0; i < tempNum; i++)

{

strcpy(tempStr, "Chan#");

strcat(tempStr, IntToStr(i).c_str());

Inp->Items->Add(tempStr);

}

Inp->ItemIndex = 0;

Inp->Enabled = True;

}

// додавання інформації про по налаштування вхідного

сигналу

tempNum = DevFeatures.usNumGain;

if (DevFeatures.usNumGain > 0)

{

for (i = 0; i < DevFeatures.usNumGain; i++)

{

Vol->Items->Add(DevFeatures.glGainList[i].szGainStr);

}

Vol->ItemIndex = 0;

Vol->Enabled = True;

}

//активуємо кнопку старт

btStart->Enabled = True;

Натискання кнопки ініціалізація призводитиме до встановлення відповідного порта для зчитування, закриття поточної форми та відкриття вікна зчитування та обробки сигналу.

//активуємо порт для зчитування

ptAIConfig.DasChan = Inp->ItemIndex;

ErrCde = DRV_AIConfig(DeviceHandle, &ptAIConfig);

if (ErrCde != 0)

{

DRV_GetErrorMessage(ErrCde, szErrMsg);

Application->MessageBox(szErrMsg, "8_Error!!", MB_OK);

return;

}

// переходимо до вікна читання та обробки інформації

Form2->Series1->Clear();

Form1->Hide();

Form2->Show();

При виході із програми потрібно передбачити закриття сеансу

23

роботи з пристроєм та:

//закриваємо пристрій

DRV_DeviceClose(&DeviceHandle);

//закриваємо програму

Application->Terminate();

Форма №2 повинна містити наступні елементи та події:

TButton *Menu;

TTimer *tmrRead;

TScrollBar *Freq;

TEdit *edFreq;

TButton *Start;

TEdit *edVolt;

TButton *Stop;

TChart *Chart1;

TLineSeries *Series1;

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

void __fastcall MenuClick(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall FreqChange(TObject *Sender);

void __fastcall StartClick(TObject *Sender);

void __fastcall tmrReadTimer(TObject *Sender);

void __fastcall StopClick(TObject *Sender);

void __fastcall FormClose(TObject *Sender, TCloseAction

&Action);

Тут, таймер використовуватиметься для циклічного опитування аналогового порту пристрою з заданим проміжком часу (повзунок), а кожне нове значення наноситиметься на графік.

Для реалізації функції читання введемо наступні змінні:

PT_AIVoltageIn ptAIVolIn;

extern PT_AIConfig ptAIConfig;

extern long DeviceHandle;

extern long ErrCde;

extern char szErrMsg[80];

float press=0; //тиск

При створенні форми встановимо наступні початкові умови:

//встановлення початкової частоти опитування

Freq->Position = 10;

//одразу розпочати зчитування сигналу (за бажанням)

// tmrRead->Enabled = True;

FreqChange(Sender);

При зміні положення повзунка потрібно уникнути ділення на 0, а також правильно встановити частоту опитування та її відображення:

if (Freq->Position == 0)

tmrRead->Interval = 0;

else

tmrRead->Interval = 10000 / Freq->Position;

edFreq->Text = FloatToStrF((Freq->Position/10.0), ffFixed, 5, 2);

Кнопки «Старт» та «Стоп» повинні включати та виключати таймер циклічного опитування стану аналогового входу. При досягненні таймером заданого проміжку часу потрібно зчитати значення напруги на аналоговому вході, відобразити його та розрахувати значення тиску (за статичною характеристикою перетворення давача). Значення тиску нанести на графік.

Приблизний програмний код реалізації функцій у таймері наступний:

Single voltage; //значення напруги на вході

ptAIVolIn.chan = ptAIConfig.DasChan;

ptAIVolIn.gain = ptAIConfig.DasGain;

ptAIVolIn.voltage = &voltage;

DRV_AIVoltageIn(DeviceHandle, &ptAIVolIn);

if (ErrCde != 0)

{

DRV_GetErrorMessage(ErrCde, szErrMsg);

Application->MessageBox(szErrMsg, "10_Error!!", MB_OK);

tmrRead->Enabled = False;

return;

}

// виведення значення напруги

edVolt->Text = FloatToStrF(voltage, ffFixed, 5, 2);

//розрахунок значення тиску

press=;

Series1->Add(press);

Відлагодити створене програмне забезпечення використовуючи програмну емуляцію плати розширення Advantech DEMO. Перевірити роботу програмного забезпечення підключивши до клемно-блочного з'єднувача давач тиску.

Результат виконання:

Рис.1. Перша форма

Рис. 2. Друга форма та результат виконання роботи

Висновок: під час виконання лабораторної роботи я ознайомився із основними принципами роботи з РСІ- платами збору та обробки інформації для ПК, отримав навички розробки прикладного програмного забезпечення для обміну даними між зовнішніми пристроями та ПК з використанням драйверів.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.