Программное обеспечение


LComp

Руководство программиста

Комплект ПО для разработки приложений (SDK)
Windows XP/Vista/W7
L-761/L-780/L-783/L-791/E14-440/E14-140/E20-10/E154


























Москва. Февраль. 2020
Ревизия 7.0.0.5






ООО "Л КАРД"

Адреса в Интернет:

E-Mail:











Представители в регионах:

Предупреждение

Version 7.0.0.4

Copyright (c) 1998-2019 'L Card' Ltd.

Интерфейс и функциональные возможности драйвера и библиотеки могут измениться в последующих версиях.

Учтите это при проектировании своих приложений.

Корректная поддержка плат с помощью это драйвера возможна только при соответствующих прошивках BIOS ADSP. Пока это выполняется для L-761 L-780 L-783 L-1450 L-791 E14-440 E14-140 E20-10 E154.

Описание технологии

Данный релиз драйвера и библиотеки поддерживает следующие платы:

L761

PCI

2000/XP

L780

PCI

2000/XP

L783

PCI

2000/XP

L791

PCI

2000/XP

E14-440

USB

2000/XP

E14-140

USB

2000/XP

E20-10

USB

2000/XP

E154

USB

2000/XP

Принцип действия:

Устройство АЦП собирает данные в кольцевой буфер или FIFO, реализованный в ОЗУ сигнального процессора или микросхемы ПЛИС. При заполнении части буфера генерируется прерывание. Драйвер устройства по этим прерываниям вычитывает данные и помещает их в большой кольцевой буфер, реализованный в ОЗУ компьютера. Большой кольцевой буфер драйвера доступен пользовательскому приложению - имеется указатель на начало этого буфера. Кроме этого пользователю доступен счетчик заполнения буфера (тоже посредством указателя). Используя этот счетчик, пользователь может забирать данные из правильной части кольцевого буфера (т.е. из той, в которую драйвер уже записал данные).

Приложение может:

Связь драйвера с приложением возможна двумя способами:

Первый способ работает всегда, но требует ресурсов от компьютера при ожидании в цикле. Второй способ удобно использовать при осциллографическом режиме работы.

Использование такого режима работы - по прерываниям - обусловлено тем, что платы PCI L-761/780/L783 построены на микросхеме без поддержки BusMastering и для них такой способ ввода непрерывного потока данных является единственно возможным. При этом загрузка ЦПУ минимальна благодаря высокой скорости чтения на шине PCI.

Для платы L-791 режим ввода и принцип сбора немного другие. Эта плата поддерживает режим ввода/вывода BusMaster. При этом основной принцип работы с библиотекой остается прежний - приложение забирает данные из кольцевого буфера в памяти компьютера. К сожалению эта плата поддерживает только 32-битный режим BusMaster и поэтому в ней реализован комбинированный режим - в небольшой буфер расположенный в 32-битном адресном пространстве данные поступают по BusMaster, а в кольцевой буфер они перекладываются по прерываниям.

Для USB модулей реализован также принцип кольцевого буфера путем циклической перепосылки запросов на ввод данных.

Большинство плат и модулей поддерживают непрерывный вывод данных на опциональный ЦАП. Механизм вывода потока аналогичен механизму ввода данных с АЦП. У PCI плат без BusmMster это вывод по прерываниям. У USB циклическая перепосылка запросов. У L-791 комбинированный метод с прерываниями и BusMaster (кроме этого в данные для ЦАП необходимо вставить маркер генерайции прерывания с нужным шагом)

Установка и настройка PCI плат

Первое правило при установке плат - необходимо убедиться, что компьютер настроен и все драйвера для него установлены. Особенно драйвера для чипсета.Также надо проверить, что в плате L-Card прошита самая свежая конфигурационная ПЗУ (см. каталог UTILS после установки драйверов). Как правило, для установки PCI платы необходимо просто вставить ее в компьютер и установить драйвера. После этого плата готова к использованию. Но возможны ситуации, когда это не так. Новые драйвера - это полноценные WDM драйвера способные работать в Windows c поддержкой ACPI и соответственно shared IRQ. Но возможны ситуации, когда другие устройства некорректно работают с ACPI и при этом разделяют ресурсы с платой L-Card. Тогда возможны зависания системы и частичная или полная неработоспособность платы L-Card или какой-то другой. Для решения этой проблемы, необходимо какими либо средствами исключить разделение ресурсов платой L-Card c другими устройствами компьютера. Разделение ресурсов также может понизить производительность системы и/или платы L-Card и тогда тоже желательно его ликвидировать. Ниже приведены пути отключения ACPI и исключения ситуации Shared IRQ для Windows 98 и 2000 (под Me и XP аналогично).

Общая часть:

Если это все проделать на компьютере до установки ОС, то при установке ОС она установится в варианте без поддержки ACPI. Если ОС уже стоит, то придется отключить ACPI в ОС.

Windows 98:

Windows 2000:

Если ресурсы по прежнему разделяются, то можно попробовать переставить плату L-Card в другой слот PCI т.к. некоторые слоты PCI всегда разделяют прерывания с AGP слотом или дополнительными PCI слотами (если слотов > 4).

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

Напрямую с реестром библиотека и пользователь больше не работают. Информация о системных ресурсах назначенных плате извлекается драйверами при помощи PnP менеджера Windows. Она хоть и хранится в реестре, но в служебном формате. Для PCI плат эта информация видна на вкладке ресурсов для соответствующей платы. Для ISA плат она там устанавливается. Только тип платы и процессора DSP задаются посредством INF файла при установке плат. Получить их можно посредством вызова библиотечной функции GetSlotParam. Изменить соответственно - изменив INF файл.

Создание своего дистрибутива

Если Вы написали свое приложение и хотите оформить его в виде дистрибутива, то включите в него следующие файлы:

