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

Крейт LTR-EU-2-5 с модулем LTR114. Проблема с LTR114_ProcessData().

Вы не вошли.

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

Игорь Тамбасов
16.03.2017 10:44:33
#1

Гость

Крейт LTR-EU-2-5 с модулем LTR114. Проблема с LTR114_ProcessData().

Добрый день!
Недавно мы приобрели Крейт LTR-EU-2-5 с модулем LTR114. Начали интегрировать его в нашу установку и в наше ПО. В нашей установке и ПО также используется Е14-440.
Отдельно создали консольное приложение по ваше примеру (используем Visual Studio 2010 c++) для модуля LTR114 для того чтобы разобраться с логикой управления. Все работает хорошо. Выводим измеренное напряжение и оно равно 0.005587 В. Переносим этот код в наше ПО и напряжение уже становится 4.80805e+029!!! Однако если в LTR114_ProcessData выставить параметр LTR114_CORRECTION_MODE_NONE то значение измеренного напряжения уже 0.0047297, что ближе к правде. Думали, что калибровочные коэффициенты не так записываются или что то с ними не так. Проверили через hltr114.ModuleInfo.CbrCoef.U и hltr114.ModuleInfo.CbrCoef.I для нашего ПО и консольного приложения и они были одинаковы:
4.19964  0.999368
2.03152  0.329547
0.390683  0.0994761

Есть подозрения думать, что функция LTR114_ProcessData работает в нашем ПО как то не так. Как вы думаете, что может быть не так?
Заранее спасибо.

P.S. все используемые функции, включая LTR114_ProcessData, возвращают значение 0. Проверяли. С приемом данных тоже вроде все хорошо.

16.03.2017 12:12:33
#2

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

Re: Крейт LTR-EU-2-5 с модулем LTR114. Проблема с LTR114_ProcessData().

Добрый день.
Если Ваша программа тоже на C/C++, собирается той же средой и последовательность функций и настройки модуля те же, то поведение не должно отличатся.
Все же проверьте, что никаких вызовов не забыто (того же LTR114_Init()).
Иначе должны быть какие-то отличия между примером и вашей программой (если конечно не предполагать порчу памяти...).

А так сами коэффициенты вычисляются при LTR114_Calibrate() (или при старте, если калибровка не сделана явно) и содержатся в AutoCalibrInfo.

Игорь Тамбасов
17.03.2017 09:00:50
#3

Гость

Re: Крейт LTR-EU-2-5 с модулем LTR114. Проблема с LTR114_ProcessData().

Здравствуйте!
Что дополнительно выяснили. Наше ПО и консольное приложение, из вашего примера, собираются в одной среде С++ Visual Studio 2010. Самое интересно, что если в консольном приложении установить параметр LTR114_CORRECTION_MODE_NONE в функции LTR114_ProcessData то значение измеряемого напряжения получается такое же как и в нашем ПО когда установлен тот же параметр LTR114_CORRECTION_MODE_NONE в функции LTR114_ProcessData.
Это явно означает, что консольное приложение и наше ПО принимает данные корректно (значит все необходимые функции отработали нормально). Но беда начинается когда мы выставляем любой из параметров LTR114_CORRECTION_MODE_INIT или LTR114_CORRECTION_MODE_AUTO в функцию  LTR114_ProcessData в нашем ПО.
Тогда значение измеряемого напряжения становится некорректным.
Может дело в том, что функция LTR114_ProcessData с параметром LTR114_CORRECTION_MODE_INIT (или LTR114_CORRECTION_MODE_AUTO) не успевает отработать? Может коэффициенты калибровочные  не успевают корректно посчитаться или записаться в нашем ПО?

Кроме этого, когда мы используем функцию LTR114_CreateLChannel(LTR114_MEASMODE_U, 0, LTR114_URANGE_04) в нашем ПО для создания канала, выскакивает ошибка типа:

Необработанное исключение типа "System.AccessViolationException" произошло в Shell.exe

Дополнительные сведения: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

А если используем
LTR114_LCHANNEL ltr114_lchannel;
ltr114_lchannel.MeasMode = LTR114_MEASMODE_U;
                    ltr114_lchannel.Channel = 0;
                    ltr114_lchannel.Range = LTR114_URANGE_04;


такая ошибка не выскакивает. Может дело в памяти?

17.03.2017 17:32:23
#4

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

Re: Крейт LTR-EU-2-5 с модулем LTR114. Проблема с LTR114_ProcessData().

Ну тут явно какая-то проблема есть в проекте, т.к. вызов функции по сути то же самое и делает. Возможно действительно что-то с порчей памяти, которая может быть вообще в другом месте проекта.

Причем если я не ошибаюсь System.AccessViolationException - это вообще исключение .Net Framework, который непосредственно к этому не должен никак относится.

Мне сложно представить Ваш проект и что в нем может быть... посоветовать можно разве что пробовать отключать какие-то его части, чтобы оставить какой-то минимальный код с возникающей ошибкой, на который уже можно посмотреть.

При калибровке типа LTR114_CORRECTION_MODE_INIT сами коэффициенты вычисляются в LTR114_Calibrate() и уже потом используются. Если функция завершилась без ошибок то они должны быть посчитаны корректно и дальше только используются в ProcessData()

Игорь Тамбасов
31.07.2018 12:12:32
#5

Гость

Re: Крейт LTR-EU-2-5 с модулем LTR114. Проблема с LTR114_ProcessData().

Добрый день. Разобрался! Оказывается пропустил вызов функции LTR114_GetConfig() после вызова функции LTR114_Open(). Теперь все работает корректно!

Контакты

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

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

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

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