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


Помогите, плиз, с получением данных E14-140

Вы не вошли.

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

Evg
27.05.2008 11:08:43
#1

Гость

Помогите, плиз, с получением данных E14-140

Помогите, плиз, с получением данных из буфера E14-140.    
Имеется 3 канала.           
Это строчка кода из примеров:
if FileWrite(FileHandle, Buffer[RequestNumber xor $1][0], DataStep*sizeof(SHORT)) = -1 then begin ReadThreadErrorNumber := $5; break; end;

Я так понимаю что на каждом шаге в Buffer[RequestNumber xor $1][0] может быть сколь угодно данных? как тогда получить данные по каналам? как это сделать на делфи?
Заранее спасибо за помощь

27.05.2008 21:07:59
#2

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,535

Re: Помогите, плиз, с получением данных E14-140

1. Функция FileWrite() является функцией WinAPI и не имеет отношения к собственно самому сбору данных. Для извлечения из модуля E14-140 очередной порции собранных данных используется функция ReadData().
2. В руководстве программиста при описании функции ReadData() указано: "Полученные данные в буфере будут располагаться по-кадрово: 1ый кадр, 2ой кадр и т.д. Причём положение отсчётов в кадрах будет совпадать с порядком размещения соответствующих логических каналов в управляющей таблице ControlTable."

SLY
28.05.2008 00:24:41
#3

Гость

Re: Помогите, плиз, с получением данных E14-140

ПИШЫ МНЕ НА МЫЛО ПОМОГУ!

Evg
28.05.2008 12:21:24
#4

Гость

Re: Помогите, плиз, с получением данных E14-140

я прочитал что они так располагаются... Но как это сделать на Delphi? чтобы 4 канала выдергивать каждый раз из порции данных?

Evg
28.05.2008 12:22:29
#5

Гость

Re: Помогите, плиз, с получением данных E14-140

...ошибся... 3 канала, а не 4

28.05.2008 13:11:59
#6

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,535

Re: Помогите, плиз, с получением данных E14-140

Это же обычный массив. Первый элемент соответствует отсчёту с первого логического канала, второй - со второго и т.д. Delphi здесь не причём.

Evg
28.05.2008 13:20:52
#7

Гость

Re: Помогите, плиз, с получением данных E14-140

Buffer[RequestNumber xor $1][0] - 0-й
Buffer[RequestNumber xor $1][1] - 1-ый
и т.д.??

28.05.2008 14:19:05
#8

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,535

Re: Помогите, плиз, с получением данных E14-140

Да.
P.S. Возьмите какое-нибудь учебное пособие по Delphi и внимательно почитайте про работу с массивами.

Evg
28.05.2008 14:47:16
#9

Гость

Re: Помогите, плиз, с получением данных E14-140

FileWrite пишет на диск все данные по всем каналам из 0-го элемента буфера - Buffer[RequestNumber xor $1][0].
Не странно-ли?
А Вы, Сергей, предлагаете мне использовать также 1,2,... элементы двумерного массива..

28.05.2008 15:48:41
#10

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,535

Re: Помогите, плиз, с получением данных E14-140

В данном случае происходит запись всех данных начиная с Buffer[RequestNumber xor $1][0] и вплоть до Buffer[RequestNumber xor $1][DataStep-1].

Evg
03.06.2008 11:49:11
#11

Гость

Re: Помогите, плиз, с получением данных E14-140

Сергей, делаю так как вы написали, но у меня в массиве получается полная белиберда.
Вот кусок моего кода:

for i := 1 to 500 do begin
  // задаем длину массива для данных из буфера
  SetLength(Massive, Counter*3 +1);             if IsReadThreadComplete then Break;
  RequestNumber := RequestNumber xor $1;

  if not pModule.ReadData(@IoReq[RequestNumber])   then begin       
  ReadThreadErrorNumber := 2; break;
  end;
if not WaitForSingleObject(IoReq[RequestNumber xor $1].Overlapped.hEvent, IoReq[RequestNumber xor $1].TimeOut) = WAIT_TIMEOUT then begin ReadThreadErrorNumber := $03; break; end;
if FileWrite(FileHandle, Buffer[RequestNumber xor $1][0], DataStep*sizeof(SHORT)) = -1 then begin ReadThreadErrorNumber := $5; break; end;

  _data_int := Buffer[RequestNumber xor $1][0];
  Massive[ijk_] := _data_int;
  _data_int := Buffer[RequestNumber xor $1][1];
  Massive[ijk_ + 1] := _data_int;
  _data_int := Buffer[RequestNumber xor $1][2];
  Massive[ijk_ + 2] := _data_int;
  DataFrames[Counter - 5] := True;
  ijk_ := ijk_ + 3;

  if ReadThreadErrorNumber <> 0 then break
  else if IsEscKeyPressed() then begin           
  ReadThreadErrorNumber := 4; break; end
  else Sleep(20);
  Inc(Counter);
  end
end
else ReadThreadErrorNumber := 6;

04.06.2008 11:10:17
#12

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,535

Re: Помогите, плиз, с получением данных E14-140

В каком из массивов?

Evg
20.06.2008 08:21:00
#13

Гость

Re: Помогите, плиз, с получением данных E14-140

Разобрался. спасибо за помощь, Сергей

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4

Многоканальный телефон:+7 (495) 785-95-25

Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск