-
Ac3 + Mba
Здравствуйте,
это вопрос, помню, поднимался раньше, но к сожалению в истории форума я его не нашел, поэтому пишу еще раз.
Через АС3 подключен МВА, к которому подключены термопары. Конфигуратором для МВА удается получить адекватные значения температуры.
При чтении данных с помощью библиотеки owen_io.dll возникает ошибка -2 ( ERR_NO_RESOURCE -2 // попытка использовать неинициализированный ресурс (например неоткрытый порт) ).
Порт открывается следующей командой (как в примере для АС3 поставялемом вместе с бибилиотекой):
int result = open_port (COM_1, spd_9600, prty_NONE, databits_8,
stopbit_1, RS485CONV_MANUAL
);
if ( result < 0 ) {
std :: cout << "OWEN Port opening error\n";
return 0;
}
Настройки СОМ - порта правильные не уверен только в последнем параметре, он взят из примера. Возвращаемое значение не меньше нуля, т.е. из этого можно заключить, что порт открывается нормально (?).
Данные читаются командой:
int time;
float value;
result = read_ieee32 (16, 0,"rEAd", value, time, -1);
В данном случае команда возвращает код ошибки -2. базовый адрес МВА - 16.
За подсказку в каком направлении искать ошибку был бы очень благодарен,
с уважением,
С.А.
-
на вид все правильно. вы не из разных потоков эти функции зовете?
и скачайте свежую версию библиотеки с нашего сайта -- http://www.owen.ru/device/64305906
-
Спасибо, Вам большое за ответ - а Вы знаете, действительно из разных. В головном потоке открываю порт, а в подчиненном читаю данные. Библиотеку качал недавно.
Раньше помню были проблемы с последним параметром ф-ии readieee он варьировался между 1 и -1.
Хотелось бы еще спросить описание ошибки -2 ( ERR_NO_RESOURCE -2 // попытка использовать неинициализированный ресурс (например неоткрытый порт) ). Может ли тут речь идти еще о каком нибудь порте, кроме того который открываеся
open_port (COM_1, spd_9600, prty_NONE, databits_8,
stopbit_1, RS485CONV_MANUAL) ?
с уважением
А.С.
-
библиотеку лучше обновить -- у вас она старая. ошибка говорит о том, что порт вообще не был открыт.
Работа с одним портом из разных потоков (и с разными портами в одном потоке) поддерживается новой моделью библиотеки. Выбрать модель можно функцией SetApiMode(OWENIO_API_NEW). После этого можно выбирать активный порт функцией SelectPort(). Но я бы рекомендовал просто открывать порт в том потоке, где он используется.
-
спасибо. вам большое, несмотря на то, что я какчал библиотеку 2 недели назад, я скачаю ее ще раз как вы советутет и конечно попробую открывать порт в том же потоке, где и читаю.
о результатах сообщусь в понедельник,
с уважением,
а.с.
-
Здравствуйте,
действительно, прошу прощения, я был не прав библиотека новая - понятнее и лаконичнее, спасибо большое.
Однако при ее испытании возникли следующие трудности - когда я открываю порт такой же командой как и в примере
int res = OpenPort(COM_1, spd_9600, prty_NONE, databits_8, stopbit_1, RS485CONV_MANUAL);
if ( res != ERR_OK ) {
std :: cout << "Ошибка открытия порта." << std :: endl;
return;
}
Приложение вываливается в исключение, со стандартным окном, в котором предлагается отправить отчет Микрософт об ошибке. Со старой версией такого не было.
Библиотеку линкую к MinGW командой g++ ... -lowen_io.dll.
Параллельно также линкуется еще библиотека для реализации многопоточности тем же способом - с ней все нормально. Никаких ошибок линковки в отношении библиотеки owen_io не случается.
спасибо большое за помощь,
с уважением,
Сергей А.
-
самый простой выход такой: в файле owen_io.h заменяете строчку
#define OWEN_EXPORT __declspec(dllimport)
на
#define OWEN_EXPORT
перед именами функций добавляете подчеркивание: _OpenPort.
соответственно в программе так же используете _OpenPort().
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума