Использование контроллера
⇐ ПредыдущаяСтр 2 из 2
Контроллер основан на микропроцессоре 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 setCOMReadTimeOut(ComPort: THandle; const ReadTotalTimeout, ReadTotalTimeoutMultiplier, ReadTotalTimeoutConstant: integer): integer; stdcall; external 'libcamac.dll' name 'setCOMReadTimeOut'; function setCOMWriteTimeOut(ComPort: THandle; const WriteTotalTimeoutMultiplier, WriteTotalTimeoutConstant: integer): integer; stdcall; external 'libcamac.dll' name 'setCOMWriteTimeOut';
function setCOMSpeed(ComPort: THandle; const Speed: integer): integer; stdcall; external 'libcamac.dll' name 'setCOMSpeed';
function searchCOMPorts(Numbers: pointer; const Size: integer): integer; stdcall; external 'libcamac.dll' name 'searchCOMPorts'; function errorCodeString(const ErrorCode: integer): PChar; stdcall; external 'libcamac.dll' name 'errorCodeString';
function sendCOMData(ComPort: THandle; const Data: pointer; const DataSize: integer): integer; stdcall; external 'libcamac.dll' name 'sendCOMData';
function receiveCOMData(ComPort: THandle; const Data: pointer; const DataSize: integer): integer; stdcall; external 'libcamac.dll' name 'receiveCOMData'; function receiveAllCOMData(ComPort: THandle; const Data: pointer; DataSize: pointer): integer; stdcall; external 'libcamac.dll' name 'receiveAllCOMData';
// ---------------------------------------------------------
procedure setCamacPort(Port: THandle); stdcall; external 'libcamac.dll' name 'setCamacPort'; procedure clearBuffer(); stdcall; external 'libcamac.dll' name 'clearBuffer'; procedure addToBuffer(Byte: byte); stdcall; external 'libcamac.dll' name 'addToBuffer'; procedure sendBuffer(); stdcall; external 'libcamac.dll' name 'sendBuffer'; procedure recData(Data: pointer; const Size: integer); stdcall; external 'libcamac.dll' name 'recData'; function getLastError(): integer; stdcall; external 'libcamac.dll' name 'getLastError';
// ---------------------------------------------------------
procedure Act(); stdcall; external 'libcamac.dll' name 'Act'; procedure Cam(); stdcall; external 'libcamac.dll' name 'Cam'; procedure Z(); stdcall; external 'libcamac.dll' name 'Z'; procedure Wh(Byte: byte); stdcall; external 'libcamac.dll' name 'Wh'; procedure Wm(Byte: byte); stdcall; external 'libcamac.dll' name 'Wm'; procedure Wl(Byte: byte); stdcall; external 'libcamac.dll' name 'Wl'; procedure Whml(Word: longword); stdcall; external 'libcamac.dll' name 'Whml'; procedure W(Word: longword); stdcall; external 'libcamac.dll' name 'W'; procedure A(Byte: byte); stdcall; external 'libcamac.dll' name 'A'; procedure F(Byte: byte); stdcall; external 'libcamac.dll' name 'F'; procedure N(Byte: byte); stdcall; external 'libcamac.dll' name 'N'; procedure NAF(N: byte; A: byte; F: byte); stdcall; external 'libcamac.dll' name 'NAF'; procedure Rh(); stdcall; external 'libcamac.dll' name 'Rh'; procedure Rm(); stdcall; external 'libcamac.dll' name 'Rm'; procedure Rl(); stdcall; external 'libcamac.dll' name 'Rl'; procedure R(); stdcall; external 'libcamac.dll' name 'R'; procedure L(); stdcall; external 'libcamac.dll' name 'L'; procedure Q(); stdcall; external 'libcamac.dll' name 'Q'; procedure X(); stdcall; external 'libcamac.dll' name 'X'; procedure CamWh(Byte: byte); stdcall; external 'libcamac.dll' name 'CamWh'; procedure CamWm(Byte: byte); stdcall; external 'libcamac.dll' name 'CamWm';
procedure CamWl(Byte: byte); stdcall; external 'libcamac.dll' name 'CamWl'; procedure CamWhml(Word: longword); stdcall; external 'libcamac.dll' name 'CamWhml'; procedure CamW(Word: longword); stdcall; external 'libcamac.dll' name 'CamW'; procedure CamA(Byte: byte); stdcall; external 'libcamac.dll' name 'CamA'; procedure CamF(Byte: byte); stdcall; external 'libcamac.dll' name 'CamF'; procedure CamN(Byte: byte); stdcall; external 'libcamac.dll' name 'CamN'; procedure CamNAF(N: byte; A: byte; F: byte); stdcall; external 'libcamac.dll' name 'CamNAF'; procedure CamRh(); stdcall; external 'libcamac.dll' name 'CamRh'; procedure CamRm(); stdcall; external 'libcamac.dll' name 'CamRm'; procedure CamRl(); stdcall; external 'libcamac.dll' name 'CamRl'; procedure CamR(); stdcall; external 'libcamac.dll' name 'CamR'; procedure CamL(); stdcall; external 'libcamac.dll' name 'CamL'; procedure CamQ(); stdcall; external 'libcamac.dll' name 'CamQ'; procedure CamX(); stdcall; external 'libcamac.dll' name 'CamX'; 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';
// =========================================================
Читайте также: II. Использование галереи фильтров Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|