Блок-схема алгоритма программы
Использование контроллера
Контроллер основан на микропроцессоре 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';
// =========================================================