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


Плата L-761и Дельфи 7

Вы не вошли.

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

Иван Малиенко
04.11.2009 14:52:49
#1

Гость

Плата L-761и Дельфи 7

Я начинающий программист, 5й курс
Выдано задание написать программу, которая будет считывать данные с установки. Такая программа в настоящий момент существует у нас в академии, но ей около 10 лет, в ней не могут разобраться. Подскажите литературу по программированию или хотя бы список функций/процедур, и конкретика их работы. К сожалению с "железом" я знаком слабо
Пишу на Дельфи 7.0
имеющаяся программа работает под ДОС и написана на С

05.11.2009 11:21:19
#2

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

Re: Плата L-761и Дельфи 7

скачайте lcomp.exe с нашего сайта и изучайте примеры....

Иван Малиенко
29.11.2009 15:21:20
#3

Гость

Re: Плата L-761и Дельфи 7

спасибо, с инициализацией разобрался

а вот данный код, сбора данных с АЦП, никак побороть не могу, как перевести его в Дельфи?

(ADC_SAMPLE_PLX(&bi[Choice], 0x0 | (InputRangeIndex<<6), &AdcSample0);// ток
...
ADC_SAMPLE_PLX(&bi[Choice], 0x3 | (InputRangeIndex<<6), &AdcSample3);// температура

I[p] =abs(2.5*(float)AdcSample0);//мгновенное значение тока
...//тут все аналогично, но мне нужен только пример
T1[p] =(float)AdcSample3*ADC*300000./7.+50.;//мгновенное значение температуры  1


отправка данных в ЦАП:
TTL_OUT_PLX( &bi[0],RIGHT|RELE);} // right

с уважением Иван.

30.11.2009 11:18:48
#4

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

Re: Плата L-761и Дельфи 7

Очень странно разобрались...в lcomp.exe таких функций нет....это что-то досовское смотрите...

Иван Малиенко
30.11.2009 17:24:20
#5

Гость

Re: Плата L-761и Дельфи 7

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

30.11.2009 19:46:30
#6

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

Re: Плата L-761и Дельфи 7

IoAsync смотрите в документации lcomp и примерах.

Иван Малиенко
30.11.2009 23:48:51
#7

Гость

Re: Плата L-761и Дельфи 7

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

procedure TForm1.Timer1Timer(Sender: TObject);
var pp:ASYNC_PAR;
begin

//сдвиг стержня и изменение тока
if I_min<I_tek  then ; // выполняем сдвиг влево
if I_max>I_tek  then  ;// выполняем сдвиг вправо


//Для ввода одного отсчета с TTL линий:
//s_Type -L_ASYNC_TTL_INP
//Data[0] - введенные данные;
    pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[0] := 1;
   pLDEv.IoAsync(pp);
I_tek:=abs(2.5*pp.Data[0]);
I_sr:=1;

   pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[1] := 1;
   pLDEv.IoAsync(pp);
L:=1;

   pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[2] := 1;
   pLDEv.IoAsync(pp);
U_tek:=1;


   pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[3] := 1;
   pLDEv.IoAsync(pp);
T1_tek:=1;
T1_sr:=1;

   pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[4] := 1;
   pLDEv.IoAsync(pp);
T2_tek:=1;
T2_sr:=1;

   pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[5] := 1;
   pLDEv.IoAsync(pp);
T3_tek:=1;
T3_sr:=1;

   pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[6] := 1;
   pLDEv.IoAsync(pp);
T4_tek:=1;
T4_sr:=1;