Все это будет работать под операционными системами Windows XP/Vista/W7. Оригинальный скрипт инсталляции написан с помощью бесплатной программы NSIS(www.nullsoft.com) и прилагается.

Низкоуровневое API драйвера

Драйвер поддерживает некоторый низкоуровневый интерфейс, с помощью которого можно управлять платой без использования промежуточной DLL библиотеки. Все обращения к драйверу выполняются посредством вызова стандартной функции DeviceIoControl с передачей ей соответствующих параметров. Предварительно драйвер должен быть открыт с помощью CreateFile. При завершении работы с драйвером необходимо вызвать CloseHandle.

См. исходники библиотеки, если есть необходимость.

Базовый класс (LUnknown)

Наследует от : 

Описание :

Определение :

Подробнее :

Библиотека функций создана для того, чтобы упростить связь приложений с драйверами. Ниже приведен полный список функций поддерживаемых библиотекой - фактически это файл ifc_ldev.h. Работа с библиотекой построена на принципах COM-интерфейса, но это не COM в полном смысле этого слова. Для всех плат функции имеют одно и тоже название. Те из них, которые не поддерживаются конкретной платой, возвращают статус L_NOTSUPPOTRED. Трактовка параметров в некоторых функциях различается для конкретных типов плат, о чем написано в описании функции.

Описание API DLL библиотеки (IDaqLDevice)

Класс IDaqLDevice

Наследует от :  LUnknown

Описание :

Определение :

Подробнее :

Библиотека функций создана для того, чтобы упростить связь приложений с драйверами. Ниже приведен полный список функций поддерживаемых библиотекой - фактически это файл ifc_ldev.h. Работа с библиотекой построена на принципах COM-интерфейса, но это не COM в полном смысле этого слова. Для всех плат функции имеют одно и тоже название. Те из них, которые не поддерживаются конкретной платой, возвращают статус L_NOTSUPPOTRED. Трактовка параметров в некоторых функциях различается для конкретных типов плат, о чем написано в описании функции.

CreateInstance

Функция создает объект для конкретного слота. Тип объекта определяется автоматически внутри этой функции.

Описание:

Параметры:

Возвращает:

Примечание:

Дополнительную информацию о типе ошибки можно получить вызвав GetLastError. Если она вернула L_ERROR_NOBOARD значит в запрашиваемом слоте нет платы. L_ERROR_INUSE - плата в этом слоте уже используется кем-то. L_ERRROR - возвращается когда невозможно создать объект. L_NOTSUPPORTED - если в слоте установлена плата, которая не поддерживается этой библиотекой.
После вызова CreateInstance надо вызвать QueryInteface для получения указателя на интерфейс с которым дальше работать.

Подключение и работа с библиотекой (на CPP)

Общий принцип работы с библиотекой:

Виртуальные слоты это собственно порядковые числа в названиях линков драйверов. Начинаются с 0 и так далее по порядку. Разделения на PCI или USB платы нет. Причем определить, что за плата соответствует конкретному слоту, можно только открыв его и прочитав информацию GetSlotParam и ReadPlataDescr (+ для E440, E2010 предварительно надо загрузить плату). GetSlotParam даст информацию о типе платы и назначенных ей ресурсах. Далее для PCI плат более подробную информацию даст ReadPlataDescr. Для E440, E2010 также можно вызвать ReadPlataDescr, но предварительно в нее надо загрузить БИОС. Вызов ReadPlataDescr обязателен перед началом конфигурирования сбора данных поскольку там содержится информация о частоте кварца необходимая при расчетах временных параметров сбора данных. Также там хранятся калибровочный коэффициенты.

Для одной платы начало работы выглядит примерно так:

Файл create.h

#ifndef __TEST__
#define __TEST__

typedef IDaqLDevice* (*CREATEFUNCPTR)(ULONG Slot);

ULONG CallCreateInstance(char* name);

extern CREATEFUNCPTR CreateInstance;

#endif

Файл create.cpp

#include <windows.h>
#include <objbase.h>
#include "..\include\ioctl.h"
#include "..\include\ifc_ldev.h"
#include "..\include\create.h"

CREATEFUNCPTR CreateInstance;

ULONG CallCreateInstance(char* name)
{
   HINSTANCE hComponent = ::LoadLibrary(name);
   if(hComponent==NULL)
   {
      return 0;
   }

   CreateInstance = (CREATEFUNCPTR)::GetProcAddress(hComponent,"CreateInstance");
   if(CreateInstance==NULL)
   {
      return 0;
   }
   return 1;
}

Где-то в Вашем проекте (в компьютере одна плата L-783):

   ULONG slot = 0;

   trace("Get IUnknown pointer");
   CallCreateInstance("lcomp.dll");
   LUnknown* pIUnknown = CreateInstance(slot);
   if(pIUnknown == NULL) { trace("CallCreateInstance failed"); return 1; }
   
   trace("Get IDaqLDevice interface");
   IDaqLDevice* pI;
   HRESULT hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
   if(!SUCCEEDED(hr)) { trace("Get IDaqLDevice failed"); return 1; }
   trace("IDaqLDevice get success");
   trace("Free IUnknown");
   pIUnknown->Release();

   pI->OpenLDevice(); // начало работы с платой
   pI->LoadBios("l783");
   ...

   pI->CloseLDevice(); // завершение работы
   pI->Release();

Подробнее - смотрите примеры.

Подключение и работа с библиотекой (на Pascal/Delphi)

Общий принцип работы с библиотекой:

