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


L791 и Delphi

Вы не вошли.

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

Astashev
30.10.2008 17:52:25
#26

Гость

Re: L791 и Delphi

Поставил новую библиотеку и увидел в примере старый "прикол": в файле Library/L791.DPR/ioctl.pas в 211 строке не хватает точки с запятой. Это что, проверка?

Astashev
30.10.2008 18:41:15
#27

Гость

Re: L791 и Delphi

При тестировании новой библиотеки оказалось, что ошибка осталась: в примере L791.DPR в исходном варианте ошибка выскакивает на выходе из программы, а если я в процедуре Button2Click в начало вставляю plDev.StopLDevice, запускаю программу, жму на первую кнопку: все ОК, жму на вторую кнопку: все ОК, побежали индексы PCI_Count. Жму второй раз на вторую кнопку программа вылетает на plDev.SetParametersStream. При этом используется библиотека LComp.dll версии 6.0.0.6 от 29 октября

31.10.2008 11:01:15
#28

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

Re: L791 и Delphi

; поставим.... а про ошибку это Вы просто дельфи плохо знаете и я тоже его не очень знаю... ошибка чисто в обявлении типа массива  для массива данных как динамического масива и попытке дельфи его при выходе освободить....

Astashev
31.10.2008 11:17:59
#29

Гость

Re: L791 и Delphi

На выходе из Программы это конечно безопасно, и, наверное можно обойти путем окружения соответствующего блока операторами try ... except.
А вот проблема с ошибкой в plDev.SetParametersStream приводит к тому, что я не могу нормально обновить скорость сбора данных в ходе выполнения программы. Как это обойти?

31.10.2008 12:32:52
#30

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

Re: L791 и Delphi

а остановку таймера тоже устанавливаете? чета я ничего криминального не наблюдаю...

Astashev
31.10.2008 14:57:04
#31

Гость

Re: L791 и Delphi

Разобрался в чем ошибка:
Если в качестве data в процедуру передавать УКАЗАТЕЛЬ на динамический массив то все ОК и никаких ошибок не возникает.
В примере после строки 16
WA = array of UShort;
нужно добавить
PWA = ^WA;
соответственно
Data : PWA; //было WA
Получать данные из такого массива я пока не пробовал, но не вижу почему может не получиться.

31.10.2008 15:14:32
#32

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

Re: L791 и Delphi

типа того...я выложил уже и там это исправлено...

Astashev
31.10.2008 15:28:23
#33

Гость

Re: L791 и Delphi

Спасибо.
Надеюсь что все таки разберемся...
Дополнительно, не может ли причиной подобных проблем конкретный набор установок в Делфи? Там где Project/Options/Compiler? Т.е. в директивах компилятора?

31.10.2008 15:47:31
#34

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

Re: L791 и Delphi

не должно

Григорий
31.10.2008 18:37:42
#35

Гость

Re: L791 и Delphi

К слову, у меня не получилось добыть из динамического массива данных(с указателем на него) данные. Делфи говорит, что массив имеет размер 0.

31.10.2008 20:47:57
#36

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

Re: L791 и Delphi

а и не надо...заменить на фиксированный...

Astashev
01.11.2008 14:06:52
#37

Гость

Re: L791 и Delphi

Poul, в Вашем примере все работает. Большое спасибо!!!

Student
26.03.2011 12:05:19
#38

Гость

Re: L791 и Delphi

Здравствуйте, уважаемые программисты. Я студент-дипломник электротехнического факультета, программирование является далеко не профилирующим на моей специальности. Учился программировать «по книжке», не хватает навыков. Рискую завалиться на защите. К плате подведены три аналоговых сигнала (0 – 5В) и исходящие сигналы DAC1, DAC2 должны задаваться пользователем. Пытаюсь привязать L791 к оболочке интерфейса. Возможно, вопрос покажется глупым, не судите строго, помогите, пожалуйста, чем можете.

Вот фрагмент программы:
...
Type
  WA = array [0..512000] of ULONG;
  SA = array [0..1023] of ULONG;
  PSA = ^SA;
  PWA = ^WA;
...
Var
  pLDev: IDaqLDevice;
  pIUnknown:LUnknown;
  hr:Integer;
  dev791: THandle;
  sl:SLOT_PAR;
  pd: PLATA_DESCR_L791;
  ap: ADC_PAR;
  tm: ULONG;
  data_:PWA;
  sync_:PSA;
...
function RunADCL791: Cardinal;

implementation

function RunADCL791: Cardinal;
begin

//заполняется структура ap.t2 из ADC_PAR_1 файла ioctl.pas согласно примеру
   ap.t2.s_Type := L_ADC_PARAM;
   ap.t2.AutoInit := 1;
   ap.t2.dRate := Options.FrecDAC;
   ap.t2.dKadr := ADC_Kadr;
   ap.t2.SynchroType := 0;
   ap.t2.SynchroSrc := 0;
   ap.t2.NCh := 3;
   ap.t2.Chn[0] := $0;
   ap.t2.Chn[1] := $1;
   ap.t2.Chn[2] := $2;
   ap.t2.FIFO := FIFO;
   ap.t2.IrqStep := IrqStep;
   ap.t2.Pages := pages;
   ap.t2.IrqEna := 0;
   ap.t2.AdcEna := 1;
   
//Заполняем внутреннюю структуру параметров сбора данных значениями из структуры ap.t2
   pLDev.FillDAQparameters(ap.t2);

//Дальше согласно примера
   tm := 512000;  // для 100000 отсчетов (512Х10000)
   pLDev.RequestBufferStream(tm,L_STREAM_ADC); // выделяем оперативку под большой кольцевой буфер
   pLDev.SetParametersStream(ap.t2, tm, data_, sync_,L_STREAM_ADC);
   pLDev.InitStartLDevice;
   pLDev.StartLDevice;
end;

В главном модуле идёт вызов этой функции. Ошибок, вроде, не выдаёт.

Вопросы:
1.Где происходит запись массива данных по трём аналоговым сигналам (от 0 до 5В), как вытащить эти данные?
2.Каким образом задавать напряжения на выходы DAC1 и DAC2 из массива данных?

Заранее огромное спасибо.