Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как записать в файл массив размером 8 точек на миллион [D5, D6, D7, Win2k, WinXP]


Страницы:   1 2 3 4 5 6 7 8 9 10

yuraspb ©   (2006-11-10 19:06:00) 

Как записать в файл массив размером 8 точек на миллион?


yuraspb   (2006-11-16 14:55:00) [101]

да число строго аргументировано, причём прогонять его надо аж 10 раз подряд ( 10 раз по 90000 ).
Кроме этого его нужно обрабатывать с помощью кластерного анализа, но сейчас главное хотябы минимум обработки ( нормировка ) и запись в файл.


Jeer   (2006-11-16 14:54:00) [102]


> yuraspb ©   (16.11.06 14:17) [89]


Вам повезло, что я не Ваш начальник.


Сергей М.   (2006-11-16 14:54:00) [103]

И нафих, спрашивается, ты сюда чарт приплел ? Всуе ?


ANB   (2006-11-16 14:51:00) [104]


> yuraspb ©   (16.11.06 14:17) [89]

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


Сергей М.   (2006-11-16 14:50:00) [105]


> обычно 90000


Откуда это число взялось ? От балды взято ? Или чем-то аргументирован его выбор ? Как оно соотносится с массивом размером в ~50 мбайт (см. [9]) ?


yuraspb   (2006-11-16 14:45:00) [106]

обычно 90000


Сергей М.   (2006-11-16 14:36:00) [107]


> count      := frmInit.giConvCount;


И чему равно значение frmInit.giConvCount ?


yuraspb   (2006-11-16 14:17:00) [108]

With ptFaiData do
 begin
   overrun    := @wOverrun;
   count      := frmInit.giConvCount;
   start      := 0;               {Start from buffer begging}
   DataType   := Word(frmInit.chkFloatData.Checked);
   ActiveBuf  := 0;               {Single buffer}

   {If want floating data}
   if DataType = 1 Then
     i := SizeOf(single)
   {Else need Raw data}
   else
     i := SizeOf(Word);
   DataBuffer := Pointer(GlobalLock(frmInit.hUserbuf));    {Alolocate memory for data}
 end;
 lErrCde := DRV_FAITransfer(frmInit.ghDev, ptFaiData);
 if DoesErr(lErrCde) = 1 then
 begin
   GlobalUnlock(frmInit.hBuf);
   GlobalFree(frmInit.hBuf);
   GlobalUnlock(frmInit.hUserbuf);
   GlobalFree(frmInit.hUserbuf);
   DRV_DeviceClose(frmInit.ghDev);
   Exit;
 end;

 {Save data to data show screen}
 p := ptFaiData.DataBuffer;
 if gbCyclic = True Then
   lRetrieved := ptFaiData.count - 1
 else
   lRetrieved := ptAiCheck.retrieved^ - 1;

 frmDataShow.memData.Lines.Clear;
j:=0;
 for i:=0 to (lRetrieved - 1) do
 begin

   if ptFaiData.DataType = 1 then
   begin
      {Converting to Floating data}

j:=j+1;
 if j=1 then frminit.Chart1.Series[0].AddXY(i+vt,Single(p^),'',10289720);
if j=2 then frminit.Chart1.Series[1].AddXY(i+vt,Single(p^),'',16711680);
   if j=3 then frminit.Chart1.Series[2].AddXY(i+vt,Single(p^),'',12550656);
    if j=4 then frminit.Chart1.Series[3].AddXY(i+vt,Single(p^),'',40192);
    if j=5 then frminit.Chart1.Series[4].AddXY(i+vt,Single(p^),'',65408);
      if j=6 then frminit.Chart1.Series[5].AddXY(i+vt,Single(p^),'',65535);
       if j=7 then frminit.Chart1.Series[6].AddXY(i+vt,Single(p^),'',33023);
        if j=8 then frminit.Chart1.Series[7].AddXY(i+vt,Single(p^),'',255);
    if j=8 then j:=0;
     Longint(p) := Longint(p) + SizeOf(Single);
   end
   else
   begin
     {Convert to Hex data}
     frmDataShow.memData.Lines.Append(Format('Buff[%d] = ', [i])+ IntToHex(Word(p^), 3));
     Longint(p) := Longint(p) + SizeOf(Word);
   end;
 end;

 {Free data buffer}

 GlobalUnlock(frmInit.hBuf);
 GlobalFree(frmInit.hBuf);
 GlobalUnlock(frmInit.hUserbuf);
 GlobalFree(frmInit.hUserbuf);

 {Close device}
 DRV_DeviceClose(frmInit.ghDev);

 {Display the Data Show Form}
 frmConverting.Enabled := True;
 butTerminate.Caption := '&Terminate';
//frmDataShow.Show;
 frmInit.Enabled := True;
 frmConverting.Hide;
//rminit.StatusBar1.SimpleText:='Ãîòîâ. Èíôîðìàöèÿ îáðàáîòàíà. ';
//frminit.gotov:=true;
// if not frminit.stopp then frminit.butconvert.click;
end;


Сергей М.   (2006-11-16 14:11:00) [109]

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


yuraspb   (2006-11-16 13:47:00) [110]

Сергей М.,

Спасибо Вам за действительно Полезный совет. Я попробую так и сделать.
Соответственно считывать их тоже можно блоками? А как узнать сколько? Записывать число последней или первой записью?


Сергей М.   (2006-11-16 11:32:00) [111]


> yuraspb ©   (16.11.06 11:15) [84]
>
> Да, похоже у меня не real


real или не real у тебя там - не суть как важно.

Ты лучше объясни нам, бестолковым, зачем тебе такой огромный по размеру массив ?

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


Mikhail V   (2006-11-16 11:28:00) [112]

Весело тут у вас


yuraspb   (2006-11-16 11:15:00) [113]

Да, похоже у меня не real )


Anatoly Podgoretsky   (2006-11-14 08:55:00) [114]

> fog  (14.11.2006 02:55:21)  [81]

> описание АЦП (min/max значения, вес 1 разряда)

Ну он же утверждает, что у него REAL :-)


fog   (2006-11-14 03:22:00) [115]

+ летом пролетал вопрос про осциллограф из звуковой платы -> в архив форума


fog   (2006-11-14 02:55:00) [116]

>Для тех кто в танке:
>Memory Mapped Files MSDN

согласен.
при такой частоте - только так.

 + описание АЦП (min/max значения, вес 1 разряда)


MikePetrichenko   (2006-11-14 02:39:00) [117]


> Как это можно обойти? мне действительно нужно столько объектов.

Для тех кто в танке:
Memory Mapped Files MSDN


> вопрос более глобальный: ты выбором специальности не ошибся?

И не только специальности...


Ketmar   (2006-11-14 02:24:00) [118]

>[78] yuraspb(c) 14-Nov-2006, 01:57
>у меня 100кГц
ты платформой не ошибся?
вопрос более глобальный: ты выбором специальности не ошибся?


yuraspb   (2006-11-14 01:57:00) [119]

у меня 100кГц


fog   (2006-11-14 01:13:00) [120]

2 yuraspb
объясни, доступно, зачем тебе снимать 8 каналов с АЦП по 1 млн. точек - эт прим. 27.8 часов при 10 Гц на канал


Страницы:   1 2 3 4 5 6 7 8 9 10

Наверх

Титульная страница Поиск, карта сайта Написать письмо