PDA

Просмотр полной версии : работа с библиотекой owen_io.dll на VB



Valentin
02.08.2008, 14:54
Всем доброго времени суток!
Библиотека owen_io.dll прекрасно работает на Delphi. Но на Visual Basic 6 даже пример, скачанный вместе с библиотекой, не запускается.:mad:
Проблема заключается в том, что есть готовый проект, написанный на VB, в него только необходимо вставить модуль для считывания данных с ТРМ202 и ТРМ138. Переписывать всё на Delphi как-то не тянет.
Пожалуйста, возможно кто-то работал с этой библиотекой на VB, если можно, скиньте примеры на е-mail mnval@rambler.ru А также возможно ли связь с приборами без данной библиотеки? Используются адаптеры AC-3 или АС-4.
Буду благодарный всем за помощь.

Дмитрий Егоренков
04.08.2008, 14:00
как и с дельфи, у библиотеки нет никаких проблем с VB6. в приложении - небольшой пример использования.

использовать библиотеку не обязательно. вы сами можете реализовать протокол ОВЕН в своей программе. описание протокола есть на нашем сайте - http://www.owen.ru/support/40691149

Valentin
06.08.2008, 11:18
Дмитрий, спасибо за предоставленный пример. С опросом датчиков всё нормально. Если возможно, хотел бы попросить ещё один пример на VB для управления токовыми выходами ТРМ202 и ТРМ138 (индекс И). Большое спасибо Вам за помощь!

Дмитрий Егоренков
07.08.2008, 17:01
управление аналоговыми выходами ТРМ138 невозможно.

аналоговым выходам ТРМ202 соответствует параметр r.Out. он записывается функцией WriteFloat24(). при этом параметр CmP должен иметь значение 0. дополненный пример прилагается.

Valentin
11.08.2008, 14:27
Дмитрий, всё ОК. Большое спасибо за помощь!

незарегистрированный
12.08.2008, 13:17
Здраствуйте! У меня вопрос: как в Visual Basic указать к какому порту подключен адаптер? Например АС-4 необходимо подключить к СОМ 5. Помогите пожалуйста разобраться.

Дмитрий Егоренков
12.08.2008, 16:19
в этой теме есть пример использования библиотеки owen_io.dll. библиотеку и описание функций можно скачать с сайта - http://www.owen.ru/device/64305906

вот пример вызова функции OpenPort() для пятого порта, скорости 9600 и автоматического преобразователя:

OpenPort(4, 2, 0, 1, 1, 1)

Valentin
20.08.2008, 16:50
Ещё один вопрос. Судя по всему в перспективе придется подключать модуль дискретного ввода-вывода (МДВВ). К сожалению, описания протокола по этому прибору на сайте не нашёл. Если можно, небольшой пример на VB для считывания данных с входов и управления выходными каналами. И хочу поблагодарить Дмитрия за оперативные ответы и понятные примеры.

Дмитрий Егоренков
20.08.2008, 17:37
описание можно скачать со страницы прибора - http://www.owen.ru/catalog/74236730

состояние всех входов представлено параметром r.Cn. для чтения используется функция ReadUInt().

выходы управляются параметром r.OE. для работы с ним используются функции WriteFloat24() и ReadFloat24().

Алёна
29.10.2008, 14:22
Необходимо управлять с VB прибором ТРМ202. То есть считывать значения и задавать уровень аналогового выхода с компьютера. К сожалению оба примера, приведённые Дмитрием почему-то у меня не работают. То есть программа запускается, при попытке считывания выдаёт ошибку "53" : file not found: owen_io, и ссылается на строку программы
'OpenPort = OwenOpenPort(port, Speed, Parity, Databits, StopBits, ConverterType)'
Пожалуйста, помогите разобраться, где взять этот недостающий файл, или я что-то не так делаю?
При опросе используется порт COM8. Спасибо.

Дмитрий Егоренков
29.10.2008, 14:52
библиотека owen_io.dll должна находиться в одной папке с программой, либо в одной из папок, указанных в переменной среды PATH.

для отладки в среде разработки VB проще всего поместить библиотеку в папку \Windows\System32.

ну и скачать библиотеку можно с нашего сайта - http://www.owen.ru/device/64305906

Алёна
29.10.2008, 16:32
Большое спасибо, Дмитрий! С библиотекой всё заработало.

Алёна
29.10.2008, 20:57
Дмитрий, ещё одна проблема. Значения с ТРМ202 считываются, уровни управляющих сигналов регуляторов - тоже. А вот с заданием уровня сигнала регулятора - прямо беда. В примере программы для вывода сигнала используется программный код:

' Чтение параметра CmP
res = ioLib.ReadUInt(32, ADRTYPE_8BIT, "CmP", 0, ValInt)

' Отключаем компаратор. Так как CmP - конфигурационный параметр, каналы адрессуются через индекс
res = ioLib.WriteUInt(32, ADRTYPE_8BIT, "CmP", 1, 0)

' Управляем выходом
res = ioLib.WriteFloat24(32, ADRTYPE_8BIT, "r.oUt", -1, 0.5)

В описании прибора указано что на источник управляющего сигнала от компьютера или от регулятора указывает параметр r-L. А что же тогда означает CmP ?
Если Вас не затруднит, хочу попросить объяснить на небольшом примере как выбирать управление от компьютера или от прибора, и задавать управляющий сигнал.
Большое спасибо.