Виртуальные слоты это собственно порядковые числа в названиях линков драйверов. Начинаются с 0 и так далее по порядку. Разделения на PCI или USB платы нет. Причем определить, что за плата соответствует конкретному слоту, можно только открыв его и прочитав информацию GetSlotParam и ReadPlataDescr (+ для E440, E2010 предварительно надо загрузить плату). GetSlotParam даст информацию о типе платы и назначенных ей ресурсах. Далее для PCI плат более подробную информацию даст ReadPlataDescr. Для E440, E2010 также можно вызвать ReadPlataDescr, но предварительно в нее надо загрузить БИОС. Вызов ReadPlataDescr обязателен перед началом конфигурирования сбора данных поскольку там содержится информация о частоте кварца необходимая при расчетах временных параметров сбора данных. Также там хранятся калибровочный коэффициенты..

Для одной платы начало работы выглядит примерно так:

Файл create.pas

unit Create;

interface

uses Windows, ioctl, ifc_ldev;

type
  TCreateInstance = function(Slot:ULONG): LUnknown; cdecl;

var
  hModule: THandle;
  CreateInstance: TCreateInstance;

  function CallCreateInstance(name:PChar):ULONG;

implementation

function CallCreateInstance(name:PChar):ULONG;
begin
   hModule:=0;
   hModule:=LoadLibrary(name);
   if(hModule=0) then
   begin
      Result:=0;
      Exit;
   end;
   @CreateInstance:=GetProcAddress(hModule,'CreateInstance');
   if(@CreateInstance=nil) then
   begin
      Result:=0;
      Exit;
   end;
   Result:=1;
end;

end.

Где-то в Вашем проекте (в компьютере одна плата L-1450):

var
  pLDev: IDaqLDevice;
  pIUnknown:LUnknown;
  hr:Integer;
  dev: THandle;

   ...
   if(CallCreateInstance('lcomp.dll')=1) then
   begin
      {сообщение об успехе загрузки библиотеки}
   end;

   pIUnknown:=CreateInstance(0);
   hr := pIUnknown.QueryInterface(IID_ILDEV,pLDev);
   if(not Succeeded(hr)) then MessageBox(0,'Get interface failed','Error',MB_OK);
   pIUnknown.Release;
   dev:=pLDev.OpenLDevice;
   ...
   
   pLDev.CloseLDevice;
   pLDev.Release;
   

Подробнее - смотрите примеры.

Функции для работы с портами ввода/вывода

Введение

В данном разделе собраны функции для работы с портами ввода/вывода плат.

inbyte

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

inword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

indword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

outbyte

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

outword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

outdword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

inmbyte

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

inmword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

inmdword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

outmbyte

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

outmword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

outmdword

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В данной реализации нет проверки выхода смещения за разрешенную границу. Пояснение про key. У некоторых плат есть несколько регионов портов ввода/вывода. Для переключения между ними и служит этот параметр. Например, при key=0 для L7XX будет осуществляться доступ к служебным регистрам PLX, а при key=1 к DSP(те работа через порты, а не память). В стандартных драйверах этот параметр не задействован и должен быть всегда равен 0.

Основные функции

Введение

В данном разделе собраны основные функции для работы с модулями/платами.

GetWord_DM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

PutWord_DM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

PutWord_PM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

GetWord_PM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

GetArray_DM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

PutArray_DM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

PutArray_PM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

GetArray_PM

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

SendCommand

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

PlataTest

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Для L791, E14-140 E154и E20-10 это просто заглушка всегда возвращающая успех.

GetSlotParam

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

OpenLDevice

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Для каждой платы установленной в компьютер драйвер формирует линк по следующему принципу: LDev## (где ## - номер 00,01..).Номер в названии линка - это виртуальный слот. Номер виртуального слота, для которого будет выполнена функция OpenLDevice, передается как параметр в функции CreateInstance.

CloseLDevice

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

После вызова этой функции значение дескриптора устройства больше недействительно и не может использоваться при вызове функций библиотеки. Кроме этого еще происходит удаление выделенной в функции RequsetBufferStream памяти для кольцевого буфера.

SetParametersStream

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Вызов этой функции настраивает плату АЦП/ЦАП на заданные параметры ввода или вывода данных, устанавливает размера кольцевого буфера на плате, задает интервал генерации прерываний (через столько-то точек), передает приложению адреса большого буфера и переменой синхронизации.

Принцип быстрого и непрерывного ввода или вывода данных с платы в драйверах всегда одинаков. Различается только направление передачи данных. Поэтому было введено понятие потоков данных. Поток создается 3 функциями - RequestBufferStream, FullDAQparameters, SetParametersStream. Фактически это большой кольцевой буфер и структура, описывающая параметры сбора данных. Поток может быть с АЦП, на ЦАП, на цифровые линии, с цифровых линий или какой-то нестандартный реализованный в драйвере платы. Интерфейс при этом не меняется. Чтобы различать потоки служит переменная StreamId - это некоторая константа, определенная в заголовочных файлах.

RequestBufferStream

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Выделяет память в ОЗУ компьютера под большой кольцевой буфер. Память выделяется с выравниванием размера на 4096 байт. Принцип быстрого и непрерывного ввода или вывода данных с платы в драйверах всегда одинаков. Различается только направление передачи данных. Поэтому было введено понятие потоков данных. Поток создается 3 функциями - RequestBufferStream SetParametersStream FullDAQparameters. Фактически это большой кольцевой буфер и структура, описывающая параметры сбора данных. Поток может быть с АЦП, на ЦАП, на цифровые линии, с цифровых линий или какой-то нестандартный реализованный в драйвере платы. Интерфейс при этом не меняется. Чтобы различать потоки служит переменная StreamId - это некоторая константа, определенная в заголовочных файлах.

FillDAQparameters

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Заполняет внутреннюю структуру параметров сбора данных значениями из структуры ADC_PAR,DAC_PAR или другой в зависимости от типа поля s_Type.

InitStartLDevice

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Надо вызывать перед вызовом функции StartLDevice.

StartLDevice

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

После выполнения функции можно переходить к откачиванию данных из буфера. При этом необходимо следить за синхронизацией поступления данных и их откачки.

StopLDevice

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

После остановки данные в буфере соответствуют последним данным, полученным от платы. Их можно обрабатывать любым способом. Необходимо только учитывать, что остановка могла произойти в любом месте этого буфера и гарантировать целостность можно только той части буфера, на готовность которой указывала переменная синхронизации.

LoadBios

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

В модуль E20-10 загружается прошивка ПЛИС e2010.pld, указывать ее нужно также без расширения. У L791 нет загружаемого БИОСа. E140 также не требует загрузки БИОС.

IoAsync

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Эта функция реализует все асинхронные операции ввода/вывода (типа одиночного ввода данных).

ReadPlataDescr

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

WritePlataDescr

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

ReadFlashWord

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

WriteFlashWord

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

EnableFlashWrite

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

EnableCorrection

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

GetParameter

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

C помощью вызова GetParameter с name определенными ниже можно получит ряд полезных значений:

   #define L_BOARD_TYPE       10000  // собственно поле sl.BoardType
   #define L_POINT_SIZE       10001  // размер в байтах отсчета АЦП
   #define L_SYNC_ADDR_LO     10002  // адрес переменной sync (счетчик АЦП)
   #define L_SYNC_ADDR_HI     10003  // адрес переменной sync (счетчик АЦП)
   #define L_DATA_ADDR_LO     10004  // адрес массива data ( АЦП)
   #define L_DATA_ADDR_HI     10005  // адрес массива data ( АЦП)
   #define L_SYNC1_ADDR_LO    10006  // адрес переменной sync (счетчик ЦАП)
   #define L_SYNC1_ADDR_HI    10007  // адрес переменной sync (счетчик ЦАП)
   #define L_DATA1_ADDR_LO    10008  // адрес массива data ( ЦАП)
   #define L_DATA1_ADDR_HI    10009  // адрес массива data ( ЦАП)

   #define L_USER_BASE        10100  // ранее сохраненные любые пользовательские
                                  // 128 ULONG числа 

SetParameter

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

C помощью вызова SetParameter с name определенными ниже можно сохранить до 128 своих значений ULONG и потом их получить через вызов GetParameter.

   #define L_USER_BASE        10100  

SetLDeviceEvent

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Для EventId есть следующие значения:

Расширенное API DLL библиотеки (IDaqLDevice2)

Класс IDaqLDevice2

Наследует от :  LUnknown

Описание :

Определение :

Подробнее :

Для раздельной независимой работы АЦП и ЦАП плат и модулей в библиотеке введен дополнительный интерфейс . Этот интерфейс предоставляет три функции: InitStartLDeviceEx, StartLDeviceEx, StopLDeviceEx. Данные функции полностью аналогичны функциям основного интерфейса, но для раздельной работы с ЦАП и АЦП введен параметр StreamId (L_STREAM_ADC/L_STREAM_DAC). Соответственно чтобы работать с ЦАП и АЦП модулей необходимо сначала получить основной интерфейс, а затем этот дополнительный интерфейс . Запускать и останавливать сбор/выдачу данных необходимо функциями этого дополнительного интерфейса и не следует смешивать их вызов с аналогичными функциями основного интерфейса. Установка параметров работы ЦАП и АЦП при работе с дополнительным интерфейсом аналогично настройке при работе с основным интерфейсом. Пример работы L7XX2.OSC.

InitStartLDeviceEx

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

Надо вызывать перед вызовом функции StartLDevice.

StartLDeviceEx

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

После выполнения функции можно переходить к откачиванию данных из буфера. При этом необходимо следить за синхронизацией поступления данных и их откачки.

StopLDeviceEx

Описание :

Определение :

Параметры :

Возвращает :

Подробнее :

После остановки данные в буфере соответствуют последним данным, полученным от платы. Их можно обрабатывать любым способом. Необходимо только учитывать, что остановка могла произойти в любом месте этого буфера и гарантировать целостность можно только той части буфера, на готовность которой указывала переменная синхронизации.

Типы плат/модулей

Описание :

Определение :

Подробнее :

Определения для property

Описание :

Определение :

Подробнее :

Коды ошибок

Описание :

Определение :

Подробнее :

Определения для типизации структуры DAQ_PAR

Описание :

Определение :

Подробнее :

Типы потоков данных

Описание :

Определение :

Подробнее :

Определения EventId для событий SetLDeviceEvent

Описание :

Определение :

Подробнее :

SLOT_PAR

Наследует от : 

Описание :

Определение :

Подробнее :

Примечание:

Структура SLOT_PAR используется совместно с вызовом GetSlotParam для получения параметров виртуальных слотов. Большинство полей этой структуры утратило свое значение. Интерес представляет BoardType при поиске нужной платы в виртуальных слотах. Еще смысл имеет поле DSPType для модулей у которых есть сигнальный процессор ADSP. Для PCI плат L-761/L-780/L-783 имеют смысл поля описывающие адресные регионы и поля регистров. Они нужны если требуется работа с функциями для доступа к портам (inbyte итп). Для L-791 в таком случае интересны поля Mem и MemL.

DAQ_PAR

Наследует от : 

Описание :

Определение :

Подробнее :

ASYNC_PAR

Наследует от :  DAQ_PAR

Описание :

Определение :

Подробнее :

Примечание:

Структура ASYNC_PAR используется совместно с вызовом IoAsync. Часть полей наследуются из структуры DAQ_PAR. Как заполнять или что читать из этой структуры см. описание функции IoAsync.

DAC_PAR_0

Наследует от :  DAQ_PAR

Описание :

Определение :