//запись в базу данных
clock:=clock*form1.Timer1.Interval+ form1.Timer1.Interval;
clock:=clock/form1.Timer1.Interval;
form1.ADOTable1.Active:=true;
form1.ADOTable1.First;
form1.ADOTable1.Insert;
form1.ADOTable1.FieldByName(/'clock/').Value:=clock{*0.1};
form1.ADOTable1.FieldByName(/'tok/').Value:=I_tek;
form1.ADOTable1.FieldByName(/'tok_sr/').Value:=I_sr;
form1.ADOTable1.FieldByName(/'temp1/').Value:=T1_tek;
form1.ADOTable1.FieldByName(/'temp1_sr/').Value:=T1_sr;
form1.ADOTable1.FieldByName(/'temp2/').Value:=T2_tek;
form1.ADOTable1.FieldByName(/'temp2_sr/').Value:=T2_sr;
form1.ADOTable1.FieldByName(/'temp3/').Value:=T3_tek;
form1.ADOTable1.FieldByName(/'temp3_sr/').Value:=T3_sr;
form1.ADOTable1.FieldByName(/'temp4/').Value:=T4_tek;
form1.ADOTable1.FieldByName(/'temp4_sr/').Value:=T4_sr;


end;

01.12.2009 08:30:14
#8

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

Re: Плата L-761и Дельфи 7

Невнимательно читаете описание....данные всегда в Data[0]. И потом я не вижу кода инициализации платы. Там как минимум LoadBios и ReadPlataDescr должны быть...

Иван Малиенко
01.12.2009 12:24:04
#9

Гость

Re: Плата L-761и Дельфи 7

используя пример из папки l7xx.dpr, под названием project2, есть след тест, в нем тоже выходит тормоз, т.е. вместо мгновенного отображения pp.Data[0] := 1; это происходит секунды 3-5...

никаких настроек LoadBios и ReadPlataDescr не изменял

{ тест цифровых линий и пример работы с IoSaync }
   pp.s_Type := L_ASYNC_TTL_CFG;
   pp.Mode := 1;
   pLDev.IoAsync(pp);

   pp.s_Type := L_ASYNC_TTL_OUT;
   pp.Data[0] := $A525;
   pLDev.IoAsync(pp);

   pp.s_Type := L_ASYNC_TTL_INP;
   pp.Data[0] := 1;
   pLDEv.IoAsync(pp);

   Memo1.Lines.Add(/'/');
   Memo1.Lines.Add(/'IoAsync call/');
   Memo1.Lines.Add(/'Data[0] - /'+IntToStr(pp.Data[0]));

Иван Малиенко
01.12.2009 20:52:18
#10

Гость

Re: Плата L-761и Дельфи 7

у меня система Windows XP SP2, на домашнем компьютере где тестю...

запускаться будет на Windows 2000

02.12.2009 11:19:44
#11

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

Re: Плата L-761и Дельфи 7

биосы в этой папке старые. из L-Card//Library//BIOS туда положите...

Иван Малиенко
02.12.2009 18:52:36
#12

Гость

Re: Плата L-761и Дельфи 7

огромное спасибо, не знаю побороло это всю проблему или нет, но очень помогло)))

Иван Малиенко
11.12.2009 21:26:47
#13

Гость

Re: Плата L-761и Дельфи 7

в настоящий момент дошел вот до какой проги

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Grids, DBGrids, TeEngine, Series, Chart,
  ExtCtrls, TeeProcs, DbChart, DB, ADODB, Create, ioctl, ifc_ldev,cmd791;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    Button1: TButton;
    Button2: TButton;
    Chart1: TChart;
    Series2: TLineSeries;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    Label1: TLabel;
    Label2: TLabel;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    ADOTable1: TADOTable;
    Button3: TButton;
    Button4: TButton;
    Timer1: TTimer;
    Button5: TButton;
    Button6: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button7: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Button8: TButton;
    Label5: TLabel;
    Label6: TLabel;
    Memo1: TMemo;
    Edit3: TEdit;
    Button9: TButton;
    Label7: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    function IoAsync(var sp:ASYNC_PAR):ULONG; virtual; stdcall; abstract;

  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
const
   FIFO = 1024;
   IrqStep = 1024;
   pages = 128;

type
  WA = array [0..512000] of ULONG;
  SA = array [0..1023] of ULONG;
  PSA = ^SA;
  PWA = ^WA;
 
const ChannelQuantity=8;
keytr=0;  // ключ от трансформатора
RELE=0; // маска на реле
// ADC=5/8000;

