Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Тема закрыта
|
||||
|
Вопрос про ReadData(); Delphi7Вопрос в следущем, функцию ReadData() можно выполнять в цикле без START_ADC() и STOP_ADC()?
Привожу свой код:
//Тут я работаю непосредственно с данными полученнымы в буфере END
STOP_ADC(); Будет работать моя программа? (возможности проверить на данный момент нету)
2. Немогу понять что означает @ перед переменными и что за переменная BytesTransferred := 0, правильно что она каждый раз в цикле обнуляется? |
|||
|
||||
|
Re: Вопрос про ReadData(); Delphi7Константин,
Но синтаксис вызова будет
Заодно - цикл repeat-until не нуждается в begin-end.
Обнуление BytesTransferred тут в основном для красоты и защиты от ошибок программиста - если вызов WINAPI ReadFile вернет ошибку, то эта переменная, возможно, не будет установлена (останется то, что было), и ее значение не следует использовать. Этот нуль дает осмысленное значение "ничего не прочиталось". Но вообще-то эта переменная тут вообще мусорная - при overlapped запросе количество реально переданных данных получается из GetOverlappedResult. Ожидание завершения overlapped i/o делать опросом в цикле - не надо. Вообще-то в этом примере вполне подойдет GetOverlappedResult(..., TRUE) - с ожиданием завершения. А по-хорошему (с таймаутами и прочим) - делается WaitForSingleObject или WaitForMultipleObjects. Также посмотрите вот эту ветку:
Стартовать в цикле ничего не надо, конечно. START_ADC и STOP_ADC - это команды прибору начать/закончить сбор данных и посылку их в компьютер. Это кран, открывающий воду, а ReadData - это ведро, которое подставляют под кран. Поэтому самый корректный способ - сначала ReadData без ожидания, потом START_ADC, потом по завершении чтения STOP_ADC. А если непрерывный поток данных больше, чем на один буфер, то надо использовать двойную буферизацию (два ведра: пока одно несут и выливают в бассейн, набирается второе). А в черновом виде Ваша программа |
|||
|
||||
|
Re: Вопрос про ReadData(); Delphi7(оторвалось)
|
|||
|
||||
|
Re: Вопрос про ReadData(); Delphi7Большое спасибо за ответ, а особенно за пример с ведром - все стало сразу понятно! |
|||
|
||||
|
Re: Вопрос про ReadData(); Delphi71. Ещё возник такой вопрос, как мне отслеживать только один конкретный канал? Как например, сделано в Lgraph1.
// установим желаемые параметры АЦП
2. Свою программу делал на основе примера ReadData, LusbApi.dll 2.0. Сменил драйвера на более новые, так же библиотеку на версию Lusbapi.dll 3.3 - программа уже при самом запуске, когда инициализируется - вылетает, подскажите, что именно мне начинать копать при переходе со старой библиотеки на более новую. |
|||
|
||||
|
Re: Вопрос про ReadData(); Delphi71. Не совсем понял вопрос. В структуре ADC_PARS описывается, какие каналы нужно опрашивать и в каком порядке они будут расположены в получаемых данных. Ненужные каналы просто не надо включать в таблицу.
2. Программу ОБЯЗАТЕЛЬНО собирать с lusbapi.h/.lib, соответствующих dll.
|
|||
|
||||
|
Re: Вопрос про ReadData(); Delphi7Александр, ещё по 1му вопросу:
ap.ChannelsQuantity := 1;
|
|||
|
||||
|
Re: Вопрос про ReadData(); Delphi7В принципе да, только прочитайте в руководстве 1.3.2.3 формат логического номера канала (элемента ControlTable) - там не только номер канала, но и режим (дифференциальный или с общей землей), и коэффициент усиления (диапазон измерений).
|
Страницы 1
Тема закрыта