Подробнее :

Примечание:

Структура DAC_PAR_0 используется совместно с вызовом FillDAQparameters для настройки параметров вывода данных с ЦАП платы.

Особенности трактовки полей этой структуры для различных плат:

DAC_PAR_1

Наследует от :  DAQ_PAR

Описание :

Определение :

Подробнее :

Примечание:

Структура DAC_PAR_1 используется совместно с вызовом FillDAQparameters для настройки параметров вывода данных с ЦАП платы.

Особенности трактовки полей этой структуры для различных плат:

DAC_PAR

Наследует от : 

Описание :

Определение :

Подробнее :

ADC_PAR_0

Наследует от :  DAQ_PAR

Описание :

Определение :

Подробнее :

Примечание:

Структура ADC_PAR используется совместно с вызовом FillDAQparameters для настройки параметров ввода данных с платы АЦП. Особенности трактовки полей этой структуры для различных плат:

ADC_PAR_1

Наследует от :  DAQ_PAR

Описание :

Определение :

Подробнее :

Примечание:

Структура ADC_PAR _1 используется совместно с вызовом FillDAQparameters для настройки параметров ввода данных с платы АЦП. Особенности трактовки полей этой структуры для различных плат:

ADC_PAR

Наследует от : 

Описание :

Определение :

Подробнее :

PLATA_DESCR

Наследует от : 

Описание :

Определение :

Подробнее :

PLATA_DESCR_L791

Наследует от : 

Описание :

Определение :

Подробнее :

Данная структура используется в интерфейсных функциях, которые работают со служебной областью пользовательского ППЗУ: ReadPlataDescr и WritePlataDescr.

Название поля

Назначение и допустимые значения поля

crc

Контрольная сумма, расчитанная по всем полям структуры.

SerNum

Серийный номер модуля (строка символов максимальной с длиной 16)

BrdName

Название модуля (строка символов максимальной с длиной 16)

Rev

Ревизия модуля (ascii символ)

DspType

Тип используемого в модуле процессора (строка символов с максимальной длиной 16)

Quartz

Частота задающего кварца (32-х разрядное целое)

IsDacPresented

Флаг наличия ЦАП в модуле (логическая величина)

KoefAdc[0]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x1’. (число с плавающей точкой одинарной точности)

KoefAdc[1]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x2’.(число с плавающей точкой двойной точности)

KoefAdc[2]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x4’.(число с плавающей точкой двойной точности)

KoefAdc[3]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x8’.(число с плавающей точкой двойной точности)

KoefAdc[4]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x16’.(число с плавающей точкой двойной точности)

KoefAdc[5]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x32’.(число с плавающей точкой двойной точности)

KoefAdc[6]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x64’.(число с плавающей точкой двойной точности)

KoefAdc[7]

Коэффициент коррекции смещения нуля АЦП. Усилении ‘x128’.(число с плавающей точкой двойной точности)

KoefAdc[8]

Коэффициент коррекции масштаба АЦП. Усилении ‘x1’. (число с плавающей точкой двойной точности)

KoefAdc[9]

Коэффициент коррекции масштаба АЦП. Усилении ‘x2’. (число с плавающей точкой двойной точности)

KoefAdc[10]

Коэффициент коррекции масштаба АЦП. Усилении ‘x4’. (число с плавающей точкой двойной точности)

KoefAdc[11]

Коэффициент коррекции масштаба АЦП. Усилении ‘x5’. (число с плавающей точкой двойной точности)

KoefAdc[12]

Коэффициент коррекции масштаба АЦП. Усилении ‘x16’.(число с плавающей точкой двойной точности)

KoefAdc[13]

Коэффициент коррекции масштаба АЦП. Усилении ‘x32’. (число с плавающей точкой двойной точности)

KoefAdc[14]

Коэффициент коррекции масштаба АЦП. Усилении ‘x64’.(число с плавающей точкой двойной точности)

KoefAdc[15]

Коэффициент коррекции масштаба АЦП. Усилении ‘x128’. (число с плавающей точкой двойной точности)

KoefDac[0]

Коэффициент коррекции смещения нуля ЦАП. Канал ‘0’. (число с плавающей точкой двойной точности)

KoefDac[1]

Коэффициент коррекции смещения нуля ЦАП. Канал ‘1’. (число с плавающей точкой двойной точности)

KoefDac[2]

Коэффициент коррекции масштаба ЦАП. Канал ‘0’. (число с плавающей точкой двойной точности)

KoefDac[3]

Коэффициент коррекции масштаба ЦАП. Канал ‘1’.(число с плавающей точкой двойной точности)

Корректировка данных АЦП/ЦАП.

Схемотехника и использованные компоненты обеспечивают линейность передаточной характеристики АЦП/ЦАП модуля. Однако, в виду отсутствия автоматической коррекции как внутри модуля так и в штатной dll-библиотеки, показания АЦП/ЦАП могут иметь некоторое смешение нуля и неточность в передаче масштаба. Работа по коррекции показаний возлагается на пользовательское приложение.

Для корректировки показаний АЦП/ЦАП можно воспользоваться собственными калибровочными коэффициентами и формулами или штатными коэффициентами.

Штатные коэффициенты вычисляются при наладке модуля на производстве и хранятся в системном ППЗУ модуля. Для того чтобы ими воспользоваться, необходимо:

Корректировка данных АЦП:

Y=(X+B)*A,где:

X - некорректированные данные АЦП [в отсчетах АЦП]

Y - скорректированные данные АЦП [в отсчетах АЦП]

A - коэффициент масштаба [безразмерный]

B - коэффициент смещение нуля [в отсчетах АЦП]

Примечание: Коэффициенты A и B одни и те же для всех каналов АЦП, но различные для разных диапазонов измерения.

Корректировка данных ЦАП:

Y= (X+B)*A, где:

X - некорректированные данные ЦАП [в отсчетах ЦАП]

Y - корректированные данные ЦАП [в отсчетах ЦАП]

A - коэффициент масштаба [безразмерный]

B - коэффициент смещение нуля [в отсчетах ЦАП]

Пример 1:

С АЦП, настроенного на диапазон ±2.5В (усиление х4), получены следующие данные:

X1=1000, X2=-1000,X3=0

тогда, если положить что pd - структура типа PLATA_DESCR_L791 предварительно участвовавшая в вызове функции ReadPlataDescr(), то коэффициенты коррекции и скорректированные данные можно получить так:

A=pd.KoefAdc[10], B=pd. KoefADC[2]

Y1=(B+1000)*A, Y2=(B-1000)*A, Y3=B*A

Пример 2:

На втором канале ЦАП необходимо выставить напряжение, соответствующее следующим кодам:

X1=1000, X2=-1000, X3=0

тогда, если положить что pd – структура типа PLATA_DESCR_L791 предварительно участвовавшая в вызове функции ReadPlataDescr(), то коэффициенты коррекции и данные, которые необходимо записать во второй канал ЦАП, можно получить так:

A=pd. KoefDac[3], B=pd. KoefDac[1]

Y1=(B+1000)*A, Y2=(B-1000)*A, Y3=B*A





PLATA_DESCR_E440

Наследует от : 

Описание :

Определение :

Подробнее :

PLATA_DESCR_E140

Наследует от : 

Описание :

Определение :

Подробнее :

PLATA_DESCR_E154

Наследует от : 

Описание :

Определение :

Подробнее :

PLATA_DESCR_E2010

Наследует от : 

Описание :

Определение :

Подробнее :

PLATA_DESCR_U/U2

Наследует от : 

Описание :

Определение :

Подробнее :

Как можно ...

Введение

В данном разделе собраны рецепты как осуществить некоторые операции при работе с платами/модулями.

... прочитать одиночный отсчет с АЦП

Для этого нужно выполнить шаги приведенные ниже.

Прочитать таким образом кадр отсчетов с АЦП невозможно. Только один отсчет с одного канала.

Более подробно о возможностях функции IoAsync можно прочитать в ее описании

... вывести данные на TTL выходы

Для этого нужно выполнить шаги приведенные ниже.

Более подробно о возможностях функции IoAsync можно прочитать в ее описании.

... прочитать данные с TTL входов

Для этого нужно выполнить шаги приведенные ниже.

Более подробно о возможностях функции IoAsync можно прочитать в ее описании.

... вывести одиночный отсчет на ЦАП

Для этого нужно выполнить шаги приведенные ниже.


Более подробно о возможностях функции IoAsync можно прочитать в ее описании. В частности для платы L791 структуру надо заполнить несколько иначе. Как — см. описание IoAsync.

... получить поток данных с АЦП

Поток данных с АЦП программируется более сложно чем одиночные асинхронные операции. Начало и завершение работы аналогично тому что нужно для чтения одиночного отсчета. Подробно и с комментариями как программировать потоковый ввод данных с АЦП можно посмотреть в примере L7XX.TST, который находится после установки библиотеки Lcomp в \L-Card\Library\L7XX.TST.

... вывести поток данных на ЦАП

Некоторые платы и модули поддерживают потоковый вывод данных на ЦАП. Программируется это более сложно чем одиночные асинхронные операции. Начало и завершение работы аналогично тому что нужно для чтения одиночного отсчета. Подробно и с комментариями как программировать потоковый вывод данных на ЦАП можно посмотреть в примере L7XX.OSC, который находится после установки библиотеки Lcomp в \L-Card\Library\L7XX.OSC. Для платы L-791 есть отдельный пример L791.GNR - пример простого генератора.

Справочные данные по платам и модулям

Введение

В данном разделе собраны замечания и пояснения для разным плат и модулей.

Адресное пр-во и команды биос L-761/L-780/L-783

Существует две ревизии PCI плат - А и В. Они различаются адресацией портов. Ревизия А очень редкая. Наиболее распространенная ревизия – В. Base - один из трех возможных вариантов базового адреса:порты ввода/вывода,память ниже 1Мб,память выше 1Мб.Значения Base можно увидеть под Windows в Панели Управления/Система в ресурсах соответствующих PCI плат. Под Windows всегда используется доступ к плате через память выше 1Мб.

Адресное пространство L-761/L-780/L-783 (Rev A).

Адрес

Чтение

Запись

Base+0

Порт для чтения данных с платы по IDMA как при одиночных операция, так и при блочных.

Порт для записи данных в плату по IDMA как при одиночных операция, так и при блочных.

Base+4096

-

Порт для установки адреса IDMA.

Base+8192

-

Порт генерации IRQ2 DSP.

Base+12288

-

Порт сброса прерываний.

Адресное пространство L-761/L-780/L-783 (Rev B).

Адрес

Чтение

Запись

Base+0

Порт для чтения данных с платы по IDMA при одиночных операция.

Порт для записи данных в плату по IDMA при одиночных операция.

Base+2

-

Порт для установки адреса IDMA.

Base+4

-

Порт генерации IRQ2 DSP.

Base+6

-

Порт сброса прерываний.

Base+4096

Порт для чтения данных с платы по IDMA при блочных операциях.

Порт для записи данных в плату по IDMA при блочных операциях.

Список команд поддерживаемых биос L-761/L-780/L-783

Номер

Обозначение

Описание

Использует

0

cmTEST_PLX

Проверка загрузки платы и ее работоспособности;

L_TEST_LOAD_PLX

1

cmLOAD_CONTROL_TABLE_PLX

Загрузка управляющей таблицы в память DSP;

L_CONTROL_TABLE_PLX, L_CONTROL_TABLE_LENGTH_PLX

2

cmADC_ENABLE_PLX

Разрешение/Запрещение работы АЦП;

L_ADC_ENABLE_PLX

3

cmADC_FIFO_CONFIG_PLX

Конфигурирование параметров кольцевого буфера АЦП;

L_ADC_FIFO_BASE_ADDRESS_PLX, L_ADC_FIFO_BASE_ADDRESS_INDEX_PLX, L_ADC_FIFO_LENGTH_PLX, L_ADC_NEW_FIFO_LENGTH_PLX

4

cmSET_ADC_KADR_PLX

Установка временных параметров работы АЦП;

L_ADC_RATE_PLX, L_INTER_CADR_DELAY_PLX

5

cmENABLE_DAC_STREAM_PLX

Разрешение/запрещение выдачи данных из буфера ЦАП.

L_DAC_ENABLE_STREAM_PLX

6

cmDAC_FIFO_CONFIG_PLX

Конфигурирование параметров буфера ЦАП;

L_DAC_FIFO_BASE_ADDRESS_PLX, L_DAC_FIFO_LENGTH_PLX, L_DAC_NEW_FIFO_LENGTH_PLX

7

cmSET_DAC_RATE_PLX

Установка частоты вывода данных на ЦАП;

L_DAC_RATE_PLX

8

cmADC_SAMPLE_PLX

Однократный ввод c АЦП;

L_ADC_SAMPLE_PLX, L_ADC_CHANNEL_PLX

9

cmTTL_IN_PLX

Чтение данных с цифровых линий;

L_TTL_IN_PLX

10

cmTTL_OUT_PLX

Вывод данных на цифровые линии;

L_TTL_OUT_PLX

11

cmSYNCHRO_CONFIG_PLX

Управление синхронизацией;

L_SYNCHRO_TYPE_PLX, L_SYNCHRO_AD_CHANNEL_PLX, L_SYNCHRO_AD_POROG_PLX, L_SYNCHRO_AD_MODE_PLX, L_SYNCHRO_AD_SENSITIVITY_PLX

12

cmENABLE_IRQ_PLX

Разрешение/запрещение работы с прерываниями;

L_ENABLE_IRQ_PLX, L_ENABLE_IRQ_VALUE_PLX, L_IRQ_STEP_PLX

13

cmIRQ_TEST_PLX

Тестовая команда генерирует прерывания 10 раз в сек;

L_ENABLE_IRQ_PLX

14

cmSET_DSP_TYPE_PLX

Передает в драйвер тип установленного на плате DSP и соответствующим образом модифицирует код драйвера;

L_DSP_TYPE_PLX

Список внутренних переменных биос L-761/L-780/L-783 (8 - признак того, что это DM)

Адрес

Обозначение

Описание

0x8A00

L_CONTROL_TABLE_PLX

Управляющая таблица содержащая логические номера каналов (до 96). В соответствии с ней DSP производит последовательный циклический сбор данных с АЦП. Размер этой таблицы задается переменной L_CONTROL_TABLE_LENGTH_PLX. По умолчанию { 0, 1, 2, 3, 4, 5, 6, 7 }

0x8D00

L_SCALE_PLX

Массив с 4 калибровочными коэффициентами используемый при корректировке масштаба данных с АЦП. По умолчанию {7FFF, 0x7FFF, 0x7FFF, 0x7FFF }

0x8D04

L_ZERO_PLX

Массив с 4 калибровочными коэффициентами используемый при корректировке смещения нуля данных с АЦП. По умолчанию { 0x0, 0x0, 0x0, 0x0 }

0x8D08

L_CONTROL_TABLE_LENGHT_PLX

Размер управляющей таблицы. По умолчанию 8.

0x8D40

L_READY_PLX

Флажок готовности платы к дальнейшей работе. После загрузки управляющей программы в DSP необходимо дождаться установления данного флажка в 1.

0x8D41

L_TMODE1_PLX

Тестовая переменная. После загрузки управляющей программы по этому адресу должно читаться число 0x5555.

0x8D42

L_TMODE2_PLX

Тестовая переменная. После загрузки управляющей программы по этому адресу должно читаться число 0xAAAA.

0x8D48

L_DSP_TYPE_PLX

Переменная, передающая драйверу тип установленного на модуле DSP. 0 - ADSP2184; 1 - ADSP2185; 2 - ADSP2186; По умолчанию 0.

0x8D49

L_COMMAND_PLX

Переменная, при помощи которой драйверу передается номер команды.

0x8D4C

L_TTL_OUT_PLX

Переменная, в которой хранятся значения 16-ти выходных цифровых линий.

0x8D4D

L_TTL_IN_PLX

Переменная, в которой хранятся значения 16-ти входных цифровых линий.

0x8D50

L_FIFO_PTR_PLX

Переменная, в которой хранится текущий адрес заполнения кольцевого буфера. Данная переменная по мере ввода данных меняет свое значение от L_ADC_FIFO_BASE_ADDRESS_PLX до L_ADC_FIFO_ADDRESS_PLX + L_ADC_FIFO_LENGTH_PLX.

0x8D52

L_TEST_LOAD_PLX

Тестовая переменная.

0x8D53

L_ADC_RATE_PLX

Переменная, задающая частоту работы АЦП.

0x8D54

L_INTER_KADR_DELAY_PLX

Переменная, задающая межкадровую задержку при вводе данных с АЦП.

0x8D55

L_DAC_RATE_PLX

Переменная, задающая частоту вывода данных с ЦАП-ов.

0x8D56

L_DAC_VALUE_PLX

Величина, которую требуется установить на выходе ЦАП-а.

0x8D57

L_ENABLE_IRQ_PLX

