PDA

Просмотр полной версии : текущее значение счетчика си 30!!!!



smizrakhy
08.12.2010, 13:39
Добрый День!
Использую Библиотеку owen_io.dll и подключаю ее в свой проект в среде
c++ builder. Необходимо получить Текущее значение счетчика СИ 30 в физических единицах.

При статическом подключении owen_io.h и компиляции проекта была выведена следующая ошибка:
[Linker Error] [...]\owen_io.LIB contains invalid OMF record, type 0x21 (possibly COFF).

Google дал ответ в виде: The library is of the wrong type. Use coff2omf.exe, located in CBuilder/bin, to convert it to the correct type. После конвертирования вышеуказанного LIB файла проект скомпилировался и начал работать.

Текущее значение счетчика получаю без проблем но только для беззнаковых целых чисел:
ReadUInt(16,ADRTYPE_8BIT,"Ctr",pulses, -1);

А его значение в физических единицах в виде числа с плавающей запятой
никак вытащить не удается. Пробовал все три функции из библиотеки owen_io следующим образом:

1) res = ReadFloat24(16, ADRTYPE_8BIT, "CEU", angle, -1);
функция выполняется успешно, но постоянно выдает очень маленькое число в экспоненциальном виде -45 степени

2) res = ReadStoredDotS(16, ADRTYPE_8BIT, "CEU", angle, -1);
функция выполняется успешно, но постоянно выдает 0

3) res = ReadIEEE32(16, ADRTYPE_8BIT, "CEU", 60,angle, -1);
функция выполняется успешно, но постоянно выдает число такое же как в пункте 1.

Попробовал использовать функцию, которая считывает знаковое целое число
- ReadSInt(16,ADRTYPE_8BIT,"Ctr",pulses, -1);
функция выполняется успешно, но возвращается нуль, странная реакция - только одна из перечисленных функций - ReadUInt дает правильное значение, но оно к сожалению не отображает знак важный для использования энкодера, когда он вращается в обратную сторону.

Подскажите Пожалуйста, Как решить проблему? Заранее Благодарен.

Илья Глан
10.12.2010, 15:53
Похоже у нас ошибка в функции readsint. Будем исправлять, но это потребует времени. Можно попробовать использовать функцию OwenIO и разобрать поле данных.

smizrakhy
13.12.2010, 14:04
Воспользовался советом Ильи Глана и попробовал использовать универсальную функцию обмена с приборами OwenIO.

Более того, нашел на форуме удачный пример использования данной функции, в котором реализовано чтение целочисленного знакового числа http://www.owen.ru/forum/showthread.php?t=5078&highlight=OwenIO

Таким образом проблема решена.