Использование контроллера

Блок-схема алгоритма программы

 
 


 
 

 
 


Использование контроллера

Контроллер основан на микропроцессоре Atmel AT89C5131. Для взаимодействия AT89C5131 и компьютера используется модуль DLP-USB245M компании FTDI. Передача данных осуществляется по шине USB. Компанией FTDI предоставляется драйвер, позволяющий программисту работать с контроллером через виртуальный COM порт.

Работа с контроллером осуществляется путём записи кода команды (NAF) (и при необходимости – дополнительного параметра) в COM порт с помощью функций Win32 API.

Контроллер содержит 7 базовых регистров, посредством которых происходит информационный обмен между модулями в крейте и ПК:

*****************************************************************

1. (W) -Шина данных (вывод) – двадцать четыре бита (W1 –W24)

реализована тремя восьмибитовыми регистрами: Wl, Wm, Wh (младшим,средним, старшим)

2. (R) –Шина данных (ввод) – двадцать четыре бита (R1 – R24)

реализована тремя восьмибитовыми регистрами: Rl, Rm, Rh (младшим, средним, старшим)

************************************************************

3. (A) – Регистр субадреса – четыре бита (А1-А4)

4. (F) – Регистр функции – пять битов (F1-F5)

5. (N) – Регистр номера станции – пять битов (N1-N5)

************************************************************

6 (Z) – Регистр управления – пять битов I, C, Z, X, Q,L

7 (L) – Регистр состояния – двадцать четыре бита (L1 –L24)

************************************************************

Для упрощения работы с контроллером была создана библиотека libcamac.dll.

Библиотека libcamac.dll

Для упрощения написания программ управления контроллером предоставляется библиотека libcamac.dll. Эта библиотека предоставляет набор функций для взаимодействия с контроллером. Она реализует использование буфера команд для ускорения работы через виртуальный COM порт, что позволяет увеличить скорость обмена данными между компьютером и контроллером.

Типичная последовательность действий при работе с библиотекой:

******************************************************************

1. Поиск доступных COM портов с помощью функции searchCOMPorts()

2. Открытие порта с помощью функции openCOMPort()

3. Назначение открытого порта как порта для общения с контроллером с помощью функции setCamacPort()

4. Работа с контроллером; при работе с контроллером с помощью функций N(), A(), F(), Wl(), и.т.д. осуществляется заполнение буфера команд. Использование буфера и последующей пересылки буфера целиком позволяет увеличить скорость работы. После формирования буфера необходимо переслать его на контроллер с помощью команды Act(). Для считывания данных используется функция recData(). После выполнения команд надо очистить буфер с помощью функции clearBuffer().

5. Закрытие порта с помощью функции closeCOMPort().

************************************************************

Для работы с библиотекой из программ на Delphi создан модуль Camac.pas. Для работы программ, использующих библиотеку, необходимо чтобы файл libcamac.dll находился в каталоге с программой.

* В случае ошибки функции возвращают ненулевой код завершения. Текстовое

* описание ошибки может быть получено с помощью функции errorCodeString().

*

unit Camac;

// =========================================================

function openCOMPort(const Name: PChar; var ComPort: THandle): integer; stdcall; external 'libcamac.dll' name 'openCOMPort';

function closeCOMPort(ComPort: THandle): integer; stdcall; external 'libcamac.dll' name 'closeCOMPort';

function searchCOMPorts(Numbers: pointer; const Size: integer): integer; stdcall; external 'libcamac.dll' name 'searchCOMPorts';

procedure setCamacPort(Port: THandle); stdcall; external 'libcamac.dll' name 'setCamacPort';

procedure clearBuffer(); stdcall; external 'libcamac.dll' name 'clearBuffer';

procedure recData(Data: pointer; const Size: integer); stdcall; external 'libcamac.dll' name 'recData';

;

// ---------------------------------------------------------

procedure ActZ(); stdcall; external 'libcamac.dll' name 'ActZ';

procedure ActCam(); stdcall; external 'libcamac.dll' name 'ActCam';

procedure ActWh(Byte: byte); stdcall; external 'libcamac.dll' name 'ActWh';

procedure ActWm(Byte: byte); stdcall; external 'libcamac.dll' name 'ActWm';

procedure ActWl(Byte: byte); stdcall; external 'libcamac.dll' name 'ActWl';

procedure ActWhml(Word: longword); stdcall; external 'libcamac.dll' name 'ActWhml';

procedure ActW(Word: longword); stdcall; external 'libcamac.dll' name 'ActW';

procedure ActA(Byte: byte); stdcall; external 'libcamac.dll' name 'ActA';

procedure ActF(Byte: byte); stdcall; external 'libcamac.dll' name 'ActF';

procedure ActN(Byte: byte); stdcall; external 'libcamac.dll' name 'ActN';

procedure ActNAF(N: byte; A: byte; F: byte); stdcall; external 'libcamac.dll' name 'ActNAF';

function ActRh(): byte; stdcall; external 'libcamac.dll' name 'ActRh';

function ActRm(): byte; stdcall; external 'libcamac.dll' name 'ActRm';

function ActRl(): byte; stdcall; external 'libcamac.dll' name 'ActRl';

function ActR(): longword; stdcall; external 'libcamac.dll' name 'ActR';

function ActL(): byte; stdcall; external 'libcamac.dll' name 'ActL';

function ActQ(): byte; stdcall; external 'libcamac.dll' name 'ActQ';

function ActX(): byte; stdcall; external 'libcamac.dll' name 'ActX';

// =========================================================


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: