Технология DiScoX

advertisement
Технология DiScoX
Общие положения
Технология DiScoX предназначена для создания пользователями собственных
компонентов графической оболочки осциллографа DiSco. Созданные и подключенные
компоненты отображаются в дополнительных закладках приложения.
Пользовательский компонент создается на основе технологии ActiveX. Для того, чтобы
ActiveX компонент мог быть подключен к приложению, необходимо соблюдение
следующих условий:
1. Файл компонента должен иметь расширение *.ocx
2. Файл компонента должен располагаться в подкаталоге AddIns рабочего каталога
программы
3. Файл компонента должен содержать экспортируемую функцию
DllGetControlProgID(char* progId, char* caption)
progId – указатель на z-строку, содержащую ProgId (ClassName) компонента
caption - указатель на z-строку, содержащую отображаемое наименование
компонента
(Примечание – z-строка – это последовательность байт (символов),
заканчивающаяся байтом 00H)
Порядок создания компонента на примере продуктов Borland C++ Builder 6 и
Borland Delphi 7
1. Создать проект Active Form (File->New->Other->ActiveX->ActiveForm)
2. В появившемся диалоговом окне ввести имя создаваемого компонента,
например «ActiveFormX».
3. В файл проекта добавить экспортируемую функцию DllGetControlProgID
Delphi:
В файл проекта (*.dpr) добавляется функция
procedure DllGetControlProgID(szProgID: PAnsiChar;szCaption: PAnsiChar);
stdcall;
var
ProgID: string;
Caption: string;
begin
ProgID := ClassIDToProgID(CLASS_ActiveFormX);
Caption := 'Delphi DiScoX Test';
StrCopy(szProgID, PChar(ProgID));
StrCopy(szCaption, PChar(Caption));
end;
Для того, чтоб эта функция могла быть экспортирована ее имя включается в
секцию exports файла проекта
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer,
DllGetControlProgID;
С++Builder:
В файл проекта добавляется функция
extern "C" void _export DllGetControlProgID(char* progId, char* caption)
{
strcpy(progId, ClassIDToProgID(CLSID_ActiveFormX).c_str());
strcpy(caption, "BCB DiScoX Test");
}
4. Разместить на главной форме проекта необходимые компоненты.
5. Скомпилировать проект.
6. Поместить полученный *.ocx файл в каталог AddIns (или в любой подкаталог
данного каталога).
7. Запустить графическую оболочку DiSco
8. В программе-оболочке выбрать пункт меню «Сервис->Настройки->ActiveX». В
появившейся закладке отменить компонент, который необходимо отобразить на
дополнительной закладке и нажать OK.
В результате в программе-оболочке появится дополнительная закладка,
содержащая только что созданный ActiveX компонент.
Доступ к функциям осциллографа с помощью DiSco API
Доступ к функциям осциллографа осуществляется на основе COM-интерфейсов. Для того
чтобы получить к ним доступ требуется импортировать из системы соответствующую
библиотеку типов. При работе в Borland Delphi и CBuilder это осуществляется выбором
пункта меню “Project->Import Type Library…”. В появившемся диалоговом окне следует
найти библиотеку “OscAPI 1.0 Type Library (Version 1.0)” и импортировать библиотеку
нажатием кнопки Create Unit.
При этом в проект будет включен файл, содержащий описание классов, обеспечивающих
доступ к функциям осциллографа.
Импортированная COM-библиотека содержит следующие интерфейсы:
Интерфейс IDevice
HRESULT Init([in] int initParam) – инициализация библиотеки. Передаваемый
функции параметр всегда должен быть равен 0.
HRESULT GetFirmwareVersion([out,retval] BSTR* ver) – возвращает версию ПО
устройства в формате 'X.X (DD/MM/YY)'
HRESULT ResetDevice(void) – сброс устройства;
Интерфейс IOscilloscope
HRESULT GetChannelData([in,out] SAFEARRAY (double)buffer, [in,out] int*
bufferSize, Channel channel);
HRESULT SetChannelOnOff([in] Channel channel, [in] OnOff onOff); включить.выключить канал
HRESULT SetPipeMode([in] PipeMode mode); - установить режим чтения
HRESULT SetPipeBufferSize([in] int size) – размер буфера чтения в байтах (при
работе в потоковом режиме)
HRESULT UseTrigger([in] VARIANT_BOOL useTrigger) – включить
синхронизацию
HRESULT SetTriggerEdge([in] TriggerEdge edge) – задать тип синхронизации (по
фронту/спаду)
HRESULT SetTriggerSource([in] TriggerSource src) – задать источник
синхронизации
HRESULT SetTriggerType([in] TriggerType type) – задать тип синхронизации
HRESULT SetTriggerLevel([in] Channel channel, [in] double level); - задать уровень
синхронизации для канала (по умолчанию 0 В)
HRESULT SetDiffTriggerLevel([in] double level); - задать величину перепада при
дифференциальной синхронизации (по умолчанию 0.5 В)
HRESULT SetTimeBase([in] double timeBase); - установить период дискретизации в
секундах
HRESULT SetSamplingFrequency([in] double samplingFrequency); - установить
частоту дискретизации в герцах
HRESULT SetChannelMaxGain([in] Channel channel, [in] double voltage); установить диапазон измеряемого напряжения в вольтах
HRESULT Run(void); - запустить измерение
HRESULT GetChannelSample(int index, Channel channel, [out, retval] double* data); получить отсчет с номером index.
Кроме того, в библиотеке определены следующие перечисляемые типы
typedef enum PipeMode
{Buff = 0, Pipe} PipeMode;
typedef enum TriggerEdge {Falling = 0, Rising} TriggerEdge;
typedef enum TriggerType {Absolute = 0, Differential} TriggerType;
typedef enum TimerMultiplier {HzX10, HzX1} TimerMultiplier;
typedef enum Channel
{A, B} Channel;
typedef enum TriggerSource {ChannelA, ChannelB, External} TriggerSource;
typedef enum OnOff
{Off, On} OnOff;
Download