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


Вывод данных L780

Вы не вошли.

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

Владимир
10.10.2004 17:39:46
#1

Гость

Вывод данных L780

DWORD WINAPI ServiceThread(PVOID /*Context*/)
{
   DWORD halfbuffer = IrqStep*pages/2;             // Ñîáèðàåì ïîëîâèíêàìè êîëüöåâîãî áóôåðà
   DWORD fl2,fl1 = fl2 = (*sync<=halfbuffer)? 0:1; // &#205;&#224;&#241;&#242;&#240;&#238;&#232;&#235;&#232; &#244;&#235;&#224;&#227;&#232;
   WORD *tmp, *tmp1;
   for(int i=0;i<multi;i++)                        // &#214;&#232;&#234;&#235; &#239;&#238; &#237;&#229;&#238;&#225;&#245;&#238;&#228;&#232;&#236;&#238;&#236;&#236;&#243; &#234;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#243; &#239;&#238;&#235;&#238;&#226;&#232;&#237;&#238;&#234;
   {
      while(fl2==fl1) fl2=(*sync<=halfbuffer)? 0:1;// &#198;&#228;&#229;&#236; &#231;&#224;&#239;&#238;&#235;&#237;&#229;&#237;&#232;&#255; &#239;&#238;&#235;&#238;&#226;&#232;&#237;&#234;&#232; &#225;&#243;&#244;&#229;&#240;&#224;
      tmp=fdata+(halfbuffer*i);                    // &#205;&#224;&#241;&#242;&#240;&#224;&#232;&#226;&#224;&#229;&#236; &#243;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#252; &#226; &#244;&#224;&#233;&#235;&#229;
      tmp1=data+(halfbuffer*fl1);                  // &#205;&#224;&#241;&#242;&#240;&#224;&#232;&#226;&#224;&#229;&#236; &#243;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#252; &#226; &#234;&#238;&#235;&#252;&#246;&#229;&#226;&#238;&#236; &#225;&#243;&#244;&#229;&#240;&#229;
      CopyMemory(tmp,tmp1,halfbuffer*sizeof(WORD));// &#199;&#224;&#239;&#232;&#241;&#251;&#226;&#224;&#229;&#236; &#228;&#224;&#237;&#237;&#251;&#229; &#226; &#244;&#224;&#233;&#235;
      fl1=(*sync<=halfbuffer)? 0:1;                // &#206;&#225;&#237;&#238;&#226;&#235;&#255;&#229;&#236; &#244;&#235;&#224;&#227;
      Sleep(0);
   }
   complete=1;                                     // &#204;&#251; &#231;&#224;&#226;&#229;&#240;&#248;&#232;&#235;&#232; &#241;&#225;&#238;&#240; &#228;&#224;&#237;&#237;&#251;&#245;
return 0;                                          // &#194;&#251;&#248;&#235;&#232;
}
Как в этой функции организовать вывод данных.
В том смысле, что на данные указывает адрес в памяти tmp, а мне нужны конкретные данные. Видимо это какой-то массив tmp[j] , но тогда какой диапазон должно пробегать j.(Данные нужны живые, а не Датовский фаил).

Владимир
10.10.2004 17:42:12
#2

Гость

Re: Вывод данных L780

Как в этой функции организовать вывод данных.
В том смысле, что на данные указывает адрес в памяти tmp, а мне нужны конкретные данные. Видимо это какой-то массив tmp[j] , но тогда какой диапазон должно пробегать j.(Данные нужны живые, а не Датовский фаил).

WORD WINAPI ServiceThread(PVOID)
{
DWORD halfbuffer = IrqStep*pages/2;             
DWORD fl2,fl1 = fl2 = (*sync<=halfbuffer)? 0:1;
WORD *tmp, *tmp1;
for(int i=0;i<multi;i++)                       
   {
    while(fl2==fl1) fl2=(*sync<=halfbuffer)? 0:1;
    tmp=fdata+(halfbuffer*i);                   
    tmp1=data+(halfbuffer*fl1);                 
    CopyMemory(tmp,tmp1,halfbuffer*sizeof(WORD));
    fl1=(*sync<=halfbuffer)? 0:1;               
    Sleep(0);
   }
   complete=1;                                     
return 0;

11.10.2004 09:27:56
#3

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

Re: Вывод данных L780

Ну вы задаете же размер буфера в отсчетах. Вот такой индекс и бегает.

Владимир
11.10.2004 11:03:41
#4

Гость

Re: Вывод данных L780

Ну а как это будет выглядеть. Я и так пробывал и так, получается какие-то не те данные.
Скажем я пишу в теле цикла while:

for(j=x1;j<x2;j++)
{
код вывода на экран и в фаил *.txt
}
так вот что конкретно должно стоять вместо х1,  х2.

11.10.2004 12:08:22
#5

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

Re: Вывод данных L780

А что из кода не видно чтоли что там два вида значений от 0 до половины буфера и от половины буфера до конца в зависимости от того где счетчик заполнения находится

Владимир
11.10.2004 19:38:27
#6

Гость

Re: Вывод данных L780

Как это в точности будет выглядеть
x1=halfbuffer*fl1 x2=halfbuffer*(fl1+1)
или x1=i*halfbuffer x2=(i+1)*halfbuffer
или как то иначе. Пробывал по разному, не получается.
  В одном из случаев tmp[j] равны нулю начиная с некоторого j, помоему равного длине буфера.

И еще если я хочу увидеть график двух каналов, но не наложенный друг на друга, а один под други. Как развести данные на два канала.
Жду развернутого ответа smile. Спасибо.

12.10.2004 09:41:01
#7

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

Re: Вывод данных L780

Ну плата пишет циклически в буфер.
Из той половины в которую уже записала берете
tmp[0] - 1 канал tmp[1] второй  tmp[2] опять первый и так от 0 до halbuffer. или от halfbuffer до 2*halfbuffer.
А так смотрите еще пример OSC.TST

Владимир
12.10.2004 22:06:16
#8

Гость

Re: Вывод данных L780

DWORD WINAPI ServiceThread(PVOID /*Context*/)
{long int m=0;
     int k = 0;
    DWORD x,y;
    CString str;


   /*DWORD*/short halfbuffer=IrqStep*pages/2;   
  DWORD fl2,fl1 = fl2 = (*sync<=halfbuffer)?0:1;
   short *tmp, *tmp1;
   for(int i=0;multi;i++)                       
   {
      

      while(fl2==fl1)
   
          fl2=(*sync<=halfbuffer)? 0:1;
      tmp=fdata+(halfbuffer*i);                   
      tmp1=data+(halfbuffer*fl1);
         
      CopyMemory(tmp,tmp1,halfbuffer*sizeof(short));
      fl1=(*sync<=halfbuffer)? 0:1;
///ПРАВИЛЬНО ЛИ ЭТО
for(long int j=halfbuffer*!fl1;
j<halfbuffer*!fl1+halfbuffer; j+=sizeof(short))
{ bUpdate = FALSE;


        DataMassiv[m]=(120+tmp[j]/10);
                  y=(120+tmp[j]/10);
   
str.Format("i=%d ,j=%d,Massiv[j]=%d /n",i ,j,DataMassiv[m]);
m++;k++;
           str.Format("i=%d j=%d *fdata=%d tmp=%d fl1=%d *sync=%d y=%d flag=%d /n",i,j,fdata[j],tmp[j],fl1,*sync,y,bUpdate);
          m_CounterFile->WriteString(str);
    
        mdc.SetPixel(k,y,RGB(0,255,0));

      }
//почему-то в результате получается синусоида,
с участками нулей(в конце вторых половинок буфера), хотя
сигнал с генератора синусоида.

13.10.2004 09:09:06
#9

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

Re: Вывод данных L780

Правильно будет напечатать массив tmp1 от 0 до halfbuffer - тк он в этот момент готов.Тока ндао учесть что плата собирает попрежнему и если замешкаться то данные затруться.

Владимир
13.10.2004 09:30:17
#10

Гость

Re: Вывод данных L780

А как поступить со второй половинкой буфера.

13.10.2004 10:40:57
#11

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

Re: Вывод данных L780

дык tmp1 перенастраивается по флагу то на data то на data+halfbuffer

Владимир
14.10.2004 22:46:44
#12

Гость

Re: Вывод данных L780

Спасибо за помощь, но у меня ещё один вопрос.
У меня есть массив каналов (к плате подключено  4 канала под разным
напряжением в деферециальном режиме х1,Х2,У1,у2,
остальные 28 каналов подключены к земле т.е.17 выходу)
Далее хочу опросить каналы,
пишу:
WORD Chan[]={0x0,0x1,0x20,0x21,0x22,0x30,0x31};
в итоге на экране 5 синусоид.
word Chan[]={0x0,0x1} - одна синусоида
причем синусоида word Chan[]={0x0}
совпадает с синусоидой word Chan[]={0x1}
хотя сигналы подаются разные, и точно различимые.
word Chan[]={0x1,0x0} - а в этом варианте вообще прямая линия.
Что делать, чтобы вывести четыре канала, что должно стоять вместо
х1,х2,у1,у2, в выражение word chan[]={0xX1,0xX2,0Xy1,0XY2}.
И еще в выражении for(j=0;j<halfbuffer;j+=sizeof(short))
правильно ли написано третье условие или можно ограничиться j++?

15.10.2004 09:23:08
#13

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

Re: Вывод данных L780

Написать массив на четыре канала которые надо ввести. И главное правильно подключить сигналы по диф схеме.

если индексация идет по tmp[j] где tmp - массив short то j++.