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

Ошибка -10021 в программе на Delphi c модулем LTR114

Вы не вошли.

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

25.03.2022 12:28:49
#1

Участник
Здесь с 25.03.2022
Сообщений: 5

Ошибка -10021 в программе на Delphi c модулем LTR114

Подскажите, пожалуйста, как определить источник ошибки -10021 в программе на Delphi c модулем LTR114.
Всю программу приводить не имеет смысла (очень большая + куча дополнительных опций). Опишу основные моменты:
1. В системе используются (помимо дискретных блоков LTR41 и LTR42) измерительные блоки LTR114 и LTR212 (2 шт.).
2. Измерительные модули "работают" в отдельных потоках (один для модулей LTR212 и один для модуля LTR114).
3. При начальной отладке (сначала по отдельности, а затем при совместной работе) показания штатным образом
считывались в программу и отображались в программе. Частота обработки данных в программе невысокая
(1 сек. для LTR212 и 3 сек. для LTR114), поэтому LTR212 опрашивались непрерывно (данные переписывались в буфер,
а оттуда по сигналу таймера выводились для дальнейшей обработки), а для LTR114 данные в потоке получались
с помощью функции LTR114_GetFrame, записывалиь в буфер, затем поток засыпал до срабатывания 3-х секундного таймера.
4 После доделки и некоторой "модернизации", программа работала на прием данных с LTR212 без нареканий, а вот
попытка снова получить данные LTR114 (не отображаемые на начальном этапе отработки) столкнулись с трудностью.
Отладка показала, что ошибка возникает при инициализации модуля (привожу часть программы опуская несущественные
подробности):

  Result:= LTR114_Init(pLTR114);    // Result= LTR_OK

  Result:= LTR114_Open(pLTR114, NetAddr, PortNum, @SerNum[1], ASlotNum);   // Result= LTR_OK

  Result:= LTR114_GetConfig(pLTR114);   // Result= LTR_OK
  with hLTR114 do begin
    Interval:= ...
    SyncMode:= ...
    FreqDivider:= ...
    SpecialFeatures:= ...
    AdcOsr:= 0;
    LChQnt:= 0;
    for i:=1 to 8 do begin
      LChTbl[LChQnt]:= LTR114_CreateLChannel(MeasMode, i, Range);
      Inc(LChQnt);
    end;
  end;


  Result:= LTR114_SetADC(pLTR114);    // А ВОТ ЗДЕСЬ - Result= -10021  !!!

  Result:= LTR114_Calibrate(pLTR114);

Для меня эта ситуация непонятна, связь с работой потока с LTR212 я отмел (весь посторонний код удалил).
Восстановил старую версию программы - она работает, однако при попытке выделить только код для LTR114 что-то
видимо "поломалось" (очень много вспомогательного кода удалял) и опять появилась та же ошибка.

Подскажите, пожалуйста, в каком направлении нужно копать? Как локализовать источник ошибки?

25.03.2022 13:14:16
#2

Участник
Здесь с 25.03.2022
Сообщений: 5

Re: Ошибка -10021 в программе на Delphi c модулем LTR114

Прошу прощения, в предыдущем сообщении допустил ошибку в коде заполнения таблицы каналов.
В действительности нумерация от "0":
LChTbl[LChQnt]:= LTR114_CreateLChannel(MeasMode, i-1, Range);

27.03.2022 13:38:58
#3

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Ошибка -10021 в программе на Delphi c модулем LTR114

Во первых, правильно ли я понимаю, что даже если оставить только указанный код в проекте, убрав весь остальной, то проблема остается?
Если так, то во первых укажите как именно заданы переменные pLTR114 и hLTR114?
Во вторых проверьте, может быть проблема в разном представлении структуры в pascal и C, проверьте установлено ли в Вашем проекте выравнивание структур на 4 (для файлов из директории pascal в отличие от pascal2 это необходимо для корректной работе). Дополнительно можете проверить, корректно ли отображается серийный номер модуля после выполнения Open.

Если же оставленный только данный код выполняется корректно и ошибка возникает при уже добавлении в проект потоков и т.п., то проверьте, нет  ли случая, что с одним описателем одновременно идет работа из разных потоков, и в момент настройки из одного продолжает выполняться GetFrame из другого.

28.03.2022 11:08:01
#4

Участник
Здесь с 25.03.2022
Сообщений: 5

Re: Ошибка -10021 в программе на Delphi c модулем LTR114

Спасибо за оперативный ответ. Сейчас нет доступа к "железу". Буду проверять на следующей неделе.

04.04.2022 13:26:13
#5

Участник
Здесь с 25.03.2022
Сообщений: 5

Re: Ошибка -10021 в программе на Delphi c модулем LTR114

СПАСИБО! Проблема решена.
Действительно установка выравнивания на 4 байта сработала.
Для тех, кто получит подобную ошибку как у меня (у меня Delphi 7) поясняю пошагово как исправить ситуацию:
1. При загруженном проекте идем в меню Project/Options
2. Выбираем вкладку Compiler, и на ней устанавливаем (выбираем) Record field alignment значение 4.
3. ПОЛНОСТЬЮ перестраиваем проект: меню Project/Build <имя проекта>.

Еще раз спасибо!

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск