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


Форум

Вы не вошли.

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

#1 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 22.09.2014 18:24:29

Возможно я неверно трактовал значение DataStep. Это общее количество данных на все каналы (в моем случае по 3200 записей с каждого канала) или количество данных с каждого канала?

#2 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 19.09.2014 17:31:22

Тут обе переменные были локальными...
Теперь непонятно другое.
Задаю

DWORD DataStep = 6400;

Каналов

ap.ChannelsQuantity = 0x2;

Управляющая таблица

ap.ControlTable[0]=2; //2-й канал, +-5В 
        ap.ControlTable[1]=3; //3-й канал, +-5В

В потоке записываю данные в файлы:
1)

			// запишем полученную порцию данных в файл
			if(!WriteFile( hFile,													// handle to file to write to
		    		       IoReq[RequestNumber^0x1].Buffer, // pointer to data to write to file
				       2*DataStep,	 		// number of bytes to write
	    			       &FileBytesWritten,		// pointer to number of bytes written
				       NULL 				// pointer to structure needed for overlapped I/O
				      ))
                        { ReadThreadErrorNumber = 0x4; break; }

2)

                        f_out=fopen ("out.prn","a");
                        for (j=0;j<2*DataStep;j=j+2) //2 канала по DataStep отсчетов
                        {
                           fprintf (f_out,"%d\t",j);
                           fprintf (f_out,"%d\t",(int)IoReq[RequestNumber^0x1].Buffer[j]);  //0,2,4,6...
                           fprintf (f_out,"%d\n",(int)IoReq[RequestNumber^0x1].Buffer[j+1]);//1,3,5,7...
                        }
                        fclose (f_out);

Первый кадр записывается в оба файла нормально.
Во время записи второго кадра сообщение об ошибке на строке записи

                           fprintf (f_out,"%d\t",(int)IoReq[RequestNumber^0x1].Buffer[j]);  //0,2,4,6...

Ошибка: access violation at 9x32665a50: read of adress 0xf87f100c.
В файл Test.dat записывается только первый кадр.
В файл out.prn записывается примерно полтора кадра, каждый запуск по-разному. То 10558 (из 12800), то 10582, то 10536, то 10550 значений.
Отладчик показывает, в момент ошибки
j=10634, а
IoReq[RequestNumber^0x1].Buffer[j]=???.
Если смотреть данные, которые успели записаться в out.prn, то второй  (неполный) кадр выглядит липой: скачки значений от 0 от 25000 и больше.
Где еще я некорректно мог использовать переменную, подскажите, пожалуйста?!?

#3 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 17.09.2014 10:27:12

Александр, добрый день!
Спасибо за помощь.
Нашел ошибку в коде. Целиком и полностью моя вина, глупейшая ошибка. Использовал "бездумно" Ваш код:

for (i = 0; i < DataStep; i++) { fprintf(fp, "%d\n", (int)Buffer [ i ]); }

при этом не обратил внимание на то, что i уже используется в цикле сбора данных, внутри которого я работаю:

		for(i = 0x1; i < NDataBlock; i++)

Замена переменной i на j решила эту проблему!
Спасибо еще раз большое!

#4 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 16.09.2014 13:37:54

Добавлю. Запись идет "рядом" с WriteFile-ом, то есть, как я полагаю, в том же потоке...

#5 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 16.09.2014 13:36:09

Проблема, которую я описал в 17 посте для меня пока неясна. там же простой вывод в файл fprintf, почему не работает?!?

#7 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 15.09.2014 18:43:55

Вдобавок, не удается "переписать" этот пример в виде формы с кнопкой "старт". Дальше первого кадра запись не идет:(
http://www.lcard.ru/forums/img/members/42/My1.zip

#8 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 15.09.2014 17:47:55

Александр Е пишет:

for (i = 0; i < DataStep; i++) { fprintf(fp, "%d\n", (int)Buffer [ i ]); }

Сделал в ReadData такую запись в файл (параллельно с

if(!WriteFile(	  hFile,													// handle to file to write to
		    			 IoReq[RequestNumber^0x1].Buffer, // pointer to data to write to file
					 2*DataStep,	 		  // number of bytes to write
	    				 &FileBytesWritten,		  // pointer to number of bytes written
					 NULL 				  // pointer to structure needed for overlapped I/O
							   )) { ReadThreadErrorNumber = 0x4; break; }

При этом счетчик на экране "Counter=...from.." не идет дальше 0.
В файл fp что-то постоянно записывается.
Куда копать, подскажите, пожалуйста!

#9 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 05.09.2014 11:24:32

Александр Е пишет:
Станислав пишет:

ap.ControlTable[0]=1;
ap.ControlTable[1]=3;
Верно?
Или нумерация каналов АЦП начинается с нуля и второй канал это 0000 0001, а третий 0000 0010?

Нумерация начинается с нуля в ControlTable и с единицы на разъеме, т.е. для каналов 2 и 3 ControlTable[] = { 1, 2 }
А что за прибор программируете? E154?

Понял, спасибо, E154

#10 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 04.09.2014 18:05:39

Поправьте, пожалуйста,если ошибаюсь.
Планирую использовать дваканала, 2 и 3,
а) задаю
ap.ChannelsQuantity = 0x2;
б) устанавливаю первый логический номер канала для второго канала АЦП, диапазон +-5В (00000010):
ap.ControlTable[0]=1;
в) устанавливаю логический номер канала для третьего канала АЦП, диапазон +-5В (00000011):
ap.ControlTable[1]=3;
Верно?
Или нумерация каналов АЦП начинается с нуля и второй канал это 0000 0001, а третий 0000 0010?

#12 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 01.09.2014 18:31:10

Спасибо за пояснения,обязательно прочту.
Хотелось бы прояснить.
В этом же примере.
1. Если я хочу-таки записать результаты измерений по всем каналам в различные файлы с указателями fp1, fp2, fp3,fp4, то как мне переписать приведенную выше строчку:

for (i = 0; i < DataStep; i++)
    {
    fprintf(fp, "%d\n", (int)Buffer[i]);
    }

Где указать номер канала?

2. Могу ли я опрашивать только 2 и 3 канал, не опрашивая первый? Где указывать номер канала, если такой запрос возможен?
Заранее спасибо за помощь!

#13 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 29.08.2014 18:29:30

Подскажите,пожалуйста, в строках примера:

	
*********
// формируем необходимые для сбора данных структуры
	for(i = 0x0; i < 0x2; i++)
	{
		// инициализация структуры типа OVERLAPPED
		ZeroMemory(&ReadOv[i], sizeof(OVERLAPPED));
*********

0x2 - это число опрашиваемых каналов АЦП (2 штуки)?

#15 Re: Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 29.08.2014 09:31:30

Александр,если не сложно, подскажите, чем можно смотреть файлы данных,создаваемых ReadData?

#18 Техническая поддержка » Доработка примера 'ReadData' - нужна помощь чайнику » 30.07.2014 18:38:07

Станислав
Ответов: 28

Добрый день!
Помогите, пожалуйста, с заменой WriteFile на fprintf в примере 'ReadData':

if(!WriteFile(hFile,IoReq[RequestNumber^0x1].Buffer, 2*DataStep, &FileBytesWritten,NULL)) { ReadThreadErrorNumber = 0x4; break; }

Заранее спасибо!

#20 Техническая поддержка » Чтение данных из формы (пример ReadData) » 18.07.2014 09:54:07

Станислав
Ответов: 1

Добрый день!
Помогите, пожалуйста, чайнику.
Пробую перевести консольный пример работы с E154 в форму.
По нажатию кнопки старт на форме должна запуститься запись данных в файл, как в примере ReadData.

Ошибка при вызове первой же функции:
***
if((DllVersion = GetDllVersion()) != CURRENT_VERSION_LUSBAPI)
***

Вот ошибка:
[Linker Error] Unresolved external 'GetDllVersion' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\MY1\UNIT1.OBJ

Вот целиком проект:
https://cloud.mail.ru/public/c9fbee92a931/My1.7z

Заранее спасибо!

#21 Re: Техническая поддержка » Borland C++Builder 5+Synchro=Unable to open file "RTL.LIB" » 18.07.2014 09:12:25

Перешел на 6-й билдер. Он нормально открывает проект.
Спасибо за подсказки!

#22 Re: Техническая поддержка » Borland C++Builder 5+Synchro=Unable to open file "RTL.LIB" » 14.07.2014 13:25:25

Спасибо за ответ!
Теперь ошибка:
[Linker Fatal Error] Fatal: Unable to open file 'RTL50.LIB'

#23 Re: Техническая поддержка » Borland C++Builder 5+Synchro=Unable to open file "RTL.LIB" » 10.07.2014 13:42:34

Нет.
Я открываю демо-проект, скачанный с вашей страницы:
http://www.lcard.ru/download/examples/l … der_50.zip
Файл-архив называется
lusbapi_e154_borland_c_builder_50.zip

Вроде бы это 5 версия, поправьте, если ошибаюсь

#24 Техническая поддержка » Borland C++Builder 5+Synchro=Unable to open file "RTL.LIB" » 10.07.2014 11:36:42

Станислав
Ответов: 5

Добрый день!
Запускаю Borland C++Builder 5, открываю Examples.bpg, активирую проект Synchro.exe. При компиляции вылезает ошибка Unable to open file "RTL.LIB".
Файла такого и правда нет на компьютере.
Подскажите, пожалуйста, что делать!