Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_Pristr_3_Motor_11.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.06 Mб
Скачать

На валах електродвигунів адаптера закріплено тримачі, на які можуть встановлюватися наступні диски (рис. 2.4).

а) б) в)

Рис. 2.4. Диски для електродвигунів:

а) диск №1 (2 прозорі і 2 непрозорі сектори);

б) диск №2 (кольори спектру); в) диск №3 (диск Бенхема)

3. Програма керування „lpt_motor_10s”

3.1. Програмний доступ до портів у Windows nt/2000/xp з використанням бібліотеки io.Dll

При використанні DOS і Windows 95/98 доступ до портів вводу/виводу (I/O ports) комп’ютера був відносно простим. Проте у Windows NT/2000/XP (захищена операційна система) доступ до портів вводу/виводу значно ускладнився за рахунок віртуалізації апаратного забезпечення (virtualize hardware). Віртуалізація означає, що програма вже не може звертатися безпосередньо до фізичного пристрою, а звертається тільки до драйвера, який емулює роботу фізичного пристрою (клавіатури, звукової карти чи принтера). Програмна емуляція фізичних пристроїв з одного боку підвищує надійність і захищеність роботи операційної системи (помилкові команди перехоплюються), а з іншого обмежує можливості керування нестандартними зовнішніми пристроями через порти вводу/виводу.

Один із способів доступу до портів в операційних системах Windows NT/2000/XP, який використовується у даній лабораторній роботі, полягає у використанні динамічно під’єднуваної бібліотеки io.dll. Дана бібліотека, зокрема, містить такі процедури і функції:

  • PortOut – процедура, яка виконує запис байта у порт.

  • PortIn – функція, яка зчитує значення байту з порту.

  • IsDriverInstalled ­ – функція, яка повертає не 0, якщо io.dll інстальовано.

Розглянемо приклад цих процедур і функцій з програми, створеної в середовищі Delphi:

function IsDriverInstalled: Boolean; stdcall; external 'io.dll'; // прототип функції

procedure PortOut(Port : Word; Data : Byte);stdcall; external 'io.dll';

// прототип процедури

function PortIn(Port : Word) : Byte;stdcall; external 'io.dll';

procedure TForm1.FormCreate(Sender: TObject);

begin

if IsDriverInstalled then

begin

Label1.Caption:='Driver ready...'; // драйвер інстальовано

end;

end;

procedure TForm1.Button_Save_Click(Sender: TObject);

var i:byte;

begin

for i:=0 to 255 do

begin

PortOut($378,i); // запис у порт з адресою $378 байту і

Sleep(200); Application.ProcessMessages;

end;

end;

procedure TForm1.Button_Read_Click(Sender: TObject);

var b:byte;

begin

b:=PortIn($379); // зчитування байту b із порту з адресою $379

Edit1.Text:=IntToStr(b);

end;

Тобто за допомогою процедури PortOut (Port1, Data1) виконується запис в порт з адресою Port1 байту Data1, а функція PortIn (Port2) зчитує байт з порту за адресою Port2.

Для підтримки віртуального режиму виконання лабораторної роботи запис в порт потрібно виконувати процедурою PortOut_V (Port1, Data1) (яка викликає процедуру PortOut (Port1, Data1)), а зчитування з порту виконувати функцією PortIn_V(Port2) ( яка викликає функцію PortIn (Port2)).

3.2. Опис програми керування „lpt_Motor_10s”

Програма „LPT_Motor_10s” призначена для керування адаптером „LPT_Motor_10h”. Програма виконує запис у регістри даних DR і контролю CR порту принтера значень бітів, які встановлюються на формі програми, і зчитує біти регістру стану SR (рис. 3.1).

Рис. 3.1. Головна форма програми „LPT_Motor_10s”;

на діаграмі показано вихідний сигнал фоторезистора, що отримується при повороті диску №1 (рис. 2.4) між ввімкненим світлодіодом і фоторезистором

Якщо після першого запуску програми драйвер io.dll не встановлено, то потрібно закрити програму і повторно запустити її на виконання. Стан виконавчих пристроїв можна встановлювати за допомогою перемикачів „D0_Motor_1, „D1_Motor_2 та ін., наприклад перемикач „D0_Motor_1вмикає електричний двигун E1.

Набір компонентів „Діаграма” призначений для зчитування значень бітів регістру стану порта принтера SR6 або SR7. Біт SR6 залежить від стану фоторезистора R35 (1 – фоторезистор освітлений), біт SR7 залежить від стану перемикача S1 (1 – перемикач вимкнено). Кнопка „Старт” починає зчитування графіку сигналу з кількістю точок QI та часом дискретизації Time_Discret. Процес зчитування сигналу можна зупинити кнопкою „Стоп”, а кнопка „Зберегти” зберігає зчитані значення у файл. Якщо встановити перемикач „Осцилограф”, то процес зчитування сигналу буде відбуватися постійно (до натиснення кнопки „Стоп”), але на діаграмі відображаються тільки останні QI значень.

Процедура програми, що викликається кнопкою „Z1”, записує у регістр DR для парних бітів 1, а для непарних – 0 (біти записані у масиві mDR). Значення бітів відображаються на формі процедурою „p_Show_DR” і записуються в порт процедурою „p_Write_DR”. Після затримки в 2 с виконується інверсія бітів регістру DR і запис їх нових значень у порт.

Процедура, що викликається кнопкою „Z2”, записує у регістр DR значення байту bOut у циклі від 1 до 16, де на кожній ітерації значення bOut збільшується на 1 починаючи з 0.

Процедура, що відповідає кнопці „Z3”, керує виконавчими пристроями і виконує наступні дії:

  1. Дозволяє запис у регістр команд DD1 пристрою (встановлюються біти CR0=0 і CR1=1); вказано значення бітів регістру контролю CR як прямих, оскільки їх інверсія відбувається перед записом у порт.

  2. У циклі по змінній m три рази послідовно вмикає електродвигун Е1 (біт DR0=1), а після затримки в 3 с вимикає (DR0=0).

  3. Забороняє запис у регістр команд пристрою (встановлюються значення бітів CR0=0 і CR1=0 регістру CR).

На формі „Опції” встановлюються наступні опції програми: вигляд і колір графіку сигналу, мова інтерфейсу.

Програма дозволяє працювати не тільки з реальним пристроєм „LPT_Motor_10h”, але й з його програмною моделлю при ввімкненому перемикачі „Моделювання”. При цьому кнопка „Диск_М” відкриває форму із зображенням всього пристрою (рис. 3.2), а кнопка „Плата_М” відкриває форму із зображенням плати пристрою (рис. 3.3).

Рис. 3.2. Форма „Диск_Моделювання” із зображенням пристрою „LPT_Motor_10h

Рис. 3.3. Форма „Плата_Моделювання” із зображенням плати пристрою „LPT_Motor_10h

На формах (рис. 3.2, рис. 3.3) в режимі моделювання показується поворот дисків, встановлених на валах електричних двигунів Е1 та Е2; значення бітів порта принтера та стани виконавчих пристрої візуалізуються за допомогою світлодіодів. Користувач може змінювати стан біту SR7 за допомогою перемикача S1 (рис. 3.2).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]