PDA

Просмотр полной версии : Обёртка owen_protocol.c для python



vitug
21.11.2012, 20:28
В библиотеке функций owen_protocol.c, которую можно найти на форуме (http://www.owen.ru/forum/showpost.php?p=28717&postcount=33), реализованы функции для работы по протоколу ОВЕН (вычисление хэшей, кодирование, раскодирование фреймов, преобразование данных). Работы с COM-портами нет, но и не нужно, легко можно реализовать отправку-прием различными методами, тем более, что мне нужно обмениваться через тот же COM-порт с другими устройствами, чего не позволяет делать owen_io.dll.

Я веду разработку программ для своих задач на языке Python, поэтому и решил сделать для него интерфейс к функциям из owen_protocol.c. В сборке поддерживаются все функции исходной библиотеки, их достаточно по крайней мере для чтения параметров, установку пока делать не пробовал, но думаю, что установка тоже будет работать. Функции библиотеки можно вызывать напрямую, но лучше использовать написанный мною класс для устройств ОВЕН, дающий удобный интерфейс для работы с приборами. Внутри приложенного файла сама библиотека для Python, интерфейсный класс и примеры работы. Обёртка сделана с помощью swig, скомпилирована для python 2.7.3.
Ссылка на библиотеку (http://py-owen-library.googlecode.com/files/py-owen-library.7z)
Ссылка на репозиторий (https://code.google.com/p/py-owen-library/)
Команда для получения последней версии исходников (при помощи программы Apache Subversion):
svn export http://py-owen-library.googlecode.com/svn/trunk/ py-owen-library-read-only

Пример кода:
owen=Owen(None,16)#Создаем устройство по адресу 16
print 'Hashes:'
#считаем хэши запросов
hashROUT=owen.GetHash('r.oUt')
hashRST=owen.GetHash('r.St')
hashREAD=owen.GetHash('rEAd')
print 'Read: ',hashREAD,'Out: ',hashROUT,"State: ",hashRST
#читаем данные из устройства
print owen.GetIEEE32(hashREAD)
print owen.GetDeviceName()
print owen.GetFirmwareVersion()
print owen.GetStringByName('dev')

Добавил класс для работы с ТРМ251 (пока реализовано чтение температуры и мощности), консольный пример работы с библиотекой и пример с использованием графического интерфейса пользователя на основе wxPython.
Для запуска примеров могут потребоваться библиотеки pySerial и pyWin32.

Dellactuaceax
25.11.2012, 23:12
Забавно читать :)

vitug
26.11.2012, 13:00
Забавно читать :)
Исходный код или сообщение?:)
Да, буковок много написал, но как говорится в таких случаях "это мой первый пост, просьба не пинать":)

iKarma
01.12.2012, 16:27
У меня есть ТРМ201 и АС-4. Я могу как-то использовать данный скрипт для своей работы - мне нужно считать 2 параметра из группы LvoP - это SP и PV. Это можно как-то сделать?

owen=Owen(None,32)#Устройство по адресу 32, Нужно-ли None менять на COM3?

vitug
04.12.2012, 00:47
У меня есть ТРМ201 и АС-4. Я могу как-то использовать данный скрипт для своей работы - мне нужно считать 2 параметра из группы LvoP - это SP и PV. Это можно как-то сделать?

owen=Owen(None,32)#Устройство по адресу 32, Нужно-ли None менять на COM3?
Я обновил файлы библиотеки, добавил примеры работы с портами.
Вместо None нужно поставить класс, обеспечивающий работу с COM-портом (он должен реализовывать методы write и read). Можно использовать стандартный класс из библиотеки pySerial. В примере есть мой класс, наследник от Serial, в него добавлена возможность протоколирования обмена.
Для чтения параметров нужно сначала получить их хэши методом
hash=GetHash(name), где name - точное имя параметра, как оно определено в документации. Затем полученный хэш используется для чтения параметра из устройства, у меня пока реализовано чтение целочисленных параметров и float32 параметров, это функции GetInt(hash,addrOffset) и GetIEEE32(hash,addrOffset).

Игорь Х.
23.04.2014, 11:28
Я послал Вам в личку сообщение с просьбой привести пример использования Ваших библиотек на языке Python для установки значения произвольного параметра, например, (SP float24). Не могли бы Вы прислать мне пример. Мой адрес: khromushin@mail.ru

danilk
29.06.2017, 10:29
Подниму тему. Кто-то занимался развитием библиотеки?
интересует реализация чтение запись r.OE МУ110-8К float24

danilk
05.07.2017, 10:49
вообщем дописал я сам. Я так понимаю, все в основном заточены на пользование готовых закрытых библиотек и мало интересуются кроссплатформой

alexsheksna
01.09.2017, 15:43
Можно уточнить, вы библиотеку писали под linux?

danilk
01.09.2017, 16:38
python кроссплатформа. единственное отличие это имя компорта

danilk
06.11.2017, 10:48
Очень интересно ведёт себя эта библиотека под малинойось и убубунту на Малине.
Для стабильности добил класс порта открытием/закрытием для каждой операции, что под распбианом свело кол-во ошибок почти к нулю, а вот в убунте сыпятся постоянно. При этом на десктопе ошибок нет в принципе

petja
10.05.2018, 05:08
Для стабильности добил класс порта открытием/закрытием для каждой операции, что под распбианом свело кол-во ошибок почти к нулю
Покажите пожалуйста код, у меня под Windows часто проскакивают ошибки.

danilk
10.05.2018, 09:37
https://github.com/danilkorotkov/owenDoors/tree/master/TSystem

petja
10.05.2018, 09:47
Спасибо большое!

petja
10.05.2018, 09:50
Сколько у вас приборов на одной шине RS-485 и как она физически реализована(марка кабеля, длина и т.п.)?

danilk
10.05.2018, 11:26
2 прибора. обычный ШВВП
От конвертора usb-485 стоят в 30 см

Сема
10.05.2018, 11:30
Интересно, не могу сообразить а каков реальный объект данной связки Python - протокол ОВЕН - прибор. Если не коммерческая тайна на чём и для чего это сделано? Я так понимаю, это делается для того, чтобы связать устройство под Linux'ом? Для того чтобы подружить Ubuntu или Raspbian? Для Python'a есть библиотеки с модбасом, зачем изобретать велосипед?

danilk
10.05.2018, 11:32
Для Python'a есть библиотеки с модбасом, зачем изобретать велосипед?

это вопрос разработчикам овена, почему на модбасе нет полных функций

Сема
10.05.2018, 11:36
это вопрос разработчикам овена, почему на модбасе нет полных функций

Не понял, что вы хотели этим сказать, Модбас это не разработка ОВЕН. Это реализация протокола, а на чём, не имеет значения.

danilk
10.05.2018, 11:39
изучите инструкцию к прибору мх110 и увидите, что на модбасе не все действия осуществимы

Сема
10.05.2018, 11:43
Так вы скрипт этот под Linux всё-таки использовали? Или на Windows? На какую оболочку перекинули данные, если не секрет?

danilk
10.05.2018, 11:48
программа на линухах
фронтенд на PyQt4
фото девайса выкладывал
по ссылке на гитхаб можно посмотреть весь проект
там же дописан GetFloat24 - этого не было в начальном варианте