Алёна
31.10.2008, 08:05
Вроде бы как и не сезон отпусков...

Maximus
31.10.2008, 10:15
Алена, я не программист дать пример кода не смогу, я смогу пояснить как работает режим дистанционного управления. По интерфейсу доступен параметр «r-L». При присвоении этому параметру значения "1", переключается источник определяющий уровень выходного сигнала для ВУ, а именно управление ВУ переводится на ручное с заданием уровня выходной мощности в параметре "r.out". Соответственно параметр "r.out" так же доступен для редактирования по интерфейсу RS-485. Если Вы можете изменять параметр «r-L», полагаю с "r.out" проблем возникнуть не должно.

Дмитрий Егоренков
01.11.2008, 11:32
CmP - режим работы компаратора. 0 - компаратор отключен. в этом состоянии можно записывать значения в r.out. какое значение при этом надо записать в r-L лучше уточнить у Максима.

список параметров прибора можно скачать с нашего сайта вот здесь - http://www.owen.ru/support/40691149

соответствие параметров и функций библиотеки можно посмотреть в файле tags.txt.

Valentin
07.11.2008, 13:20
Всем добрый день!
По мере развития своего проекта столкнулся с необходимостью изменять задание для ТРМ202 (параметр Sp). Интересно, что для первого канала как считывание, так и замена этого параметра проходит без проблем.
Вот фрагмент программы:

' Чтение параметра SP для первого канала прибора с адресом 0
res = ioLib.ReadFloat24(0, ADRTYPE_8BIT, "Sp", 0, Val)

здесь всё читается без проблем
и изменение параметра SP для первого канала:

res = ioLib.WriteFloat24(0, ADRTYPE_8BIT, "Sp", 0, Val)

здесь тоже всё записывается без проблем.
Для чтения и записи во второй канал увеличиваю адрес прибора на 1:
чтение

res = ioLib.ReadFloat24(0 + 1, ADRTYPE_8BIT, "Sp", 0, Val)

запись

res = ioLib.WriteFloat24(0 + 1, ADRTYPE_8BIT, "Sp", 0, Val)

А вот здесь уже и не записывается и не читается. И как при записи, так и при чтении res принимает значение -100.
Возможно кто-то сталкивался с подобной проблемой? Буду благодарен за любую помощь. Заранее спасибо!

Nik
07.11.2008, 15:00
Мне кажется, что аргументом функции не может быть выражение. 0 + 1
надо передавать в функцию готовое значение то бишь 1.

Дмитрий Егоренков
07.11.2008, 15:54
Sp - конфигурационный параметр. поэтому каналы адресуются через индекс. вот так:

res = ioLib.ReadFloat24(0, ADRTYPE_8BIT, "Sp", 1, Val)

Valentin
07.11.2008, 19:39
Спасибо всем за помощь! Попробовал адресовать через индекс всё прошло без проблем, как считывание параметра, так и запись. И ещё раз спасибо Дмитрию за оперативность и точность информации.

Valentin
10.11.2008, 07:08
И снова появилась у меня ещё одна проблема. На этот раз необходимо разобраться в управлении выходом TPM202 из вне. Согласно описанию прибора параметр "CmP" указывает на тип логики компаратора, и может принимать значения от 0 до 4. Получается, что он не изменяется, так как тип логики компаратора заложен при изготовлении прибора. В то же время параметр "r-L" служит для перевода канала на внешнее управление. Попробовал работать с ним. Считывается он без проблем.
Вот, например, так считываю значение этого параметра для прибора с адресом 16. Так как параметр "r-L" оперативный, индекс = -1, выбор параметра для первого и второго канала задаётся адресом прибора.
res = ioLib.ReadUInt(16, ADRTYPE_8BIT, "r-L", -1, ValInt) - для первого канала, и
res = ioLib.ReadUInt(16+1, ADRTYPE_8BIT, "r-L", -1, ValInt) - для второго канала.
При считывании значение параметра на обеих каналах = 0. Для перехода на внешнее управление необходимо изменить значение на 1. Пробую делать это так:
res = ioLib.WriteUInt(16, ADRTYPE_8BIT, "r-L", -1, 1) - для первого канала
и
res = ioLib.WriteUInt(16+1, ADRTYPE_8BIT, "r-L", -1, 1) - для второго канала.
К сожалению, изменить значение таким образом не удаётся. При попытке записи функция WriteUInt принимает значение -104. В чём здесь может быть ошибка? Кто в курсе, помогите, пожалуйста, разобраться. Спасибо.

Дмитрий Егоренков
10.11.2008, 12:32
используйте для записи функцию WriteByte().

Valentin
11.11.2008, 17:04
Всё получилось. С управлением ТРМ202 полностью разобрался. Спасибо за помощь!

Ivan_Tarasov
15.04.2011, 14:27
Добрый день Дамы и Господа!

Необходимо управлять модулями МУ110-16р и МВ110-16д на VB по протоколу ОВЕН. Включение входов модуля МУ110-16р проходит нормально функцией WriteFloat24(16, 0, "r.Oe ", val, -1). Но считывание значений этих модулей выдает ошибку. Помогите в решении этой проблемы?

Илья Глан
18.04.2011, 12:38
Ошибку надо прочитать функцие LastErrToStr. Будет понятно что не нравится прибору, или библиотеке.