У меня выбра не было кроме как использовать ADC_SAMPLE для E 14-140. Тянет на 20 Гц вместо заявленных 100000.
Вот код, может что не так
library TermoConect;
uses
LUSBAPI,
SysUtils,
Windows,
Dialogs,
Registry,
Unit1;
{$R *.RES}
const
OptPath : String = 'Options';
const
// ìàêñèìàëüíî âîçìîæíîå êîë-âî îïðàøèâàåìûõ
// âèðòóàëüíûõ ñëîòîâ (ïðè ïîèñêå ìîäóëÿ)
MaxVirtualSoltsQuantity : WORD = 127;
// ÷àñòîòà ââîäà äàííûõ
AdcRate : double = 100.0;
var
//Óñèëåíèå
GAIN : integer;
//Äèôôåðåíöèàëüíûé ðåæèì
DiffMode : boolean;
// èíòåðôåéñ ìîäóëÿ E14-140
pModule : ILE140;
// âåðñèÿ áèáëèîòåêè Rtusbapi.dll
DllVersion : DWORD;
// íàçâàíèå ìîäóëÿ
ModuleName: String;
// ñòðóêòóðà ñ ïîëíîé èíôîðìàöèåé î ìîäóëå
ModuleDescription : MODULE_DESCRIPTION_E140;
// ñòðóêòóðà ïàðàìåòðîâ ðàáîòû ÀÖÏ
ap : ADC_PARS_E140;
function InitConect : boolean; stdcall;
var
i : integer;
RegFile : TRegIniFile;
begin
//Ïîèñê èíôîðìàöèè â ðååñòðå
RegFile := TRegIniFile.Create('Termo');
GAIN := RegFile.ReadInteger(OptPath, 'GAIN', 1);
DiffMode := RegFile.ReadBool(OptPath, 'DiffMode', False);
RegFile.Free;
Result := True;
// ïðîâåðèì âåðñèþ èñïîëüçóåìîé DLL áèáëèîòåêè
DllVersion := GetDllVersion;
if DllVersion <> CURRENT_VERSION_LUSBAPI then
begin
ShowMessage('Íåâåðíàÿ âåðñèÿ DLL áèáëèîòåêè Lusbapi.dll! ' + #10#13 +
' Òåêóùàÿ: ' + IntToStr(DllVersion shr 16) + '.' + IntToStr(DllVersion and $FFFF) + '.' +
' Òðåáóåòñÿ: ' + IntToStr(CURRENT_VERSION_LUSBAPI shr 16) + '.' + IntToStr(CURRENT_VERSION_LUSBAPI and $FFFF) + '.');
Result := False;
Exit
end;
// ïîïðîáóåì ïîëó÷èòü óêàçàòåëü íà èíòåðôåéñ äëÿ ìîäóëÿ E14-140
pModule := CreateLInstance(pCHAR('e140'));
if pModule = nil then
begin
ShowMessage('Íåâîçìîæíî íàéòè èíòåðôåéñ ìîäóëÿ E14-140!');
Result := False;
Exit
end;
// ïîïðîáóåì îáíàðóæèòü ìîäóëü E14-140 â ïåðâûõ 127 âèðòóàëüíûõ ñëîòàõ
for i := 0 to (MaxVirtualSoltsQuantity-1) do if pModule.OpenLDevice(i) then break;
// ÷òî-íèáóäü îáíàðóæèëè?
if i = MaxVirtualSoltsQuantity then
begin
ShowMessage('Íå óäàëîñü îáíàðóæèòü ìîäóëü E14-140 â ïåðâûõ 127 âèðòóàëüíûõ ñëîòàõ!');
Result := False;
Exit
end;
// ïðî÷èòàåì íàçâàíèå ìîäóëÿ â òåêóùåì âèðòóàëüíîì ñëîòå
ModuleName := '0123456';
if not pModule.GetModuleName(pCHAR(ModuleName)) then
begin
ShowMessage('Íåâîçìîæíî ïðî÷èòàòü íàçâàíèå ìîäóëÿ!');
Result := False;
Exit
end;
// ïðîâåðèì, ÷òî ýòî ìîäóëü E14-140
if Boolean(AnsiCompareStr(ModuleName, 'E140')) then
begin
ShowMessage('Îáíàðóæåííûé ìîäóëü íå ÿâëÿåòñÿ E14-140!');
Result := False;
Exit
end;
// òåïåðü ïîëó÷èì íîìåð âåðñèè çàãðóæåííîãî äðàéâåðà DSP
if not pModule.GET_MODULE_DESCRIPTION(@ModuleDescription) then
begin
ShowMessage('Íåâîçìîæíî ïîëó÷èòü èíôîðìàöèþ î ìîäóëå!');
Result := False;
Exit
end;
// ïîëó÷èì òåêóùèå ïàðàìåòðû ðàáîòû ââîäà äàííûõ
if not pModule.GET_ADC_PARS(@ap) then
begin
ShowMessage('Íåâîçìîæíî ïîëó÷èòü òåêóùèå ïàðàìåòðû ââîäà äàííûõ!');
Result := False;
Exit
end;
ap.ClkSource := INT_ADC_CLOCK_E140;
ap.EnableClkOutput := ADC_CLOCK_TRANS_DISABLED_E140;
ap.InputMode := NO_SYNC_E140;
ap.AdcRate := AdcRate;
ap.InterKadrDelay := 0.0;
// ïåðåäàåì â ìîäóëü òðåáóåìûå ïàðàìåòðû ïî ââîäó äàííûõ
if not pModule.SET_ADC_PARS(@ap) then
begin
ShowMessage('Íåâîçìîæíî óñòàíîâèòü ïàðàìåòðû ââîäà äàííûõ!');
Result := False;
Exit
end
end;
function GetRes(Chan : Integer) : integer; stdcall;
var
LogChan : word;
Data : short;
begin
//Âû÷èñëÿåì ëîãè÷åñêèé íîìåð êàíàëà
LogChan := Chan;
if not DiffMode then Inc(LogChan, 32);
if GAIN = 4 then Inc(LogChan, 64);
if GAIN = 16 then Inc(LogChan, 128);
if GAIN = 64 then Inc(LogChan, 192);
//Îñóùåñòâëÿåì ïðåîáðàçîâàíèå
if not pModule.ADC_SAMPLE(@Data, LogChan) then Result := -1 else Result := Data
end;
procedure DoneConect; stdcall;
begin
pModule.CloseLDevice;
pModule.ReleaseLInstance
end;
procedure Setup; stdcall;
var
RegFile : TRegIniFile;
SetupDlg: TSetupDlg;
begin
RegFile := TRegIniFile.Create('Termo');
GAIN := RegFile.ReadInteger(OptPath, 'GAIN', 1);
DiffMode := RegFile.ReadBool(OptPath, 'DiffMode', False);
SetupDlg := TSetupDlg.Create(Nil);
SetupDlg.ComboBox1.Text := IntToStr(GAIN);
SetupDlg.CheckBox1.Checked := DiffMode;
SetupDlg.ShowModal;
GAIN := StrToInt(SetupDlg.ComboBox1.Text);
DiffMode := SetupDlg.CheckBox1.Checked;
SetupDlg.Destroy;
RegFile.WriteInteger(OptPath, 'GAIN', GAIN);
RegFile.WriteBool(OptPath, 'DiffMode', DiffMode);
RegFile.Free
end;
exports
InitConect,
GetRes,
DoneConect,
Setup;
begin
end.