Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Помогите чайнику :-)

Вы не вошли.

 Поиск | Регистрация | Вход 

Евгений
13.07.2006 08:07:38
#1

Гость

Помогите чайнику :-)

Привет всем. У меня такая проблемма:
Дали мне в руки плату l-761, и сказали сделай нам из этого генератор и осцилограф, помощи от нас не жди, мол сами их в первый раз видем.
Програмирую я на delphi 7.0 под WIN XP, скачал я кучу исходников но не один рабочий так и не нашел. Читал Lcadr SDC Help, довольно понятно изложенно описание функций, но нет там алгоритма когда че включать, инициализировать, куда и что запсывать. Если у кого-нить есть рабочий исходник на delphi 7.0 под WIN XP генератора и(или) осцилографа со всеми нужными библиотеками к нему и модулями, скиньте ссылку где его скачать можно, или на мыло намыльте.
PS: Нашел что то вроде рабочее,
C:/Program Files/L-Card/LIBRARY/l7xx.dpr
но в нем только опрос биоса, и тестирование платы.

13.07.2006 08:55:03
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите чайнику :-)

еще сишные примеры смотрите. Там порядок вызова виден...

Евгений
13.07.2006 09:05:07
#3

Гость

Re: Помогите чайнику :-)

В том то и проблемма что я СИ незнаю вообще...:-(

13.07.2006 14:53:53
#4

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите чайнику :-)

а какая разница...просот вызовы функций смотрите...

Евгений
14.07.2006 07:46:34
#5

Гость

Re: Помогите чайнику :-)

Ни чего не получается, поставил себе Borland C++ 5.02, даже откомпилировать не понимаю как, может что нить на дельфи есть?

14.07.2006 08:59:33
#6

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите чайнику :-)

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

Евгений
19.07.2006 09:56:07
#7

Гость

Re: Помогите чайнику :-)

Вот что я нашел.....


   pLDev.FillDAQparameters(ap.t1);
   //Заполняет внутреннюю структуру параметров сбора данных
   //значениями из структуры.
 
   pLDev.RequestBufferStream(1000,L_STREAM_ADC);
   //Функция служит для выделения памяти под большой кольцевой буфер

  pLDev.SetParametersStream(ap.t1, tm, data, sync,L_STREAM_ADC);
  //настраивает плату АЦП/ЦАП

  Timer1.Enabled:=True;
 
  pLDev.InitStartLDevice;
  //Функция инициализирует внутренние переменные драйвера перед началом сбора.
 
  pLDev.StartLDevice;
  //запускает сбор данных с платы в большой кольцевой буфер
 

  Не могу понять дальше откуда данные выкачивать?
  В какой переменной находится большой кольцевой буфер,
  или с помощью какой функции к нему обратится.
  И где задается номер входного канала ацп
   
   ap.t1.NCh := 4;
   ap.t1.Chn[0] := $0;
   ap.t1.Chn[1] := $1;
   ap.t1.Chn[2] := $2;
   ap.t1.Chn[3] := $3;
 
тут понятно что мы будем использовать 4 канала и присваиваем им номера,
а как указать что мне нужен сигнал например с первого входа?

19.07.2006 13:48:47
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите чайнику :-)

в буфере они будут лежать покадрово...12341234....данные лежат по указателю data а переменная заполнения sync...

Евгений
21.07.2006 09:27:16
#9

Гость

Re: Помогите чайнику :-)

Вот сделал кое что, но не работает, на график выводит всегда одни и те же значения, АЦП на входы не реагирует... вот листинг...
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, create,ifc_ldev,ioctl, ExtCtrls,  Buttons,
  TeeProcs, TeEngine, Chart, Series;

const
   FIFO = 1024;
   IrqStep = 1024;
   pages = 32;

type
  WA = array of SHORT;


type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TLineSeries;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  pLDev: IDaqLDevice;
  pIUnknown:LUnknown;
  hr,j:Integer;
  sl:SLOT_PAR;
  dev: THandle;
  pd: PLATA_DESCR;
  ap: ADC_PAR;
  tm: ULONG;
  data:WA;
  OUTdata:word;
  sync:PULONG;


implementation


{$R *.dfm}
procedure Start_ADC;
begin
   ap.t1.s_Type := L_ADC_PARAM;
   ap.t1.AutoInit := 1;
   ap.t1.dRate := 200.0;
   ap.t1.dKadr := 0.0;
   ap.t1.dScale := 0;
   ap.t1.SynchroType := 3;
   ap.t1.SynchroSensitivity := 0;
   ap.t1.SynchroMode := 0;
   ap.t1.AdChannel := 0;
   ap.t1.AdPorog := 0;
   ap.t1.NCh := 1;
   ap.t1.Chn[0] := $0;
   ap.t1.FIFO := FIFO;
   ap.t1.IrqStep := IrqStep;
   ap.t1.Pages := pages;
   ap.t1.IrqEna := 1;
   ap.t1.AdcEna := 1;
   pLDev.FillDAQparameters(ap.t1);

   tm := 100000;  // ìû çàõîòåëè 100000 îòñ÷åòîâ
   pLDev.RequestBufferStream(tm,L_STREAM_ADC);
   pLDev.SetParametersStream(ap.t1, tm, data, sync,L_STREAM_ADC);
   Form1.Timer1.Enabled:=True;
   pLDev.InitStartLDevice;
   pLDev.StartLDevice;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

   Timer1.Enabled:=False;
   if(CallCreateInstance('lcomp.dll')=0) then
   MessageBox(0,'error, no loud lcomp.dll','',MB_OK);
   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;
   Start_ADC;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   data:=NIL;
   sync:=NIL;
   Timer1.Enabled:=False;
   pLDev.StopLDevice;
   pLDev.CloseLDevice;
   pLDev.Release;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