var
  Form1: TForm1;
  I_tek,I_sr,T1_tek,T1_sr,T2_tek,T2_sr,T3_tek,T3_sr,T4_tek,T4_sr,L,U_tek,U_sr:real;   //ток и темпер, текущ и средние
  I_min, I_max:real;
  Timer_stop:real;
  AdcSample0,AdcSample1,AdcSample2,AdcSample3,AdcSample4,AdcSample5,AdcSample6: integer;//    не знаю пока
  mk:double;//Идентификатор устаноки начала координат
  tkas: integer; // точка касания
  clock,clock1:real; // время
  sost_tr:boolean;// состояние трансформатора
  ADC:double;

var

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

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Close;
end;

procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
sx1,sy1:real;
begin
form1.Series2.Clear;
form1.ADOTable1.Active:=true;
form1.DataSource1.DataSet.First;

for i:=0 to 1000 do  begin
form1.DataSource1.DataSet.MoveBy(i);
sx1:=strtofloat(form1.DataSource1.DataSet.Fields.Fields[0].Asstring);
sy1:=strtofloat(form1.DataSource1.DataSet.Fields.Fields[1].Asstring);

form1.Series2.AddXY(sx1,sy1);

end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
// тут должен находиться подготовление и включение системы

// таймер
   Timer1.Enabled:=True;
//  pLDev.InitStartLDevice;
//  pLDev.StartLDevice;
  pLDev.LoadBios(/'l761/');
  pLDev.PlataTest;
  //pLDev.ReadPlataDescr(pd);
  //pLDev.GetSlotParam(sl);
clock:=0;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var pp:ASYNC_PAR;
i:word;
begin

//сдвиг стержня и изменение тока
if I_min<I_tek  then ; // выполняем сдвиг влево
if I_max>I_tek  then  ;// выполняем сдвиг вправо


//Для ввода одного отсчета с TTL линий:
//s_Type -L_ASYNC_TTL_INP
//Data[0] - введенные данные;
pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[0] := 0;
pLDEv.IoAsync(pp);

pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[1] := 1;
pLDEv.IoAsync(pp);
pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[2] := 2;
pLDEv.IoAsync(pp);
pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[3] := 3;
pLDEv.IoAsync(pp);
pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[4] := 4;
pLDEv.IoAsync(pp);
pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[5] := 5;
pLDEv.IoAsync(pp);
pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[6] := 6;
pLDEv.IoAsync(pp);

{pp.Chn[1] := $1;
pp.Chn[2] := $2;
pp.Chn[3] := $3;
pp.Chn[4] := $4;
pp.Chn[5] := $5;
pp.Chn[6] := $6;
{pp.Data[0] := 0;
pp.Data[1] := 0;
pp.Data[2] := 0;
pp.Data[3] := 0;
pp.Data[4] := 0;
pp.Data[5] := 0;
pp.Data[6] := 0;}

I_tek:={abs(2.5*}pp.Data[0]{)};


L:=1;

U_tek:={abs(-19*}pp.Data[2]{*ADC)};

T1_tek:=pp.Data[3]{*ADC*30000/7+50};


T2_tek:=pp.Data[4]*ADC*30000/7+50;


T3_tek:=pp.Data[5]*ADC*30000/7+50;


T4_tek:=pp.Data[6]*ADC*30000/7+50;


//запись в базу данных
clock:=clock*form1.Timer1.Interval+ form1.Timer1.Interval;
clock:=clock/form1.Timer1.Interval;
form1.ADOTable1.Active:=true;
form1.ADOTable1.First;
form1.ADOTable1.Insert;
clock1:=clock*0.35 ;
form1.ADOTable1.FieldByName(/'clock/').Value:=clock1;

form1.ADOTable1.FieldByName(/'tok/').Value:=I_tek;

form1.ADOTable1.FieldByName(/'temp1/').Value:=T1_tek;

form1.ADOTable1.FieldByName(/'temp2/').Value:=T2_tek;

form1.ADOTable1.FieldByName(/'temp3/').Value:=T3_tek;

form1.ADOTable1.FieldByName(/'temp4/').Value:=T4_tek;

form1.ADOTable1.FieldByName(/'u_tek/').Value:=U_tek;

if clock1 > Timer_stop then   form1.Timer1.Enabled:=false;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
form1.Timer1.Enabled:=false;
form1.ADOTable1.Active:=false;
end;


procedure TForm1.Button6Click(Sender: TObject);
begin
form1.ADOTable1.Active:=false;
form1.ADOTable1.Active:=true;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
I_min:=strtofloat(form1.Edit1.text );
I_max:=strtofloat(form1.Edit2.text );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
I_tek:=0;
I_sr:=0;
T1_tek:=0;
T1_sr:=0;
T2_tek:=0;
T2_sr:=0;
T3_tek:=0;
T3_sr:=0;
T4_tek:=0;
T4_sr:=0;
L:=0;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin

if (sost_tr=false ) then begin sost_tr:=true; Label6.Caption:=/'Включен/';
//сигнал включения
end;

if (sost_tr=true )then begin sost_tr:=false; Label6.Caption:=/'Отключен/';
//сигнал отключения
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ADC:=5/8000;
sost_tr:=false; // трансформатор отключен

if(CallCreateInstance(/'lcomp.dll/')=1) then
   begin
  showmessage(/'успешно загружено/') ;
      {сообщение об успехе загрузки библиотеки}
   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;
end;

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

procedure TForm1.Button9Click(Sender: TObject);
begin
Timer_stop:=strtoFloat(edit3.text);
end;

end.

0й канал выдает 63274 +-небольшая погрешность
остальные 6 каналов возвращают 0

ничего к плате в настоящий момент не подключено

Л-Граф2 выдает сигнал по 1 и 2 каналу: -1.6

подскажите, что не так?

12.12.2009 10:12:17
#14

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 674

Re: Плата L-761и Дельфи 7

Хорошо бы еще написать, какие сигналы к каким контактам подключены.

Иван Малиенко
12.12.2009 10:31:15
#15

Гость

Re: Плата L-761и Дельфи 7

я же написал, что в настоящий момент ничего не подключено, но когда проверял на установке, подключены каналы с 0 по 7, +земля, эффект тот же...
0й канал выдает 63274 +-небольшая погрешность
остальные 6 каналов возвращают 0

Иван Малиенко
12.12.2009 10:58:35
#16

Гость

Re: Плата L-761и Дельфи 7

вроде бы надо задать в мей проге параметры платы типа частота, такт, но я не знаю как...

и что то тут на форуме читал про задать флешь, то же не нашел как...

подскажите)

13.12.2009 00:51:11
#17

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: Плата L-761и Дельфи 7

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

14.12.2009 11:28:57
#18

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

Re: Плата L-761и Дельфи 7

Для IoAsync ничего задаватьне надо. В комплекте есть пример L7XX.DPR. Для Вас там интересен Button1Click... Числа надо приводить к типу  signed short...

Иван Малиенко
16.12.2009 12:20:27
#19

Гость

Re: Плата L-761и Дельфи 7

я так и не смог там найти в примерах правильной записи структуры:

pp.s_Type := L_ASYNC_ADC_INP;
pp.Chn[0] := 1;
pLDEv.IoAsync(pp);

U_tek:=pp.Data[0];

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

в примере есть только TTL линии, которые мне пока не требуются...

16.12.2009 13:13:36
#20

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

Re: Плата L-761и Дельфи 7

Так оно и пишется...То что Вы написали это снятие с 1 дифф канала. Несколько каналов последовательными вызовами с разными номерами каналов... в chn[0] номер в data[0] результат...

Иван Малиенко
16.12.2009 16:35:33
#21

Гость

Re: Плата L-761и Дельфи 7

спасибо)))
вроде заработало, теперь осталось проверить на реальной установке)

после еще засыплю "глупыми" вопросами