Запрещение(0)/разрешение(1) генерации прерывания в PC при соответствующем заполнении кольцевого буфера АЦП. По умолчанию - 0.

0x8D58

L_IRQ_STEP_PLX

Переменная, задающая число отсчетов при заполнении кольцевого буфера АЦП, каждый раз при превышении которого генерируется прерывание в PC

0x8D5A

L_IRQ_FIFO_ADDRESS_PLX

Если произошло прерывание в PC, то начиная с этого адреса можно считать L_IRQ_STEP_PLX отсчетов из кольцевого буфера АЦП.

0x8D5B

L_ENABLE_IRQ_VALUE_PLX

Переменная, значение которой при выполнении соответствующей команды передается в переменную L_ENABLE_IRQ_PLX.

0x8D5C

L_ADC_SAMPLE_PLX

Данная переменная используется при однократном вводе с АЦП, храня считанное значение.

0x8D5D

L_ADC_CHANNEL_PLX

Данная переменная используется при однократном вводе с АЦП, задавая логический номер канала.

0x8D5E

L_DAC_SCLK_DIV_PLX

-

0x8D60

L_CORRECTION_ENABLE_PLX

Разрешение(1)/запрещение(0) корректировки данных аналоговых каналов при помощи калибровочных коэффициентов. По умолчанию - 0.

0x8D62

L_ADC_ENABLE_PLX

Запрещение(0)/разрешение(1) работы АЦП.

0x8D63

L_ADC_FIFO_BASE_ADDRESS_PLX

Текущий базовый адрес кольцевого буфера АЦП. По умолчанию - 0x2000.

0x8D64

L_ADC_FIFO_BASE_ADDRESS_INDEX_PLX

Переменная, задающая базовый адрес кольцевого буфера АЦП. Может принимать три значения:0 - (0x0000 для ADSP-2185),1 - (0x2000 для ADSP-2185 -2186), 2 - (0x3000 для ADSP-2185 -2186; 0x2000 для ADSP-2184).

0x8D65

L_ADC_FIFO_LENGTH_PLX

Текущая длина кольцевого буфера АЦП. По умолчанию 0x800.

0x8D66

L_ADC_NEW_FIFO_LENGTH_PLX

Переменная, задающая длину кольцевого буфера АЦП.

0x8D67

L_DAC_ENABLE_STREAM_PLX

Запрещение(0)/разрешение(1) вывода данных из буфера ЦАП на ЦАП.

0x8D68

L_DAC_FIFO_BASE_ADDRESS_PLX

Текущий базовый адрес буфера ЦАП. Данный буфер расположен в памяти программ DSP. По умолчанию 0xC00.

0x8D69

L_DAC_FIFO_LENGTH_PLX

Текущая длина буфера ЦАП. По умолчанию 0x400.

0x8D6A

L_DAC_NEW_FIFO_LENGTH_PLX

Переменная, задающая длину буфера ЦАП.

0x8D70

L_SYNCHRO_TYPE_PLX

Переменная, задающая тип синхронизации.

0x8D73

L_SYNCHRO_AD_CHANNEL_PLX

При аналоговой синхронизации задает логический номер канала, по которому происходит синхронизация.

0x8D74

L_SYNCHRO_AD_POROG_PLX

Порог аналоговой синхронизации.

0x8D75

L_SYNCHRO_AD_MODE_PLX

Переменная, задающая режим синхронизации по переходу "снизу - вверх"(0) или "сверху - вниз"(1)

0x8D76

L_SYNCHRO_AD_SENSITIVITY_PLX

Переменная, задающая тип синхронизации по уровню(0) или по переходу(1).



Замечания для платы L-791

Пояснения по работе с платой L791.

Это плата без сигнального процессора на борту - просто цифровой автомат. Передачу данных осуществляет по BusMaster каналу PCI.

Временные параметры сбора задаются таймерами.

Библиотека для работы с платой имеет интерфейс аналогичный интерфейсу других плат. Но есть некоторые особенности:

Замечания для модуля E14-140/E154

Пояснения по работе с модулем E14-140/E154.

Библиотека для работы с платой имеет интерфейс аналогичный интерфейсу других плат. Но есть некоторые особенности и ограничения:

Замечания для модуля E20-10

Пояснения по работе с модулем E20-10.

Библиотека для работы с платой имеет интерфейс аналогичный интерфейсу других плат. Но есть некоторые особенности и ограничения:

Замечания для плат L-761/L-780/L-783

Пояснения по работе с платой L780M (rev C ).

Эта плата поддерживает потоковый вывод данных на ЦАП. Но есть особенности в формате данных для ЦАП.

Если вывод программируется как для обычной 780 платы, то формат данных в буфере USHORT, а если для потокового вывода 780M, то данные ULONG.

Пример кода:

USHORT data1;

for(int i=0;i<1024;i+=2) data1[i]=((USHORT)(1024.0*sin((2.0*(3.1415*i)/1024.0)))&0xFFF)|0x0000;

for(int i=1;i<1024;i+=2) data1[i]=((USHORT)(1024.0*sin((2.0*(3.1415*i)/1024.0)))&0xFFF)|0x1000;

// задается два синуса по двум каналам и из памяти DSP



или

ULONG data1;

for(int i=0;i<2048;i++) data1[i]=((USHORT)(512*sin((2.0*(3.1415*i)/1024.0)))&0xFFF)|0x0000;

// по 0 каналу синус и из буфера PC

Такая корявость получилась из-за сохранения совместимости для старых драйверов.

Замечания для модуля E14-440/E14-140M

Пояснения по работе с модулем E14-440/E14-140M.

Библиотека для работы с платой имеет интерфейс аналогичный интерфейсу других плат. Но есть некоторые особенности и ограничения:

Оглавление