MasData : ^WA;
begin
    inc(j);
    Chart1.Series[0].Clear;
    if((data<>NIL) and (sync<>NIL)) then begin
        MasData:= @Data;
        for i:=0 to 32768-1 do Chart1.Series[0].AddXY(i,round(MasData^[i]));
    end;
end;

end.

21.07.2006 11:28:28
#10

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите чайнику :-)

sync то меняестя?

Евгений
24.07.2006 07:19:15
#11

Гость

Re: Помогите чайнику :-)

Нет, всегда sync^=0, при каждом новом запуске программы картинка раз от раза меняется, но в процессе выаолнения она статична. sync изменится один раз, если повторно запустить procedure Start_ADC.

24.07.2006 08:58:13
#12

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите чайнику :-)

должен меняться непрерывно...до остановки... смотрите как у Вас работает L-Graph

zardoz
24.07.2006 11:14:35
#13

Гость

Re: Помогите чайнику :-)

Евгений, вы забыли загрузить БИОС платы: pLDev.LoadBios(L761)

С уважением.

Евгений
25.07.2006 08:00:53
#14

Гость

Re: Помогите чайнику :-)

Огромное спасибо!
загрузил БИОС сразу все заработало!
Вот так бы и мучался, если не добрые люди на земле!

Евгений
28.07.2006 09:38:31
#15

Гость

Re: Помогите чайнику :-)

Народ, а как мне поменять частоту развертки, уже все переменные прробовал менять не получается...

Евгений
31.07.2006 08:32:43
#16

Гость

Re: Помогите чайнику :-)

Народ помогите!
Не могу понять что есть:
1. количество отсчетов
2. частота АЦП
3. межкадровая задержка
Менял FIFO, IRQStep,pages, но частоту больше 50 Герц не могу прочитать? Непонятно как частоту дискритизации изменить.......

31.07.2006 09:01:03
#17

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите чайнику :-)

dRate менять ну dKadr... и описание почитать то которое про ДОС и плату...

Евгений
01.08.2006 08:24:32
#18

Гость

Re: Помогите чайнику :-)

В том то и дело что менял я и dRate и dKadr, а толку ни какого, посмотрел я диаграмму запуска АЦП, все верно, все логично, но вот  ap.t1.dKadr и ap.t1.dRate вообще не реагируют...

Гость
01.08.2006 13:43:19
#19

Гость

Re: Помогите чайнику :-)

По видимому при изменении dRate и dKadr надо тормозить процесс сбора (что-то типа pLDev.StopLDevice; ap.t1.dRate := 1000.0; pLDev.FillDAQparameters(ap.t1); ... pLDev.InitStartLDevice;
pLDev.StartLDevice; )

Евгений
03.08.2006 07:45:51
#20

Гость

Re: Помогите чайнику :-)

Я сначала задаю значения  dRate и dKadr, а затем запускаю сбор, в процессе выполнения программы пока эти значения и не трогал. Но пока мои услия безрезультатны :-(((

Гость
03.08.2006 08:30:58
#21

Гость

Re: Помогите чайнику :-)

"но частоту больше 50 Герц не могу прочитать? Непонятно как частоту дискритизации изменить......."

Вполне возможно, что входной сигнал у Вас не подключен (или подключен неправильно). Поэтому Вы только сетевые наводки и видите.

Евгений
03.08.2006 09:19:10
#22

Гость

Re: Помогите чайнику :-)

не я к прецизионному генератору на x1 y1  в диф режиме зацепил, на генераторе частоту меняю, на экране меняется. Просто после ~40-50 Гц. измеряемого синуса, отсчетов так мало что на графике он отображается сначала как ломанный синус, при дольнейшем увеличени частоты генератора, отображается как треугольные импульсы. Вот такая вот беда.

Гость
03.08.2006 09:48:18
#23

Гость

Re: Помогите чайнику :-)

Может быть еще вот эту строку переставить
ap.t1.AutoInit := 1;

после pLDev.FillDAQparameters(ap.t1);
и перед pLDev.SetParametersStream(ap.t1, tm, data, sync,L_STREAM_ADC);
Если она за автоинициализацию отвечает, то в Вашем исходнике легкое противоречие (то ли использовать те значения, которые уже записаны, то ли новые)

Евгений
08.08.2006 06:41:00
#24

Гость

Re: Помогите чайнику :-)

Я сначала задаю параметры переменной L_ADC_PARAM, в том числе и поле AutoInit, если AutoInit=0 то сбор однократный, если =1 то циклический, после этого
передаем эти параметры в плату...

pLDev.FillDAQparameters(ap.t1);
pLDev.RequestBufferStream(tm,L_STREAM_ADC);
pLDev.SetParametersStream(ap.t1, tm, data, sync,L_STREAM_ADC);

потом стартуем

pLDev.InitStartLDevice;
pLDev.StartLDevice;

или я что то не так понял.
На счет биоса, скачал последнюю версию, результат прежний.....

Гость
08.08.2006 07:39:13
#25

Гость

Re: Помогите чайнику :-)

pLDev.FillDAQparameters(ap.t1);
pLDev.RequestBufferStream(tm,L_STREAM_ADC);
ap.t1.AutoInit := 1;            // !!!!!!!!!!!!!
pLDev.SetParametersStream(ap.t1, tm, data, sync,L_STREAM_ADC);

pLDev.InitStartLDevice;
pLDev.StartLDevice;