Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Тема закрыта
|
||||
|
Ошибка -1002 при вызове LTR11_SetADC()Ниже приведен отрывок из программы - инициализация LTR11 (АЦП). При вызове LTR11_SetADC возникает ошибка -1002 (недопустимое количество логических каналов). В чем может быть дело?: Err := LTR11_Init(@LTR11);
LTR11.StartADCMode := LTR11_STARTADCMODE_INT;
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Возможно проблема в выравнивании структур.
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Сделал ка вы сказали. Не помогло. В ltr11api.pas
В ltrapi.pas
Только по моему если структура определена как packed record, эти директивы не работают. Я использую Delphi 2012. В настройках проекта
Пример с вашего сайта
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()packed по хорошему быть у записей не должно, их можно убрать. Странно, что даже пример не работает... сегодня попробую его собрать и проверю. А Delphi 2012 и XE3 - это та же среда? |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Delphi 2012 и XE2 |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Я использую Delphi XE2. Я экспериментировал с различными комбинациями из без packed и различные выравнивания. Все равно ошибка. |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()>Добавил {$A4} перед определением LTR11_GainSet=packed record
Почему только эти? Это на все record/'ы распространяется.
>Quad word (по моему - это 16 байт).
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Еще необходимо char заменить на AnsiChar (в структурах для LTR11 и главное в ltrapitypes.pas в SERNUMtext), т.к. в XE тип char стал unicode и занимать больше байта. После того как я это сделал и добавил {$A4} перед началом обявлений структур и {$A-} после завершения объявления и убрал все слова packed в ltrapitypes.pas, ltrapi.pas и ltr11api.pas, подключив эти файлы к проекту (там пример еще использовал напрямую как-то .lib файлы - их я убрал), то в XE2 у меня все заработало. |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()>После того как я это сделал и добавил {$A4} ..., >то в XE2 у меня все заработало. Спасибо, помогло. Все дело было в том, чтобы заменить char на AnsiChar.
Но появилась другая проблема.
На 1-ый канал подаем 5 вольт на 2-ой - 3 вольта. И так получается, что 1-ый канал считывается правильно.
Вот отрывок из инициализации: LTR11.StartADCMode := LTR11_STARTADCMODE_INT;
По таймеру читаем значения 1-го и 2-го каналов: procedure TForm1.Timer1Timer(Sender: TObject);
Size := LTR11.LChQnt;
lbValue1.Caption := FloatToStr(Volts[0]);
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Все же packed record соответствует размеру выравнивания 1 ({$A1}, #pragma pack(1)), а в библиотеках LTR все структуры объявлены с выравниванием 4. Хотя в ряде случаев выравнивание на 1 и 4 дает одинаковый результат, в общем случае это будет верно не для всех структур. Поэтому {$A4} все наиболее правильный вариант. По поводу Вашего случая, если вы имели ввиду "2-ой логический канал со 2-ым физическим" и Вас интересует именно дифференциальное подключение (первый сигнал подается на X1/Y1, второй X2/Y2), то настройки правильные. Тогда чтобы понять, проблема в программе или в подключении, стоит посмотреть как это будет работать в UTS или LGraph2. |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()С директивами компилятора все понял. Да правильно так:
Через UTS все правильно показывает и для 1-го и для 2-го канала. Но ваш пример из http://www.lcard.ru/download/ltr_sources.zip для LTR11
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()А что подразумевается под "все время скачут значения": они меняются вообще по всему диапазону произвольно или в некой окрестности установленных трех вольт? Если подать другое значение на второй канал (например 0), то показания изменятся? |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Значение скачут от примерно от 1 Вольта до 6 Вольт. И очень хаотично. Я завтра точнее напишу диапазон, доступ к аппаратуре у меня сегодня закончился. Но все же это трудно назвать окрестностью около 3 Вольт. |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Можно еще попробовать поменять каналы местами. То есть 1-ый настроить на 2-ой физический, а 2-ой - на 1-ый физический. Если скачки будут на том же физическом (на 1-ом логическом), то библиотека работает нормально и видимо дело в подключении, иначе - точно дело именно в программе. Следует также учесть, что по-умолчанию мультиметр UTS показывает среднее значение по заданному числу точек, а не мгновенное. Там есть различные режимы в мультиметре (можно установить например Peak-to-Peak, чтобы посмотреть разброс значений) |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Я выше писал, что Ваш пример из http://www.lcard.ru/download/ltr_sources.zip для LTR11
Но все же проблема осталась. Вот что удалось выяснить. Я переделал свою программу, как у Вас в примере. Чтение ацп произвожу функцией
procedure TForm1.Timer1Timer(Sender: TObject);
Size := LTR_Recv(@LTR11.Channel, @Data[0], @Time[0], Size, 10000);
lbValue1.Caption := FloatToStr(Volts[0]);
На процесс оцифровки надо когда-то запустить (т.е. вызвать LTR11_Start(@LTR11)),
Вообщем получается так, что если запускать (LTR11_Start) в самом начале обработчика таймера
Подскажите пожалуйста, чем может быть вызвано считывание неверного значения
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Виталий, поскольку программные проблемы, как мы полагаем, были разрешены, то, вероятно, остались аппаратные, связанные с корректностью подключения и настроек. Итак, Вы работаете с LTR11 в 2-х канальном дифференциальном режиме на поддиапазоне "10V" при частоте АЦП 400 кГц. Ответьте, пожалуйста, на вопросы.
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Было неправильное подключение контактов.
|
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Виталий, при необходимости, мы консультируем по вопросам правильного, оптимального подключения для конкретного случая. Обращайтесь. |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()я тут видимо не много опоздал, но Алексей не могли бы вы выложить исправленные заголовочные файлы чтобы в XE2 заработало. |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Выслал по почте |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()большое спасибо |
|||
|
||||
|
Re: Ошибка -1002 при вызове LTR11_SetADC()Исправленные файлы для XE2, которые я отсылал, теперь включены и в обновленный стандартный установщик библиотек (http://www.lcard.ru/download/ltrdll.exe). Новые файлы устанавливаются в директорию include/pascal2. Так как там есть небольшие изменения в совместимости (в первую очередь из-за замены Char/String на AnsiChar/AnsiString), то старые файлы из include/pascal останутся без изменений, чтобы старые проекты пользователей могли собраться без изменений. При этом для новых проектов версия из include/pascal2 рекомендуемая, так как работает как под Delphi7, так и под XE |
Страницы 1
Тема закрыта